DVWA Sqli QUERY

mac2025-06-19  3

出差学习中。。。

0x01 WooYun-2014-61361

先输入1,看下情况。 输入1'。 报错了,至少是可以报错注入了。继续尝试1 and 1=1,发现有waf过滤了。 继续尝试1=1,无报错。 猜测是将and过滤了,尝试使用大小写、内联注释、替换前后空格的方法均会被过滤,尝试编码绕过,使用urlencode就直接成功了。 其余过程不贴了,直接贴最后的数据。

0x02 源码分析

WooYun-2014-61361 Source <?php if(isset($_GET['Submit'])){ // Retrieve data inject_check(strtolower($_SERVER['QUERY_STRING'])); //检查ID是否合法。 $id = $_GET['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++; } } function inject_check($str) { //防注入函数开始 $check=preg_match('/select|order|insert|update|eval|document|delete|injection|jection|link|and|or|from|union|into|load_file|outfile|<script>/',$str); if($check){ echo "<script>alert('Filtered!!!');window.history.go(-1);</script>"; exit(); }else{ return $str; } } ?>

可以看到,是先检查ID参数是否合法,然后直接带入SQL语句再执行的,由于用的preg_match函数匹配里面的关键字,所以这里直接用urlencode就可以绕过了。

最新回复(0)