實驗吧CTF天網管理系統
阿新 • • 發佈:2019-01-06
天網你敢來挑戰嘛
格式:ctf{ }
解題連結: http://ctf5.shiyanbar.com/10/web1/
開啟連結後,嗯,光明正大的放出賬號密碼,肯定是登不進的,檢視原始碼
看來是和md5碰撞有關的了,
PHP在處理雜湊字串時,會利用”!=”或”==”來對雜湊值進行比較,
它把每一個以”0E”開頭的雜湊值都解釋為0,所以如果兩個不同的密碼經過雜湊以後,
其雜湊值都是以”0E”開頭的,那麼PHP將會認為他們相同,都是0。
攻擊者可以利用這一漏洞,
通過輸入一個經過雜湊後以”0E”開頭的字串,即會被PHP解釋為0,
如果資料庫中存在這種雜湊值以”0E”開頭的密碼的話,他就可以以這個使用者的身份登入進去,
儘管並沒有真正的密碼。
0e開頭的md5和原值:
(加密後值為0)
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
我們隨便選一個,將使用者名稱改為s878926199a
將url改為該地址,進入後審計程式碼
$unserialize_str = $_POST['password'];
$data_unserialize = unserialize($unserialize_str); #unserialize() 對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。
if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???') { print_r($flag); }
偉大的科學家php方言道:成也布林,敗也布林。 回去吧騷年
1.需要構造序列化的password填入,程式碼意思是把post提交的password值經過"反序列化"得到一個數組, 要求數組裡的user和pass都等於某個值時就列印flag。 2.bool型別的true跟任意字串可以弱型別相等。因此我們可以構造bool型別的序列化資料 ,無論比較的值是什麼,結果都為true。 序列化與反序列化: 把複雜的資料型別壓縮到一個字串中 serialize() 把變數和它們的值編碼成文字形式 unserialize() 恢復原先變數 自己實踐序列化函式