本篇文章讲解sql-labs系列less18、less19和less20关卡,这几关都是在HTTP消息头进行注入,注入方式又发生了变化,我也是看了好几篇文章才总结了一下,如有错误欢迎指正。
hackbar或者burpsuite
HTTP消息头字段信息这里就不在讲解了,网上搜一下一大堆,测试的时候发现无论是在username字段注入还是在password字段注入都没有任何结果,查看源码发现被过滤了,一起看下源码:
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
可以看到uname和passwd注入点都被过滤了,不过在源码中发现了insert语句:
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
可以看到在uagent、ip_address和username字段插入了数据,由于username字段过滤了所以不能进行注入,还有一处代码给出了提示:
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
$_SERVER是PHP超全局变量,从HTTP的头字段获取信息,可以看到图中是在头里面获取了user_agent字段和IP字段,那我们就在user_agent字段进行注入,方法有两种:
第一种是使用hackbar,勾选User Agent选项以后在图中U那个文本框里面输入注入语句,不过这里提醒一下,测试的时候试到’and 1='1’才不会报错,但是只有爆数据库的时候前面使用and或or都可以爆出来,但是之后开始就必须使用or才会成功爆出信息,否则什么信息都不回显,在获取多条信息的时候依然需要使用limit一条一条的查看(可以使用group_concat全部爆出来,不过我用的时候发现只要信息里面有flag就不会显示,但是在concat里面嵌套一个group_concat就可以,古怪!),第二种:
使用burpsuite注入,进入burp suite以后选择相应的请求报文然后发送到Repeater在User Agent进行注入,我是让User Agent头里面的信息删除直接注入了,sql语句直接跟在原来的User Agent信息后面也可以,其余的细节跟第一种方法都一样了。
19关除了注入点在Referer以外注入方法都一样,不过要注意的是如果使用hackbar注入的话会有一个细节问题(使用burpsuite也是这样),看下图:
Truncated incorrect DOUBLE value: 'http://localhost/sql-labs/ ’
报出上面这个错误信息 我做的时候没有注意到,卡了很久,百度了很多相应的错误信息都没有解决,这个注入的时候需要让http://localhost/sql-labs/删除掉,也就是说Referer文本框里面是空的,这个需要特别注意!
可以从图中看到正确注入会显示User Agent和Cookie信息,查看源码可以发现后台让username和password写入了cookie中,可以直接使用hackbar(burp suite也可以)进行cookie注入,如下图:
可以看到跟前两关一样,同样使用extractvalue或者updatexml报错回显,不过需要在cookie输入文本框里面再次username和password(如果使用burpsuite不需要重新输入,burpsuite头消息cookie字段里面会自动获取user信息,只需要再后面拼接注入语句即可),后面的注入语句跟前两关一样,不再解释。 完成,感谢支持!