这次做的是sql注入类型的题目,上来先试一下单引号,双引号,判断是否为字符型注入,发现并判断其闭合是单引号还是双引号
这里我先测试的单引号,发现有报错返回,分析报错信息,这里应该是由双引号闭合的,所以我们考虑利用报错注入,这里报错注入我所掌握的是updatexml函数和extractvalue函数,利用这两个报错函数返回报错信息。
首先了解下updatexml()函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
改变XML_document中符合XPATH_string的值
而我们的注入语句为:
updatexml(1,concat(0x7e,(select database()),0x7e),1)
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,然后将错误爆出。
1、尝试使用updatexml函数报错注入
发现这里无法注入,说明我们有字符串被过滤了,这里我们与原来能发生报错的字符串比较,发现第一个先是or有报错,但发现将or修改为^或者直接只写一个or,发现并没关联,所以后面到空格,这里将空格用括号代替使用,发现成功注入成功。
这里我们就知道空格被作为过滤的关键字符,然后我们就开始逐次爆破
爆破表名
这里的开始爆破后发现又有关键字符被过滤了,因为之前的select等都没问题,经测试其他几个字符后发现是=有问题,这里我们可以用sql里面的like的模糊查询,可以构造成like(‘geek’)
这里已经爆破出了表名,接着开始爆破列名
这里发现返回的数据超过1行,所以我们需要使用group_concat()函数,它的大概作用为返回同一列分区的信息作为列表返回,因为我们的列名都在同一分区下,所以直接返回全部列的名字信息
这里已经爆破出了列表名,然后我们就可以爆破password
这里我们可以看到,我们爆破出了flag,但只是半段,所以要利用right函数爆破出后半段flag
这里将后半段flag合并就可以了
最后还有一种方法,使用extractvalue函数替换updatexml函数,它是使用方式为
extractvalue(1,concat(0x7e,select database(),0x7e)),然后操作方式与updataxml相同,可以试一下