博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql报错注入:extractvalue、updatexml报错原理
阅读量:4585 次
发布时间:2019-06-09

本文共 1438 字,大约阅读时间需要 4 分钟。

报错注入:extractvalue、updatexml报错原理

MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue、updatexml

名称 描述
使用XPath表示法从XML字符串中提取值
返回替换的XML片段

通过这两个函数可以完成报错注入

一、extractvalue函数

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

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

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

1551927935215

(这里我们是为了学习报错注入,所以不需要太详细的知道该函数具体原理)

利用concat函数将想要获得的数据库内容拼接到第二个参数中,报错时作为内容输出。

1551928141656

二、updatexml函数

xml_target:: 需要操作的xml片段

xpath_expr: 需要更新的xml路径(Xpath格式)

new_xml: 更新后的内容

此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。

如果未xpath_expr找到表达式匹配 ,或者找到多个匹配项,则该函数返回原始 xml_targetXML片段。所有三个参数都应该是字符串。使用方式如下:

mysql> SELECT    ->   UpdateXML('ccc
', '/a', '
fff
') AS val1, -> UpdateXML('ccc
', '/b', '
fff
') AS val2, -> UpdateXML('ccc
', '//b', '
fff
') AS val3, -> UpdateXML('ccc
', '/a/d', '
fff
') AS val4, -> UpdateXML('
ccc
', '/a/d', '
fff
') AS val5 -> \G
***********结果**************val1: 
fff
val2: ccc
val3:
fff
val4: ccc
fff
val5:
ccc

这里和上面的extractvalue函数一样,当Xpath路径语法错误时,就会报错,报错内容含有错误的路径内容:

1551929714141

参考链接:

转载于:https://www.cnblogs.com/laoxiajiadeyun/p/10488731.html

你可能感兴趣的文章
RAC环境上搭建DG
查看>>
OS X Mountain Lion高手进阶
查看>>
初识电流环
查看>>
MySQL每天自动增加分区
查看>>
在线生成坐标值,方便布局使用
查看>>
ab测试工具的使用
查看>>
RTL基本知识:编译命令指定隐性线网类型
查看>>
java中BigDecimal在金融行业中的使用
查看>>
66.Plus One
查看>>
sqlserver 中 where 条件和 join 条件的作用比较
查看>>
Linux 连接mysql服务器
查看>>
shell脚本中大于,大于等于,小于,小于等于、不等于的表示方法
查看>>
[LeetCode] 256. Paint House_Easy tag: Dynamic Programming
查看>>
Java基础——面向对象编程一:封装
查看>>
在maven中没有的jar包如何处理?
查看>>
CSS3 3D下拉折叠菜单
查看>>
判断DOM元素是否出现再浏览器窗口中
查看>>
vue小技巧--window变量
查看>>
python--递归、二分查找算法
查看>>
mysql5.7 user表没有password字段,如何重置root密码
查看>>