DVWA Brute Force漏洞深度分析与利用指南
DVWA简介
DVWA(Damn Vulnerable Web Application)是一个基于PHP/MySQL的脆弱性Web应用平台,专为安全专业人员设计,用于测试技能和工具。它包含十大安全模块,其中Brute Force(暴力破解)是最基础也是最常见的攻击方式之一。
DVWA 1.9版本提供四种安全级别:Low、Medium、High和Impossible,通过比较不同级别的代码差异,安全人员可以深入理解Web安全防护的演进过程。
Brute Force攻击概述
暴力破解是指攻击者通过系统化的密码尝试获取合法用户凭证的方法。这种攻击方式在2014年12306"撞库"事件中造成了广泛影响。
各安全级别分析与利用
Low级别
服务器端代码分析:
<?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$html .= "<p>Welcome to the password protected area {$user}</p>";$html .= "<img src=\"{$avatar}\" />";}else {// Login failed$html .= "<pre><br />Username and/or password incorrect.</pre>";}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
漏洞特征:
-
无任何防爆破机制
-
未对输入参数进行过滤,存在SQL注入漏洞
-
使用GET方法传输敏感数据
漏洞利用方法:
-
Burp Suite爆破:
-
拦截登录请求
-
发送至Intruder模块
-
设置密码字段为攻击点
-
载入字典开始攻击
-
通过响应长度差异识别正确密码
-
2.SQL注入绕过:
-
用户名:
admin'or'1'='1
-
密码:任意
-
或使用:
admin'#
Medium级别
代码改进:
$user = mysqli_real_escape_string($_GET['username']);
$pass = md5(mysqli_real_escape_string($_GET['password']));
安全增强:
-
使用
mysqli_real_escape_string
过滤特殊字符 -
密码进行MD5哈希处理
-
添加了2秒延迟响应
漏洞利用:
-
SQL注入基本被防御
-
仍可使用Burp Suite爆破,方法与Low级别类似
-
因仅有2秒固定延迟,爆破依然可行
High级别
安全增强:
checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php');
// ...
sleep(rand(0,3));
防护机制:
-
引入Anti-CSRF token
-
随机延迟(0-3秒)
-
双重输入过滤(stripslashes+mysql_real_escape_string)
漏洞利用挑战:
-
传统爆破工具失效
-
需要处理动态token
Impossible级别
终极防护措施:
$total_failed_login = 3;
$lockout_time = 15;
$account_locked = false;
// 检查失败登录次数
if(($data->rowCount() == 1) && ($row['failed_login'] >= $total_failed_login)){$timeout = strtotime("{$last_login}+{$lockout_time} minutes");if(time() <= $timeout) $account_locked = true;
}
// 使用PDO预处理语句
$data = $db->prepare('SELECT * FROM users WHERE user=:user AND password=:password LIMIT 1;');
$data->bindParam(':user', $user, PDO::PARAM_STR);
安全机制:
-
账户锁定策略(3次失败尝试后锁定15分钟)
-
PDO预处理语句彻底防御SQL注入
-
完善的登录失败处理流程
-
随机延迟响应
防护建议
-
实施账户锁定机制
-
使用CAPTCHA验证码
-
强制使用强密码策略
-
采用多因素认证
-
使用预处理语句防御SQL注入
-
记录并监控登录尝试
-
设置合理的延迟响应
总结
DVWA的Brute Force模块展示了从完全无防护到企业级防护的完整演进路径。安全人员通过分析各级别代码差异,可以深入理解Web认证安全的核心要点。在实际环境中,建议至少采用High级别的防护措施,对于关键系统应实现Impossible级别的全方位保护。