easyphp(xctf)
只有當$key1和$key2都=1時,才會顯示falg。為了讓它們都等于1,一共需要對三個參數進行繞過
參數a
isset($a) && intval($a) > 6000000 && strlen($a) <= 3判斷參數是否為空,并且傳入的數據長度不能超過3,值要大于6000000。
可以使用科學計數法來繞過? 1e3=100
參數b?
isset($b) && '8b184b' === substr(md5($b),-6,6)參數b傳入的數據被MD5加密后的最后6位必須是8b184b
可以爆破出來,php代碼
<?php $a=0; while(1) {if(substr(md5($a),-6,6)==='8b184b'){echo $a;break;}$a++; } ?>結果是: 53724?參數c
$c=(array)json_decode(@$_GET['c']); if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){$d = array_search("DGGJ", $c["n"]);$d === false?die("no..."):NULL;foreach($c["n"] as $key=>$val){$val==="DGGJ"?die("no......"):NULL;json_decode()接受一個JSON格式的字符串并且把它轉換為PHP變量?,當該參數$assoc為TRUE時,將返回array,否則返回object。
?傳入的c必須有m,n兩個鍵名,m的鍵值不是數字,但是要大于2022。
php中,當字符與數字進行比較時,字符會被轉化為數字,?可以構造? "m":2023a。
n的鍵值是一個數組,數組的長度不能超過2,并且is_array($c["n"][0]) 告訴我們必須是一個二維數組
"n":[[1,2],[1,2]]? ?->? $c['n']=[[1,2],[1,2]] , $c['n'][0]=[1,2]
$d = array_search("DGGJ", $c["n"]);$d === false?die("no..."):NULL;foreach($c["n"] as $key=>$val){$val==="DGGJ"?die("no......"):NULL;array_search() 在數組中搜索要查詢的鍵值,并返回它的鍵名(沒有鍵名,返回下標)
首先$d不能的flase,那么array_search() 能夠搜索帶"DGGJ",即數組中有DGGJ
然后在foreach遍歷循環中,又不能讓$val="DGGJ",即數組中不能又DGGJ
兩者互相矛盾
可以從array_search()這里來繞過,array_search()在搜索中,實際上是一個比較的過程
php中數字和字符串進行比較的時后,字符串會被傳換位數字,所以在與數字比較的時候,DGGJ會被轉換位0,只需要數組中有0即可。
成功返回了0對應的下標。
所以c={"m":2023a,"n"=[[1,2],0]}
?
總結
以上是生活随笔為你收集整理的easyphp(xctf)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 实现百度地图骑行路线规划
- 下一篇: matplotlib 改变时间刻度间隔