dvwa靶场暴力破解通关学习

这里使用的工具是burp抓包工具

LOW

一、直接抓包发送到intruder模块进行操作

在这里插入图片描述

  1. 发现请i去方式是GET形式,数据有usernamepassword
  2. 那将usernamepassword添加变量,使用cluster bomb模式攻击即可,右侧添加爆破的值

在这里插入图片描述

在这里插入图片描述

  • 发送攻击后通过长度判断出用户名和密码

  • 这里我自己尝试探测是否存在sql注入,使用sqlmap工具可测试username字段(注意:携带cookie

二、代码审计

在这里插入图片描述

  1. 后端对与用户输入的内容未作任何过滤,直接向数据库中查询数据
  2. 这里可以得出存在字符型sql注入漏洞
总结:后端未作任何处理,存在暴力破解登录和sql注入漏洞的问题

Medium

一、抓包查看无任何变化
  • 直接将usernamepassword字段添加变量,设置攻击类型为cluster bomb模式

在这里插入图片描述

在这里插入图片描述

  • 成功得到用户名和密码(这里破解时感觉比较慢,推测后端对登录失败有延迟响应处理)
二、代码审计

在这里插入图片描述

  1. 使用了mysqli_real_escape_string()函数对用户输入的内容做了转义,但这是暴力破解密码,不起任何作用
  2. 将密码进行md5加密,防止了传输中密码泄露,但是md5加密存在漏洞
  3. 这里当用户登录失败后会有延迟响应,这就是在破解时感觉比较慢的原因
总结:后端进行了转义,但这种只对sql注入有影响,对暴力破解无任何影响,对密码和登录失败做了处理

High

一、抓包查看情况

在这里插入图片描述

  1. 这里可以看到存在user_token值(即token),其他都没有变化
  2. 这里可以考虑token值有哪些属性(一次性,随机性)
  3. 那这里就爆破密码,在passworduser_token字段添加变量,cluster bomb模式

在这里插入图片描述

二、payload设置
  1. password设置不变
  2. 重点是token值的选择,想到token在服务器发送的响应文件中,那就通过正则表达是提取添加

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 在设置中找到检索-提取选项,点击添加通过burp中自带的查找模块查找

  2. 在弹出框中输入token后选中vlue后的值(复制后续使用),就能找获取正则表达式了

  3. 在将重定向跳转改为总是

  4. 将payload类型选为递归提取,添加初始值,请求次数设置为1后就可以攻击了

    在这里插入图片描述

三、代码审计

在这里插入图片描述

  1. 重点是做了对token的校验,判断是否合法
  2. 使用了mysqli_real_escape_string()函数对用户输入的内容做了转义,但这是暴力破解密码,不起任何作用
  3. 使用sleep()函数对登录失败进行了随机延迟响应
总结:添加了token值,增加了暴力破解的难度,但还是存在漏洞

Impossible

代码审计
// 这一关的代码比较多,这里列举重点的部分
1. token的校验
if( isset( $_POST[ 'Login' ] ) && isset ($_POST['username']) && isset ($_POST['password']) ) {
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
 2.账号锁定
     // Default values
$total_failed_login = 3;  // 最大失败登录次数:3次
$lockout_time       = 15; // 锁定时间:15分钟
$account_locked     = false; // 账号锁定标记

// 查数据库:获取用户失败登录次数、最后登录时间
$data = $db->prepare( 'SELECT failed_login, last_login FROM users WHERE user = (:user) LIMIT 1;' );
$data->bindParam( ':user', $user, PDO::PARAM_STR );
$data->execute();
$row = $data->fetch();

// 检查账号是否因多次失败被锁定
if( ( $data->rowCount() == 1 ) && ( $row[ 'failed_login' ] >= $total_failed_login ) )  {
    $last_login = strtotime( $row[ 'last_login' ] ); // 最后失败登录时间(时间戳)
    $timeout    = $last_login + ($lockout_time * 60); // 解锁时间 = 最后失败时间 + 15分钟
    $timenow    = time(); // 当前时间戳

    // 未到解锁时间 → 标记账号锁定
    if( $timenow < $timeout ) {
        $account_locked = true;
    }
}
  • PDO预编译
 // 验证账号密码(PDO 预编译)
$data = $db->prepare( 'SELECT * FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );
$data->bindParam( ':user', $user, PDO::PARAM_STR);
$data->bindParam( ':password', $pass, PDO::PARAM_STR );
$data->execute();
$row = $data->fetch();
  1. 这一关使用了token的防护+PDO防注入+账号锁定+随机延迟+模糊的提示
  2. 通关token增加了暴力破解的难度
  3. PDO预编译进一步杜绝了的sql注入的漏洞问题
  4. 账号锁定彻底阻断暴力破解问题
  5. 模糊的提示防止了账号的枚举问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值