DVWA 靶场之 Brute Force-Low&Medium(前期配置铺垫与渗透方法及源码分析)

首先登录 DVWA 靶场

DVWA 默认的用户有5个,用户名及密码如下:

admin/password

gordonb/abc123

1337/charley

pablo/letmein

smithy/password

难度等级设置为 low ,我们先从最简单的开始

来到 Brute Force(暴力破解)

我们可以输入用户名和密码

简单测了几个,回显用户名或密码不正确

但是并未对我们输入的内容及次数进行限制,因此直接进行爆破

暴力破解我们使用工具 burpsuite

关于 burpsuite 的安装及破解教程网上有很多,我这里就不再过多赘述

之后配置好代理转发,默认是监听本地的 8080 端口

EG 浏览器的话给大家推荐一个好用的小插件:Proxy SwitchyOmega

用来配置代理

这里还需要解决一个问题,因为我们的 DVWA 靶场搭建在本地,127.0.0.1 是一个回环地址,burpsuite 是无法抓取的,需要替换成自己的内网地址并进行一些配置。

具体参考我之前的博客

关于burpsuite无法抓到本地请求包的解决方案:

https://myon6.blog.csdn.net/article/details/135731145?spm=1001.2014.3001.5502

端口的话为了避免冲突我们重新配一个

之后我们访问靶场地址时将 127.0.0.1 替换为自己内网 ip ,我这里是 192.168.112.221

然后重新登录进入靶场,重新设置难度等级

简单测试一下,抓包成功

接下来我们正式进入暴力破解

开启 burpsuite 拦截抓包,先随便输一个用户名和密码进行登录

将包发到攻击模块(intruder)

设置爆破位置:

选择爆破模式:

配置攻击载荷(这里也就是爆破的字典)

这种字典网上也有很多,自行下载导入即可

配置好后我们直接开始攻击

我们需要筛选出长度不同的

长度不同说明回显结果不一样(一般就是成功了的)

通过暴力破解我们得到登录用户名和密码为:admin/password 这种就是弱口令

如果你想更深入去了解那么就看它文件的源码

php 复制代码
<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Get username
    $user = $_GET[ 'username' ];

    // Get password
    $pass = $_GET[ 'password' ];
    $pass = md5( $pass );

    // Check the database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

这段代码是一个简单的登录系统,但存在很多的安全问题 :

1、在 SQL 查询中,用户提供的 username 和 password 直接被拼接到查询语句中,这可能导致 SQL 注入攻击。攻击者可以在输入中插入恶意代码来绕过身份验证或者获取敏感信息。

php 复制代码
$user = $_GET['username'];
$pass = $_GET['password'];
$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";

2、使用了 md5 进行密码哈希,这是一个弱哈希算法,易于被暴力破解。

php 复制代码
$pass = md5( $pass );

3、在使用 mysqli_query() 执行查询之前没有检查数据库连接的状态,也没有正确关闭数据库连接,这可能会导致资源泄漏或者其他问题。

php 复制代码
$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);

4、当数据库查询失败时,直接将详细的错误信息暴露给用户,可能造成敏感信息泄露。

php 复制代码
die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

5、用户的密码是通过 GET 方法传输的,这意味着密码可能会出现在 URL 中。

php 复制代码
if( isset( $_GET[ 'Login' ] ) )

实际测试也确实是这样

对于 medium 等级其实和 low 方法一样(直接爆破),我们对比源码

php 复制代码
<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Sanitise password input
    $pass = $_GET[ 'password' ];
    $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $pass = md5( $pass );

    // Check the database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        sleep( 2 );
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

与 low 的区别:

php 复制代码
$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
php 复制代码
$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

该代码对用户名和密码进行了输入验证,使用了 mysqli_real_escape_string() 函数来消毒输入,转义特殊字符,一定程度上可以防御 SQL 注入攻击。

此外:

php 复制代码
sleep( 2 );
echo "<pre><br />Username and/or password incorrect.</pre>";

在登录失败的情况下,该代码添加了一个 sleep(2) 的延迟,它会增加攻击者猜测密码的时间,可以一定程度上抵御暴力破解攻击,但是攻击者任然可以直接进行爆破。

因为攻击流程和方法都一样,因此这里就不做过多演示了。

后面会继续更新 high 难度以及其他漏洞的相关介绍与渗透方法。

相关推荐
肘击鸣的百k路4 小时前
Java 代理模式详解
java·开发语言·代理模式
mingzhi618 小时前
渗透测试-快速获取目标中存在的漏洞(小白版)
安全·web安全·面试·职场和发展
安胜ANSCEN11 小时前
加固筑牢安全防线:多源威胁检测响应在企业网络安全运营中的核心作用
网络·安全·web安全·威胁检测·自动化响应
细心的莽夫12 小时前
JavaWeb学习笔记
java·开发语言·笔记·学习·java-ee·web
超栈14 小时前
蓝桥杯-网络安全比赛题目-遗漏的压缩包
前端·网络·sql·安全·web安全·职场和发展·蓝桥杯
黑龙江亿林等级保护测评14 小时前
DDOS防护介绍
网络·人工智能·安全·web安全·智能路由器·ddos
kali-Myon16 小时前
NewStarCTF2024-Week5-Web&Misc-WP
前端·python·学习·mysql·web安全·php·web
OkeyProxy16 小时前
怎麼解決IP地址衝突的問題?
代理模式·proxy模式·ip地址·代理服务器·海外ip代理
觅_18 小时前
HTML 鼠标滑动 页面的header背景从透明色变为黑色
前端·html·web