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級別的全方位保護。