SQL注入,xpath函数updatexml()和extractvalue()报错注入原理

报错注入,顾名思义利用非法语句产生报错并返回报错的内容,当报错内容为SQL语句的时候,SQL那边的解析器会自动解析该SQL语句,就造成了SQL语句的任意执行,了解SQL报错注入原理能更好地帮助我们提升手工注入的技能

目录

updatexml()函数分析

extractvalue()函数分析

函数报错原因

注入利用

报错注入的缺陷及解决方法


updatexml()函数分析

官方定义:

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称;

第二个参数:XPath_string (Xpath格式的字符串);

第三个参数:new_value,String格式,替换查找到的符合条件的数据;

返回内容:若xpath正确则返回更改对象名称,否则返回xpath错误内容

说白了这个函数就是找查一个xml并替换它的名字,xpath就是xml的路径

SQL注入,xpath函数updatexml()和extractvalue()报错注入原理_第1张图片

 上面的xpath的格式是不对的,主要是意会一下函数的作用

extractvalue()函数分析

官方定义:

EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称;
第二个参数:XPath_string (Xpath格式的字符串);

返回内容:若xpath正确则返回目标XML查询的结果,否则返回xpath错误内容

说白了这个就是找一个xml并返回内容,xpath就是xml的路径

SQL注入,xpath函数updatexml()和extractvalue()报错注入原理_第2张图片

 这里也是随便输入的

函数报错原因

可以看到上面两函数里都有xpath路径,而在xpath中,插入~(ASCII码是0x7e)和^(ASCII码是0x5e)等特殊字符是非法的,也就会产生报错,而这些特殊字符也恰好是报错注入的关键点,而当报错内容为SQL语句的时候,SQL那边的解析器会自动解析该SQL语句,就造成了SQL语句的任意执行

效果图如下:

都回显了~字符

注入利用

知道了函数报错的原因,我们就可以利用SQL语句里面的字符串联合函数concat、group_concat等,将特殊字符跟SQL语句联合起来,产生报错,并返回SQL语句的执行结果,下面是简单的报错注入利用

select updatexml(1,concat("~",database()),1)

select extractvalue("a",concat("~",database()))

 

 而在实战操作中就得用管道符(||或&&)或者是逻辑连接符(or或and)将语句连接,配合使用了,一般来说and和||比较好用

报错注入的缺陷及解决方法

报错注入好用是好用,但是报错回显的内容一般只有32位长度的字符串,这时候我们就可以用字符串截断函数截断查询的SQL语句,来回显32位后面的内容了,常用的字符串截断函数有letf、right、mid、substr等等,以最常用的mid为例

SQL注入,xpath函数updatexml()和extractvalue()报错注入原理_第3张图片

进行截断的时候就用mid(sql语句,32,32),mid(sql语句,64,32)

你可能感兴趣的:(mysql,sql,SQL注入)