暑期练习web8:加了料的报错注入(实验吧)

解题连接:ht=tp://ctf5.shiyanbar.com/web/baocuo/index.php
进入解题首页面就出现tips让我们post给username和password传值
随便传个值试试
这里写图片描述
只报了登陆失败的字样
换成username=’&password=5就说我有sql语法错误,说明这题是要考虑sql注入的
然后用burpsuite检测许多sql相关的词,看哪些词被过滤了
bp爆破测试教程可以参考这一篇https://blog.csdn.net/weixin_38948797/article/details/79111566
查看测试的结果:# = union select等这几个都是报错‘Sql injection detected’说明都被过滤了,
这里写图片描述
然后值得我们注意的是:
=在username里被过滤了,报错是’User name unknow error
但在password里还是报的登陆失败,说明=在password里没被过滤
介于这个情况,还有源码中的提示是这样一整句的查询

<!-- $sql="select * from users where username='$username' and password='$password'";  -->

故而我们考虑用http分割注入,这个形式便是把一个想执行的语句,拆散到两个参数里,并注释中间的东西,来达到注入的目的
例如:
举例: 

举例: 
  /?a=1+union/*&b=*/select+1,pass/*&c=*/from+users-- get传值
  select * from table where a=1 union/* and b=*/select 1,pass/* limit */from users—

清楚方法后呢,我们再想想用什么方法来注入,毕竟=、union什么的都被过滤了
通过阅读其他人的wp了解到了经常使用的报错注入函数updatexml进行测试。因此通过updatexml在存储非XPath格式的字符串时的报错输出获得所需要的信息。

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称。
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
(反正不管看哪个博客都是这个介绍。。。)
这里经过测试发现,updatexml在username中可用,而在password中被过滤了
这里写图片描述
这里写图片描述
所以将函数名放在username中,现在还有一个问题,等号‘=’不让用,我们这里告诉一个操作:<>在sql中表示不等于,再在前面加个!就能起到等号的作用了
这里写图片描述


接下来正式开始注入
爆库:
username=1' or updatexml/*&password=*/(1,concat(0x7e,(select database()),0x7e),1) or '1
这里写图片描述得知库名后开始爆表
username=1' or updatexml/*&password=*/(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where !(table_schema<>'error_based_hpf')),0x7e),1) or '1
这里写图片描述然后是列
这里写图片描述
最后查看内容
这里写图片描述
总结:经过这个题后熟练了bp的intruder模块的功能,以后检索关键词更方便了,再者,就是解锁了新姿势http分割注入,其实还是挺有收获的
这次是w的heat trigger
这次是W

猜你喜欢

转载自blog.csdn.net/qq_41618162/article/details/81783298