如何理解MySQL注入中extractvalue()报错注入中的0x7e


在学习报错注入的过程中,对于extractvalue()这个函数的报错注入始终抱有一个疑问,为什么再concat连接语句时始终要有个0x7e在前面呢?

extractvalue(null, concat(0x7e, database()));

上面这个语句为什么会报错?首先讲下extractvalue()这个函数的作用。

ExtractValue(xml_frag, xpath_expr)

ExtractValue()接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。

第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径

如何让extractvalue()这个函数产设错误并报告?那么自然需要在使用过程中有语法错误,怎么去创造这个语法错误使得这个错误变得万能呢?就是使用这个语法中本身不含有或者不支持的字符。

例如:SELECT ExtractValue('<a><b><b/></a>', '/a/b'); 就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

在ASCII码表中,0x7e这个十六进制数代表符号~,~这个符号在xpath语法中是不存在的,因此总能报错。同理,肯定也有其他字符是XPATH语法不支持的。  ! 也是不支持的,因此也可以使用。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM