报错注入中,页面没有显示位,但会输出SQL语句执行错误信息,SQL报错注入就是人为利用数据库的某些机制,人为制造错误条件,使得查询结果能够出现在错误信息中,以xpath语法错误为例
Xpath语法错误主要涉及两个函数
(1)updatexml( )
(2)extractvalue( )
Updatexml语法格式(XML_document,XPATH_string,new_value)
第一个参数:xml文档的名称
第二个参数:xpath格式的字符串
第三个参数:替换查找到的符合条件的数据
1.判断是否存在注入
如果能引起数据库的报错,说明用户是可以对查询语句进行修改,说明存在漏洞
2.判断注入类型
通过1' and 1=1#和1' and 1=2#判断,若页面有不同的变化,则是字符型注入
页面不同,故为字符型注入
3.获取数据库名
此处便使用到了updatexml语法,可为什么不直接用updatexml(1,database(),1)来查询数据库名呢,而要加入concat函数,首先回到语法格式上:updatexml(XML_document,Xpath_string, new_value),我们必须在XPath_string这个参数里填充xpath格式的字符串,但是如果我们填充一个不是xpath格式的字符串,就会产生报错,所以语句就变成了updatexml(1,database( ),1),前后两个1是随便填充的内容,目的是满足三个参数。但是由于xpath只会对特殊字符进行报错,这里我们可以用~,16进制的0x7e来进行利用,所以就变成了updatexml(1,0x7edatabase00x7e,1),但是由于数据库无法认识中间的内容,所以就无法成功执行,所以可以用concat0函数把多个字符串合并成一个,就变成了updatexml(1,concat(0x7edatabase0,0x7e)1)
4.获取数据库表名
查询语句要带括号,因为concat函数中不能有空格,需要用括号将其变成整体
5.获取表中的字段
6.获取字段中的记录
由于xpath只会报错32个字符,故使用substr()函数进行截取,若想截取后续内容,改变1,32的值即可