Login
題目
需要密碼才能獲得flag哦糊识。
題目鏈接:http://web.jarvisoj.com:32772
思路:
打開鏈接是一個提交password界面浮梢,放到burp里看一看呀~
Hint: "select * from `admin` where password='".md5($pass,true)."'"
一看到md5舆乔,我就想到password為md5為0e開頭的值缴允。輸入
password蕉鸳;s878926199a
這時出現(xiàn)了Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/index.php on line 14.才發(fā)現(xiàn)以上行不通映砖。出現(xiàn)這個問題的原因是沒有理解".md5($pass,true)."的含義呀。
參考文章:https://blog.csdn.net/March97/article/details/81222922 哈哈面粮,在這里我找到了md5(string,raw)的含義少孝。
關注重點放到
password='".md5($pass,true)."'
上。
參考:
http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/
原始md5可以包含任何字符熬苍,并且腳本將它們按原樣放入查詢中 - 它是一個sql注入版本稍走。
我們要做的是強制使用原始md5包含'或'的密碼,以便查詢看起來像
SELECT login FROM admins WHERE password = '<trash>' 或'1 <shit>'
這里使用的php代碼
<?php
for ($i = 0;;) {
for ($c = 0; $c < 1000000; $c++, $i++)
if (stripos(md5($i, true), '\'or\'') !== false)
echo "\nmd5($i) = " . md5($i, true) . "\n";
echo ".";
}
?>
通過暴力破解柴底,最后找到了這樣一個密碼呀~I’ve found a password: ffifdyop, with hash: 276f722736c95d99e921722cf9ed621c (‘or’6<trash>).
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b
但是我們思考一下為什么6\xc9]\x99\xe9!r,\xf9\xedb\x1c的布爾值是true呢婿脸?
這里引用一篇文章”ぃ“a string starting with a 1 is cast as an integer when used as a boolean."
在mysql里面狐树,在用作布爾型判斷時,以1開頭的字符串會被當做整型數(shù)凿歼。要注意的是這種情況是必須要有單引號括起來的褪迟,比如password=‘xxx’ or ‘1xxxxxxxxx’冗恨,那么就相當于password=‘xxx’ or 1 答憔,也就相當于password=‘xxx’ or true,所以返回值就是true掀抹。當然在我后來測試中發(fā)現(xiàn)虐拓,不只是1開頭,只要是數(shù)字開頭都是可以的傲武。
當然如果只有數(shù)字的話蓉驹,就不需要單引號城榛,比如password=‘xxx’ or 1,那么返回值也是true态兴。(xxx指代任意字符)