DVWA Brute Force 暴力破解通关教程

漏洞简介

Brute Force,说白了就是暴力破解。拿一堆账号密码挨个试,总有一个能蒙对的。虽然听着挺 low 的,但说实话很多系统还是会被这种方式攻破,尤其是那些密码设得简单的。

这关主要用 Burp Suite 来搞,算是入门必备工具了。

Low 级别

先看源码:

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

好家伙,直接拼 SQL,连注入带爆破都能搞。

方法一:SQL 注入直接绕过

既然有注入,那还爆什么破,直接绕登录:

用户名填 admin'# 或者 admin' or '1'='1'#,密码随便填,直接进。

登录成功

方法二:Burp Suite 暴力破解

想练手 Burp Suite 的话,还是走爆破路线。

第一步:抓包

打开 DVWA 的 Brute Force 页面,随便输个账号密码,点登录。Burp 会把请求拦下来,右键选 Send to Intruder

upload successful

第二步:设置攻击点

进 Intruder -> Positions,把预设的标记都清掉,然后选中用户名和密码这两个值,点 Add § 加标记:

1
username=§admin§&password=§123456§&Login=Login

upload successful

第三步:配置字典

切到 Payloads 选项卡:

Payload set 1 填几个常见用户名:adminadministratorroottest

upload successful

Payload set 2 填密码,可以自己写几个常用的,也可以加载字典文件。

upload successful

第四步:开跑

点 Start attack,等着就行。看 Length 这一列,响应长度不一样的那个就是成功了。

upload successful

跑出来用户名 admin,密码 password

Medium 级别

Medium 级别加了个 mysql_real_escape_string() 转义特殊字符,还有个 sleep(2) 延迟:

1
2
$user = mysql_real_escape_string($user);
$pass = mysql_real_escape_string($pass);

注入是没法注入了,但爆破还是能爆,就是慢了点,每次都要等 2 秒。耐心点就行,反正又不是手工试。

High 级别

High 级别加了 CSRF Token,每次请求都要带上有效的 user_token

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

这就麻烦了,普通的 Intruder 模式没法用,因为每次都要先获取新的 Token。

绕过方法

用 Burp 的 Pitchfork 模式配合 Recursive grep

第一步:设置攻击类型

攻击类型选 Pitchfork,标记密码和 token:

1
username=admin&password=§123456§&Login=Login&user_token=§token_here§

upload successful

第二步:配置提取 Token

在 Options -> Grep - Extract 里添加规则,从响应里提取 user_token 的值。

upload successful

第三步:设置重定向

把 Follow redirections 改成 Always。

upload successful

第四步:配置 Payload

第一个 Payload 用密码字典。

第二个 Payload 类型选 Recursive grep,从上一个响应里提取 Token。

upload successful

第五步:开跑

点开始,观察结果,找到对的密码。

upload successful

Impossible 级别

Impossible 级别是真没法爆了:

1
2
3
4
5
6
$total_failed_login = $row[ 'total_failed_login' ];
$lock_time = strtotime( $row[ "last_login" ] ) + (15 * 60);

if( $total_failed_login >= 3 && strtotime( $row[ "last_login" ] ) > $lock_time ) {
// 账户被锁定
}

连续失败 3 次就锁 15 分钟,这就没法玩了。加上还有 CSRF Token、PDO 预处理、密码加密存储,这才是正确的安全姿势。

小结

暴力破解虽然听着土,但真挺有效的,尤其是那种密码设得简单还没防护的系统。做防护的话,记住几点:

  • 限制登录次数,失败几次就锁定
  • 加验证码
  • 强制强密码
  • 最好上个双因素认证