SQL注入之报错注入

报错注入中,页面没有显示位,但会输出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的值即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值