sql报错注入:extractvalue、updatexml
extractvalue报错原理
MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue、updatexml
名称 | 描述 |
---|---|
ExtractValue() |
使用XPath表示法从XML字符串中提取值 |
UpdateXML() |
返回替换的XML片段 |
通过这两个函数可以完成报错注入
ExtractValue(xml_frag, xpath_expr)
ExtractValue()
接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA
第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。
第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径
例如:SELECT ExtractValue('', '/a/b');
就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。
利用concat函数将想要获得的数据库内容拼接到第二个参数中,报错时作为内容输出。
concat函数的作用是拼接。
1 | SELECT ExtractValue('<a><b><b/></a>',concat('~',(select database()))); |
updatexml报错原理
UpdateXML(xml_target, xpath_expr, new_xml)
xml_target:: 需要操作的xml片段
xpath_expr: 需要更新的xml路径(Xpath格式)
new_xml: 更新后的内容
原理差不多 不再多做赘述
正常使用方法select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))
同样使用concat函数进行拼接,最多只显示32位
1 | select updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1); |
concat拼接语句
请自行替换
1 | 爆数据库版本信息 |