一)GET基于报错的SQL注入
1)SQL注入的分类
2)get基于报错的SQL注入发现
less1(get型单引号字符型报错)
less2(get型单引号数字型报错)
less3(get型单引号+括号闭合字符型报错)
less4(get型双引号字符型报错)
3)get基于报错的SQL注入利用
less1
less2
less3
less4
4)利用sqlmap测试
——————————————————————————————————————————————————
一)GET基于报错的SQL注入
1)SQL注入的分类
根据注入位置数据类型可以将SQL注入分为两类:
a)数字型:select * from 表名 where id=id值;
b)字符型:select * from 表名 where id='id值';
2)get基于报错的SQL注入发现
通过在url中修改对应的id值(例如:正常的数字、大数字、字符【单引号、双引号、括号】、反斜杠)来探测url中是否存在注入点。
注:url编码——将url中出现的特殊字符或者汉字变换为浏览器可以识别的内容。
url编码:
%27————'
%20————空格
%22————"
hex码:
0x3a————:
0x7E————~
sqli-labs靶场(less1-4的get型基于报错的SQL注入):
a)环境:
win7(有phpstudy):192.168.1.106
kali(在kali浏览器中访问win7中的靶场):192.168.1.
b)less1(get型单引号字符型报错)
I)根据less1的提示(请输入id作为有数值的参数):
构造url:
测试id的有效数值:
id=1(正常返回用户1的账号密码)
id=2(正常返回用户2的账号密码)
id=3(正常返回用户3的账号密码)
...
id=15(正常返回,但是此时已经没有用户了)
注:之所以不用 192.168.1.106/sqli/index.php?id=1 而是
直接192.168.1.106/sqli/?id=1 是因为我们已经将index.php设置为默认的首页了,
只要有设置默认页面即使没有将它加在url也可以,如果没有设置默认页面那么就一定要
将index.php等页面加在url中。
结论:id的最大值(用户数量)为14。
构造url:
判断参数id是否存在SQL注入:
id=1(正常)
id=1'(报错)
解析:
id=1’ 报错信息为:near ''1'' limit 0,1' at line 1
【错误在’1’’ limit 0,1 附近】
I)先去掉报错信息自动为字符串加上的’ ‘就剩下 near '1'' limit 0,1 at line 1
II)我们构造url时输入的id值是 1'
,去掉1’ 就剩下 near '' limit 0,1 at line 1
III)猜测正确的SQL语句为:select login_name,password from admin where id='1' limit 0,1;
(可见是单引号字符型)而我们构造后就变成:select login_name,password from admin where id='1'' limit 0,1;
多了一个单引号所以报错位置就是在 '14'' limit 0,1
这里。
c)less2(get型单引号数字型报错)
构造url:
判断参数id是否存在SQL注入:
id=1
id=1'
解析