天天看點

實驗吧WEBWP(一)

1.Forms(連結:http://www.shiyanbar.com/ctf/1819)

頁面很幹淨,第一反應檢視源碼

在此之前,我們先随便輸入然後點選enter,沒什麼線索

源碼中我們看到value=0

實驗吧WEBWP(一)

将value改為1,再随便輸入然後點選enter

實驗吧WEBWP(一)

毫無疑問,輸入的内容就應該是a的值

得到flag

2.天網管理系統(http://www.shiyanbar.com/ctf/1810)

思路:

第一步看源碼,

意思是Php将username哈希以後與0比較,即‘0exxxxxxxx’類似這樣的哈希值會相等(弱相等),因為字元串和數字比字元串會轉變成數字比較,即0e100相當于0的100次方

于是百度一下0e開頭的md5哈希字元串,如下:

QNKCDZO(0e830400451993494058024219903391)

s878926199a(0e545993274517709034328855841020)

s155964671a(0e342768416822451524974117254469)

s214587387a(0e848240448830537924465865611904)

随便挑一個填在使用者名中

密碼使用admin

送出後得到路徑/user.php?fame=hjkleffifer

打開指向的url的網頁,檢視源碼得到

unserializestr= _POST[‘password’]; dataunserialize=unserialize( unserialize_str); if(data_unserialize['user'] == '???' &&data_unserialize[‘pass’]==’???’) { print_r($flag); } 偉大的科學家php方言道:成也布爾,敗也布爾。 回去吧騷年

代碼意思是把post送出的password值經過”反序列化”得到一個數組,要求數組裡的user和pass都滿足,就列印flag

我們不知到???是什麼,但是我們注意到資訊中判斷條件使用的為==(php弱類型)

bool類型的true跟任意字元串可以弱類型相等的,當代碼中存在unserialize或者json_decode的時候,我們可以構造bool類型,來達到欺騙。

現在我們構造一個數組,元素分别是user和pass,都是bool類型的true,于是我們得到

a:2:{s:4:”user”;b:1;s:4:”pass”;b:1;}(a代表array,s代表string,b代表bool,而數字代表個數/長度)

意思是數組a中有兩個元素,長度為4的user元素的bool值為1,長度為4的pass元素的bool值為1.

這樣,經過反序列化後的user以及pass都是1,滿足if語句,則會print出flag

然後就有了兩種答案(其實本質上是一種答案)

(1)使用者名:admin

密碼:a:2:{s:4:”user”;b:1;s:4:”pass”;b:1;}

(2)使用者名:

QNKCDZO(0e830400451993494058024219903391)

s878926199a(0e545993274517709034328855841020)

s155964671a(0e342768416822451524974117254469)

s214587387a(0e848240448830537924465865611904)

MD前字元串四個中的一個

密碼:a:2:{s:4:”user”;b:1;s:4:”pass”;b:1;}