从业者-暴力破解防护-IP锁定机制
# 实验室:暴力破解防护,IP阻止
# 题目
由于密码暴力破解保护中的逻辑缺陷,此实验室容易受到暴力破解攻击。要解决实验室问题,请暴力破解受害者的密码,然后登录并访问他的帐户页面。
- 你的凭据:
wiener
:peter
- 受害者的用户名:
carlos
- 密码候选列表 (opens new window)
提示
一些高级用户可能想使用 macro 或 Turbo Intruder 扩展来完成本实验。但是,即使不使用这些高级功能,也可以解决该实验室问题。
- name: 实验室-从业者
desc: 暴力破解防护-IP锁定机制 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/password-based/lab-broken-bruteforce-protection-ip-block
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 该实验室存在暴力攻击漏洞。
- 该实验室还增加了一种 “基于 IP 锁定的暴力攻击保护”,需要尝试绕过。
- 实验室提供了一个正确的用户名和密码:
wiener
:peter
。 - 实验室提供了一个正确的用户名
carlos
,我们需要针对该用户名进行密码暴力破解,然后以该用户身份进行登录。
点击 “Access the lab” 进入实验室。

点击 “My account” 进入登录页面。

先进行一次失败的登录,查看响应信息。

响应信息为 “Invalid username” 。

进行多次失败的登录,被锁定,需要等待 1 分钟。
经过测试,登录失败 3 次就会被锁定,所以每次暴破最多只能失败 2 次。

# 暴破方式一
# (1)生成列表(字典)
构造用户名列表:
- 使用
wiener
和carlos
这两个用户名来构造。 - 每隔 2 个
carlos
,就放置 1 个wiener
(每暴破两次,就登录一次)。
构造密码列表:
- 使用 “实验室提供的密码列表” 以及 “wiener 账户的密码
peter
”来构造。 - 每隔 2 个密码,就放置 1 个
peter
(与用户名列表对应)
你可以运行以下 python 代码快速生成列表:
# 生成用户名列表
for i in range(50):
print('carlos')
print('carlos')
print('wiener')
2
3
4
5

将生成的列表 保存到文件中备用。

# 生成密码列表
arr = [
...
实验室提供的密码列表
]
for i in range(0, 100, 2):
print(arr[i])
print(arr[i+1])
print('peter')
2
3
4
5
6
7
8
9
10

将生成的列表 保存到文件中备用。

# (2)开始暴破
抓取登录请求数据包,使用 BurpSuite Intruder 功能。
- 攻击类型选择第三个 “Pitchfork” 。
- 将用户名字段 和 密码字段 的值添加到选区。

设置载荷1,导入上一步生成的 用户名列表。

设置载荷2,导入上一步生成的 密码列表。
然后点击 “Start attack” 开始攻击。

Intruder 先对carlos
用户的密码暴破 2 次(失败 2 次)。
然后使用正确的用户名密码wiener
:peter
进行登录(成功 1 次)。
Intruder 会重复以上两个步骤,以此来绕过 该实验室的防护机制。
攻击结束之后,对结果进行排序,获得正确的用户名和密码:
- 用户名:
carlos
- 密码:
dragon

先别急着提交,还有第二种攻击方式↓↓↓
# 暴破方式二
上一个步骤采用的是 “生成新列表 + 一个攻击窗口” 的攻击方式,下面介绍另一种攻击方式:两个攻击窗口(无须生成新列表)。
# (1)设置攻击窗口1
生成另一个登录请求数据包,使用 BurpSuite Intruder 功能。
- 攻击类型为:Sniper(默认)。
- 将任意字符添加到选区(随便加)。
- 用户名和密码 采用正确的
wiener
:peter
(不需要添加选区) 。

设置载荷1:
- 攻击类型为:Null payloads(空载荷)
- 生成数量:500
先不用攻击。

设置攻击速率:
- 名称:fast
- 线程:3
- 请求间隔:200(毫秒)

# (2)设置攻击窗口2
- 攻击类型为:Sniper(默认)
- 用户名为
carlos
- 将密码字段的值 添加到选区

设置载荷1,导入实验室提供的 密码列表(最初的密码列表,不用做任何改变)

设置攻击速率,
- 名称:slow
- 线程:1
- 请求间隔:200(毫秒)

# (3)开始暴破
先启动 窗口1 的攻击(fast 速率的那个),该窗口会不断发送wiener
:peter
的登录请求(一直登录成功)。
在启动 窗口2 的攻击(slow 速率的那个),该窗口会不断暴破carlos
用户的密码(一直失败)。
暴破的速率 较慢,登录成功的速率 较快。
每当暴破失败的次数 接近3次时,都会因登录成功 而刷新为 0 次,这样就能成功绕过 该实验室的防护机制。
攻击结束之后,对结果进行排序,获得正确的用户名和密码:
- 用户名:
carlos
- 密码:
dragon

# 解决实验室
回到登录页面,使用上述步骤获得的用户名和密码 进行登录:
- 用户名:
carlos
- 密码:
dragon

登录成功,实验完成。
