SQL注入(4):union注入
在我们上一笔记中,我们作出了一次最基础的UNION注入,我们需要用UNION注入来获取一些更有用的信息。
information_schema
在mysql中,存在系统自带的一个数据库,包含了所有mysql数据库的简要信息——information_schema
。
其中包括了两个表——table
表名集合表和columns
列名集合表
它们都存在一个TABLE_SCHEMA
,来表明他们归属于那个数据库。因此我们在筛选的时候,就可以通过这个方式来筛选出我们注入那个表的。
获取表名与列名
通过这个方法,我们可以构造出一个注入语句
由于表名有很多个,我们只能显示出第一个,这时候就用到了group_concat()
。
这个函数的作用就是将所有查询结果在一行中显示出来,通过这个函数我们可以新构造一个注入语句
可以得知我们需要的表名为users。
同样的方法,我们可以构造出查询列名,只不过我们需要额外添加一个where条件table_name=users
以查询我们需要的表的所有列
至此,我们就拿到了表名和列名
查询最终目标
获取到表明与列名后,我们就可以通过这两个信息拿到我们需要的所有的用户信息了
使用~
对用户名和密码进行分割。
总结过程:
- 尝试闭合方式:
'"
- 使用group by二分法判断union语句中前一个查询的列数,使union语句对其上一个查询
- 将id改为一个不存在的数字
- 查询靶机数据库名
database()
- 查询数据库表名
information_schema
tables
- 查询表内列名
columns
- 拿到所有用户名和密码
数字型union注入
数字型联合注入的方式与字符型类似,仅少了一个尝试闭合方式
。
-
使用group by判断union语句中前一个查询的列数
-
将id改为一个不存在的数字
-
查询靶机数据库名
-
查询数据库表名
-
查询表内列名
-
拿到所有用户名和密码