1. 程式人生 > >BugKuCTF中套路滿滿的題-------備份是個好習慣

BugKuCTF中套路滿滿的題-------備份是個好習慣

首先就點進去是一串字元

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就輕鬆的爆出來了。。。