DVWA Sqli using [Slashes]

mac2026-05-08  2

0x01 WooYun-2014-51950

输入1',发现被转义了,同时也试过了整形注入,判断肯定不是整形注入。 所以尝试使用宽字节注入1%df',发现并不行(注意:这里是使用%df要直接在浏览器里面输入,不可以在框中输入,有编码问题) 没什么太好头绪的时候,输入了一个\发现有报错了。 确实是单引号闭合的,这次输入1\' #,发现可以正常显示。。。 总不能多了一个\真的把多出来的\给闭合了吧,估计是做了什么怪操作,而且addslashes()好像也会给\加上\的吧。接着尝试and 1=1和and 1=2,果然,and 1=2的时候无回显,可以注入了,直接拿数据1\' union select 1,group_concat(user,char(94),password) from users#。

0x02 源码分析

WooYun-2014-51950 Source <?php if(isset($_GET['Submit'])){ // Retrieve data $id = addslashes($_GET['id']); $id = str_replace("\\\\", "\\", $id); $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++; } } ?>

看源码这里还是有点奇怪的,先给id加上了反斜杠,但是我测试了下,和想像中有点不一样。

$id = "\'"; $id = addslashes($id); print "first time:".$id; print "<br>"; $id = str_replace("\\\\", "\\", $id); print "last result:".$id;

上面代码的运行结果是

first time:\\\' last result:\\'

原来str_replace()不是将\\\\替换成\\,而是将\\替换成\,所以3\\\就变成了\\,最后SQL语句就变成了SELECT first_name, last_name FROM users WHERE user_id = '1\\' and 1=1 #',\将\转义了,所以查询的是其实是1\这个字符串,是可以正常查询的,同时也保留了单引号,给我们闭合单引号留下了机会,但是没想明白为啥要搞这么一手操作。。。取数据的时候可以到是可以用这些东西屏幕掉\,当然还可以用stripslashes(),但是这不就给我们机会搞二次注入了么,哈哈。

最新回复(0)