DVWA之 Brute Force通关(低中高)

Brute Force(暴力破解)

暴力破解:暴力破解(Brute Force Attack)是一种通过尝试所有可能的组合来破解密码或密钥的攻击方法。它的基本思想是系统地、逐一尝试每一种可能的组合,直到找到正确的密码或密钥为止。

LOW 

(1)随便输入账号尝试的同时进行burp抓包

在这里我们可以看到是使用get获取参数,且是明文传输,没有验证码类的验证机制,所以可以使用爆破

(2)抓到包后,右键点击Send to Intruder,将抓到的包转到Intruder

在存在爆破点的地方再添加上我们想要他存在的变量。

选择合适的攻击类型,在这里我选择的是第四个:Cluster bomb

由此,low完成

 Medium

<?php

// 检查是否有Login参数

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

    // 获取用户名,并使用mysqli_real_escape_string函数进行转义处理,防止SQL注入

    $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)) ? "" : ""));

    // 获取密码,并使用mysqli_real_escape_string函数进行转义处理,防止SQL注入

    $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)) ? "" : ""));

    // 使用md5函数对密码进行加密

    $pass = md5($pass);

    // 构建SQL查询语句

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

    // 执行查询语句,并将结果保存在result变量中

    $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) {

        // 获取用户详细信息

        $row = mysqli_fetch_assoc($result);

        // 获取用户头像

        $avatar = $row["avatar"];

        // 登录成功,输出欢迎信息和用户头像

        echo "<p>Welcome to the password protected area {$user}</p>";

        echo "<img src=\"{$avatar}\" />";

    } else {

        // 登录失败,延时2秒后输出错误信息

        sleep(2);

        echo "<pre><br />Username and/or password incorrect.</pre>";

    }

    // 关闭数据库连接

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

}

?>

关于Medium难度,它的源码中对于登录这一方面并没有做太多的改动,因此它的爆破过程与Low难度的过程基本一样,想要尝试的朋友可以参考Low难度中的爆破过程,区别是每一次登录失败后会延时2s,别的就没有什么改动了,总体过程影响不大。

  另外在这个Medium难度的源码中,它对防止注入做了很多的工作,像比如说,它使用了mysql_real_escape_string 函数,这个函数可以对字符串中的函数进行转义,一定程度上可以防止sql注入,到这个地方会不会想到在Low难度中是否可以通过注入来绕过,可以去试一下。(我在这个地方用了万能密码发现是可以的,在Username处:admin' or '1'='1,在Password处随便填点东西,像123这样的都行,这样就可以成功登陆了)

High

<?php

// 检查是否有Login参数

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

    // 检查Anti-CSRF令牌是否有效

    checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php');

    // 获取并转义用户名输入,防止SQL注入

    $user = $_GET['username'];

    $user = stripslashes($user);

    $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)) ? "" : ""));

    // 获取并转义密码输入,防止SQL注入

    $pass = $_GET['password'];

    $pass = stripslashes($pass);

    $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)) ? "" : ""));

    // 使用MD5对密码进行哈希处理

    $pass = md5($pass);

    // 构建SQL查询语句

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

    // 执行查询语句,并将结果保存在result变量中

    $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) {

        // 获取用户详细信息

        $row = mysqli_fetch_assoc($result);

        // 获取用户头像

        $avatar = $row["avatar"];

        // 登录成功,输出欢迎信息和用户头像

        echo "<p>Welcome to the password protected area {$user}</p>";

        echo "<img src=\"{$avatar}\" />";

    } else {

        // 登录失败,随机延时0到3秒后输出错误信息

        sleep(rand(0, 3));

        echo "<pre><br />Username and/or password incorrect.</pre>";

    }

    // 关闭数据库连接

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

}

// 生成Anti-CSRF令牌

generateSessionToken();

?>

继续抓包试试看

与之前不同的是high多了一个user-token 

  • 随机延时

    • 登录失败时,随机延时0到3秒再输出错误信息,防止暴力破解攻击。

  • 生成Anti-CSRF令牌

    • 使用generateSessionToken函数生成新的CSRF令牌。

在这个难度中,首先从代码中可以发现是加了token验证的。针对这种带有token验证的,我们也可以使用Burp去爆破,接下来是具体的一些步骤:

1,burp抓包

选择pitchfork

payload1

payload2

蓝色框里面的token数值是找的(方法如下)

先点击add,然后点击refetch response 接着ctrl +f  token

出来后把它选中复制同时点击OK

接着使用单线程

开始攻击

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值