0x01 题目
<?php
error_reporting(0);
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect to MySQL: ' . mysql_error());
}
// 选择数据库
$db = mysql_select_db("test", $link);
if(!$db)
{
echo 'select db error';
exit();
}
// 执行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()这个函数,php手册的说明是这样的:
就是说第二个参数是true的时候,会把生成的MD5值当作hex值来转换成字符串,因此,我们可以生成一种含有'or'的hex值,这样就可以用来注入了。
字符串ffifdyop就是一个符合的字符串,本地测试返回的是符合条件的
因此可以注入,payload
?pwd=ffifdyop
(感觉这个只有注入,利用应该没有吧(╯▽╰ ))