DVWA通关-SQL注入篇
开篇之前
我知道网上也有很多通关攻略,但都是别人通关,复制粘贴也是别人的,所以就想写一下自己的。写下这篇文章主要是记录自己的学习,以及和各位朋友交流,有错误的地方,希望各位大佬指出,谢谢。
DVWA介绍
DVWA是一个非常适合新人入门安全的靶场。这个靶场涵盖了暴力破解、命令注入、CSRF、文件包含、上传文件、不安全的验证码、SQL注入、XSS注入等漏洞,有Low、Medium、High、Impossible四个等级。这一次带来的是SQL注入的通关攻略。
Level-Low
一个提交框,输入1来查询一下,可以看到 ID为1的First name和Surname。输入2看得的则是关于ID为2的信息。
输入1’ 来测试一下有没有注入漏洞,可以看到关于SQL语法的报错
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’’ at line 1
输入1' and'1'='1
能得到正常回显,输入1’ and’1’=‘2无回显,可以判断出为数字类型的SQL注入
使用联合查询来猜测数据库的字段
1' union select 1,2#
当查询语句为1’ union select 1,2,3#时报错,说明只有1,2两个字段
The used SELECT statements have a different number of columns
接下来使用所有数据库以及当前所用的数据库,可以看到下图First name为当前所用的数据库。Surname显示的是所有的数据库(关于information_schema,文章结尾有参考和学习链接)
-1' union select database(),schema_name from information_schema.schemata#
查看当前数据库的表名,可以看到有一个users表,猜测是存放user数据的地方
-1'union select 1,table_name from information_schema.tables#
接着查看users的字段名
-1' union select 1,column_name from information_schema.columns where table_name = 'users'#
看到有user和password的字样,直接查看这两个列,得出账号密码
-1' union select user,password from users#
账号密码为MD5加密,直接使用MD5在线解密即可
Level-Medium
将DVWA的安全等级调到Medium,可以看到只有下拉的选择框,没有让我们输入语句的地方,这时候就需要使用burpsuit抓包来查看Submit后的信息
选择1,提交。通过burpsuit抓包可以看到id=1的字。
作为一个入门的靶场,看到id=1想到了什么?让我们看看Low级别提交后抓包的信息。Low级别的包头中,id是通过GET方法来提交数据的对比,而Medium是通过POST来提交数据的。查看源代码,除了提交方法不一样,查询的方法都是一样的,也就是说,Low级别的查询语句在Medium同样适用。但是要注意,Medium级别的源代码中有个语句
$id = mysql_real_escape_string($id);
查询mysql_real_escape_string()的用法
过滤了‘
号,所以不需要'
号即可查询
-1 union select user,password from users#
Level-High
将DVWA的安全级别调整到High,可以看到弹出一个小窗口,试着输入1,发现在原界面有回显
分析一下源代码,只是对自动化注入做了防御,但是参数没有做防御,多了个LIMIT 1
,是希望只显示一个结果
使用Level-Low的SQL语句来注入,即可得到账号密码
Level-Impossible
Impossible的代码对SQL语句进行了预编译,有效的防止了SQL注入。
information_schema参考
https://www.cnblogs.com/lcbwwy/p/12670465.html