从业者-密码重置-中间件投毒
# 实验室:通过中间件实现密码重置投毒
# 题目
此实验室容易受到密码重置投毒的攻击。用户carlos
会不小心点击他收到的电子邮件中的任何链接。要解决实验室问题,请登录 carlos 的帐户。你可以使用以下凭据登录到自己的帐户:wiener:peter
。发送到此帐户的任何电子邮件,都可以通过漏洞利用服务器上的电子邮件客户端读取。
- name: 实验室-从业者
desc: 通过中间件实现密码重置投毒 >>
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/other-mechanisms/lab-password-reset-poisoning-via-middleware
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 该实验室存在 “密码重置功能” ,但该功能容易受到 密码重置投毒 的影响。
- 利用 投毒攻击 来重置 carlos 用户的密码,然后登录并访问其账户页面。
点击 “Access the lab” 进入实验室。

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

# 密码重置功能测试
先进行一次正常的登录操作。

登录成功,没问题,点击 “Log out” 登出。

回到登录页面,点击 “Forgot password?” 进入忘记密码页面。

启用浏览器代理,然后输入 需要重置密码的用户名,点击 “Submit” 提交。

此时,目标应用程序会向wiener
用户的邮箱发送重置链接。
点击上方的 “Go to exploit server” 进入实验室提供的漏洞利用服务器。

点击下方的 “Email client” 进入邮箱客户端。

在wiener
用户的邮箱中,可以看到一封电子邮件,其中包含密码重置链接。

访问密码重置链接,可以修改 wiener 用户的密码:

分析数据包。
第 1 个数据包,在忘记密码页面 输入用户名,然后提交表单,应用程序会向 wiener 用户的邮箱中发送密码重置链接。

第 2 个数据包,在电子邮件中 点击链接,进入密码重置页面。

第 3 个数据包,在密码重置页面 输入新密码,然后提交表单,成功修改密码。

思考时间:以上三个数据包,哪个数据包最有可能存在问题?
# 失败的尝试
我试图更改 Host 标头,将其更改为漏洞利用服务器的主机名,来影响密码重置链接的主机名。

更改 Host 标头之后,变更了数据的流向,所有数据都被发送到漏洞服务器的主机名下。
这导致原来的 API 无法被调用到,也就代表不会发送电子邮件。
响应提示信息:未找到资源。

一通乱试,发现密码重置链接的 Host 还是原来的主机名。

# 成功投毒
我查阅相关资料,发现了另一个 HTTP 标头:X-Forwarded-Host
。

再次进行尝试。
原来的 Host 标头保持不变,在下方添加一个新的 X-Forwarded-Host 标头。
- Host:原来的主机名。
- X-Forwarded-Host:漏洞利用服务器的主机名。

发送数据包之后,查看邮箱客户端,收到一个新的密码重置链接。
该链接的主机名有所不同,它的主机名被成功投毒了。

修改刚刚的数据包,将 username 字段的值修改为carlos
,然后发送。

回到漏洞利用服务器,点击 “Access log” 查看访问日志。

在日志中,可以看到一个源地址为10.0.3.88
的记录,其中包含了一段 token 值。
实验室会模拟 carlos 用户去访问密码重置链接,但链接的主机名已经被污染,所以该请求会被发送到我们的服务器上,从而获得 carlos 用户的 token 值。

复制密码重置页面的 URL 链接。

在浏览器打开一个新的窗口,将 URL 中的 token 替换为 carlos 用户的 token ,然后访问该链接。

成功使用 carlos 用户的 token,访问了他的密码重置页面。
修改 carlos 用户的密码,例如 carlos123 。

修改成功之后,回到登录页面,使用用户名和密码进行登录carlos:carlos123
。

登录成功,实验完成。
