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

首先登录 DVWA 靶场

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

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


admin/password

gordonb/abc123

1337/charley

pablo/letmein

smithy/password

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

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

来到 Brute Force(暴力破解)

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

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

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

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

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

暴力破解我们使用工具 burpsuite

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

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

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

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

用来配置代理

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

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

具体参考我之前的博客

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

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

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

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

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

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

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

简单测试一下,抓包成功

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

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

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

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

将包发到攻击模块(intruder)

设置爆破位置:

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

选择爆破模式:

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

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

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

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

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

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

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

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

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

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

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

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

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

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "

Welcome to the password protected area {$user}

"; echo ""; } else { // Login failed echo "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>

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

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

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

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

$pass = md5( $pass );

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

$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);

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

die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );

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

if( isset( $_GET[ 'Login' ] ) )

实际测试也确实是这样

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

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

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

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "

Welcome to the password protected area {$user}

"; echo ""; } else { // Login failed sleep( 2 ); echo "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>

 与 low 的区别:

$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)) ? "" : ""));
$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 注入攻击。

此外:

sleep( 2 );
echo "

Username and/or password incorrect.
";

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

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

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

你可能感兴趣的:(DVWA靶场,web,暴力破解,burpsuite,web,代理模式,web安全)