重置/忘记密码绕过
Reading time: 10 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
通过引荐者泄露密码重置令牌
- 如果密码重置令牌包含在URL中,HTTP referer头可能会泄露该令牌。这可能发生在用户请求密码重置后点击第三方网站链接时。
- 影响:通过跨站请求伪造(CSRF)攻击可能导致账户接管。
- 利用:要检查密码重置令牌是否在referer头中泄露,请求密码重置到您的电子邮件地址,并点击提供的重置链接。不要立即更改您的密码。相反,在使用Burp Suite拦截请求时,导航到第三方网站(如Facebook或Twitter)。检查请求以查看referer头是否包含密码重置令牌,因为这可能会将敏感信息暴露给第三方。
- 参考:
- HackerOne报告342693
- HackerOne报告272379
- 密码重置令牌泄露文章
密码重置中毒
- 攻击者可能在密码重置请求期间操纵Host头,将重置链接指向恶意网站。
- 影响:通过将重置令牌泄露给攻击者,可能导致账户接管。
- 缓解步骤:
- 验证Host头是否在允许的域名白名单中。
- 使用安全的服务器端方法生成绝对URL。
- 补丁:使用
$_SERVER['SERVER_NAME']
构造密码重置URL,而不是$_SERVER['HTTP_HOST']
。 - 参考:
- Acunetix关于密码重置中毒的文章
通过操纵电子邮件参数重置密码
攻击者可以通过添加额外的电子邮件参数来操纵密码重置请求,以转移重置链接。
- 使用&将攻击者电子邮件作为第二个参数添加
php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
- 使用 %20 将攻击者电子邮件作为第二个参数添加
php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
- 使用 | 将攻击者电子邮件作为第二个参数添加
php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
- 使用抄送将攻击者电子邮件作为第二个参数添加
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
- 使用bcc将攻击者电子邮件作为第二个参数添加
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
- 使用 , 将攻击者电子邮件作为第二个参数添加。
php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
- 将攻击者电子邮件作为 JSON 数组中的第二个参数添加
php
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参数更改任何用户的电子邮件和密码
- 攻击者可以在API请求中修改电子邮件和密码参数以更改账户凭据。
php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
- 缓解步骤:
- 确保严格的参数验证和身份验证检查。
- 实施强大的日志记录和监控,以检测和响应可疑活动。
- 参考:
- 通过API参数操纵进行完整账户接管
无速率限制:电子邮件轰炸
- 密码重置请求缺乏速率限制可能导致电子邮件轰炸,使用户被重置电子邮件淹没。
- 缓解步骤:
- 基于IP地址或用户账户实施速率限制。
- 使用CAPTCHA挑战以防止自动滥用。
- 参考:
- HackerOne报告280534
找出密码重置令牌的生成方式
- 理解令牌生成背后的模式或方法可能导致预测或暴力破解令牌。一些选项:
- 基于时间戳
- 基于用户ID
- 基于用户的电子邮件
- 基于名字和姓氏
- 基于出生日期
- 基于密码学
- 缓解步骤:
- 使用强大的密码学方法生成令牌。
- 确保足够的随机性和长度以防止可预测性。
- 工具:使用Burp Sequencer分析令牌的随机性。
可猜测的UUID
- 如果UUID(版本1)是可猜测或可预测的,攻击者可能会暴力破解它们以生成有效的重置令牌。检查:
- 缓解步骤:
- 对于随机性使用GUID版本4,或对其他版本实施额外的安全措施。
- 工具:使用guidtool分析和生成GUID。
响应操纵:用好响应替换坏响应
- 操纵HTTP响应以绕过错误消息或限制。
- 缓解步骤:
- 实施服务器端检查以确保响应完整性。
- 使用安全通信通道如HTTPS以防止中间人攻击。
- 参考:
- 实时漏洞赏金活动中的关键漏洞
使用过期令牌
- 测试过期令牌是否仍可用于密码重置。
- 缓解步骤:
- 实施严格的令牌过期政策,并在服务器端验证令牌过期。
暴力破解密码重置令牌
- 尝试使用Burpsuite和IP-Rotator等工具暴力破解重置令牌,以绕过基于IP的速率限制。
- 缓解步骤:
- 实施强大的速率限制和账户锁定机制。
- 监控可疑活动,以指示暴力破解攻击。
尝试使用您的令牌
- 测试攻击者的重置令牌是否可以与受害者的电子邮件一起使用。
- 缓解步骤:
- 确保令牌绑定到用户会话或其他用户特定属性。
注销/密码重置中的会话失效
- 确保用户注销或重置密码时会话失效。
- 缓解步骤:
- 实施适当的会话管理,确保所有会话在注销或密码重置时失效。
注销/密码重置中的会话失效
- 重置令牌应具有过期时间,过期后将失效。
- 缓解步骤:
- 为重置令牌设置合理的过期时间,并在服务器端严格执行。
参考
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。