XVWA SQL Injection – Error Based/SQL Injection – Blind

0x00 SQL Injection – Error Based手工审计

在这里插入图片描述
一共两个文件,先看主页index.php,只有包含。

 <?php 
      include('home.php');
          
  ?>

接着再看home.php源代码,发现有两处传入参数j进行数据库操作,两处参数均无过滤。

$item = isset($_POST['item']) ? $_POST['item'] : '';
$search = isset($_POST['search']) ? $_POST['search'] : '';
$isSearch = false;
if(($item!="") && $search!=""){ 
    echo "<br><ul class=\"featureList\">";
    echo "<li class=\"cross\">Error! Can not use both search and itemcode option. Search using either of these optoins.</li>";
    echo "</ul>";
}else if($item){
    $sql = "select * from caffaine where itemid = ".$item;
    $result = $conn->query($sql);
    $isSearch = true;
}else if($search){
    $sql = "SELECT * FROM caffaine WHERE itemname LIKE '%" . $search . "%' OR itemdesc LIKE '%" . $search . "%' OR categ LIKE '%" . $search . "%'";
    $result = $conn->query($sql);
    $isSearch = true;
}
一、item参数,where语句注入

先看item,此参数通过表单选项框进行提交,但是也可自行拦截修改,并无大影响。
在这里插入图片描述
执行语句
在这里插入图片描述
这个地方对应着下面这个场景。
在这里插入图片描述
这里直接拿sqlmap来进行测试是否存在漏洞,不跑数据。

python sqlmap.py -u "http://127.0.0.1/xvwa/vulnerabilities/sqli/home.php" --data="item=1" --batch

运行结果如下
在这里插入图片描述
已经发现是存在注入,不仅有题目中所说的报错注入,就连联合查询注入的方式也是可以。

这里由于代码已经配置完成,所以再使用pdo工作量也比较大,如果使用过滤或者转义在很多情况下也有可能会有没有想到的关键词没有处理掉,那么这里就可以使用intval()函数来处理item参数。

$item = isset($_POST['item']) ? intval($_POST['item']) : '';

修改后,再来尝试一次sqlmap
在这里插入图片描述

二、 search参数,like语句注入

接着来看第二个地方。
在这里插入图片描述
这里的search也是没有做处理的,拼接后就形成了字符型注入。sqlmap走一波。

python sqlmap.py -u "http://127.0.0.1/xvwa/vulnerabilities/sqli/home.php" --data="search=1" --dbms="mysql" --threads=20  --flush-session --batch -v 3

我去,走不出来,我发现我是真的不太会用sqlmap。还是手工测试下吧。
在这里插入图片描述
确实是存在注入的,这里使用的是报错注入,盲注一般来说也是可以的。而且由于这里where类型的子句,大概联合查询语句也可以,试试。
在这里插入图片描述
那接下就是修复了。这里是字符串,所以intval()肯定不适合了,那么我这里就只能考虑考虑转义'符号,或者做特殊关键字的检查了(为什么不用过滤呢,过滤是真的不好用,有时候过滤没写好,还有可能被双写或者大小写绕过),这里先采用转义吧,采用转义的话那就得注入是否存在宽字节注入啦,不过我默认都是utf_8的编码,这里使用addslashes()之类的转义函数即可。

$search = isset($_POST['search']) ? addslashes($_POST['search']) : '';

再来试试,注入没了。
在这里插入图片描述


0x01 SQL Injection – Blind手工审计

代码和上一关一样,没区别,可能就是把报错信息给关掉了。。。

error_reporting(0);

之前的是

error_reporting(E_ALL);

讲道理,还是可以用联合查询注入的,这个我就不继续看了。


0x02 总结

SQL注入防御的方法:

  1. 特殊字符加转义
  2. 特殊关键字做过滤
  3. 用waf检查特殊字符/关键字
  4. pdo语句用法

在刚刚那个like语句那里,看到有个哥们是这样的写法。

select * from test where school_name like concat('%',${name},'%')  

先使用concat进行拼接,然后再进行模糊查询,我自己试了下,还别说,想了会还真绕不过去。
在这里插入图片描述
如果还有其它的方法,欢迎评论交流~

发布了265 篇原创文章 · 获赞 266 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014029795/article/details/105086518