hacktricks/pentesting-web/reset-password.md

212 lines
13 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>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](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/hacktricks\_live)**をフォロー**してください。
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、**あなたのハッキングテクニックを共有**してください。
</details>
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう!
**ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツと関わる
**リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける
**最新のアナウンス**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて知る
**[Discord](https://discord.com/invite/N3FrSbmwdy)**に参加して、今日からトップハッカーと協力を始めましょう!
## **リファラー経由のパスワードリセットトークン漏洩**
* HTTPリファラーヘッダーにパスワードリセットトークンが含まれている場合、URLに漏洩する可能性があります。これは、ユーザーがパスワードリセットをリクエストした後にサードパーティのウェブサイトリンクをクリックした場合に発生する可能性があります。
* **影響**: クロスサイトリクエストフォージェリCSRF攻撃による潜在的なアカウント乗っ取り。
* **悪用**: パスワードリセットトークンがリファラーヘッダーに漏洩しているかどうかを確認するには、**メールアドレスにパスワードリセットをリクエスト**し、提供された**リセットリンクをクリック**します。**すぐにパスワードを変更しないでください**。代わりに、**Burp Suiteを使用してリクエストを傍受**しながら、FacebookやTwitterなどの**サードパーティのウェブサイトに移動**します。リクエストを検査して、**リファラーヘッダーにパスワードリセットトークンが含まれている**かどうかを確認してください。これにより、機密情報が第三者に公開される可能性があります。
* **参考**:
* [HackerOne Report 342693](https://hackerone.com/reports/342693)
* [HackerOne Report 272379](https://hackerone.com/reports/272379)
* [パスワードリセットトークン漏洩記事](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
## **パスワードリセットポイズニング**
* 攻撃者は、パスワードリセットリクエスト中にHostヘッダーを操作して、リセットリンクを悪意のあるサイトに向けることができます。
* **影響**: リセットトークンが攻撃者に漏洩することで、潜在的なアカウント乗っ取りにつながります。
* **緩和手順**:
* ホワイトリストに許可されたドメインのHostヘッダーを検証します。
* 安全でサーバーサイドの方法を使用して絶対URLを生成します。
* **パッチ**: `$_SERVER['HTTP_HOST']`の代わりに`$_SERVER['SERVER_NAME']`を使用してパスワードリセットURLを構築します。
* **参考**:
* [Acunetixによるパスワードリセットポイズニングの記事](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Emailパラメータを操作してのパスワードリセット**
攻撃者は、リセットリンクを転送するために追加のメールパラメータを追加することで、パスワードリセットリクエストを操作できます。
* 攻撃者のメールを2番目のパラメータとして追加します。
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* 攻撃者のメールアドレスを2番目のパラメータとして追加する場合は、%20を使用します。
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* 攻撃者のメールアドレスを2番目のパラメーターとして追加します|を使用)
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
* 攻撃者のメールアドレスを2番目のパラメータとして、cc を使用します
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
* 攻撃者のメールアドレスを2番目のパラメータとして、BCC として追加します
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
* 攻撃者のメールアドレスを2番目のパラメーターとして追加します。
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
* 攻撃者のメールアドレスをjson配列の第2パラメータとして追加します
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
* **緩和手順**:
* サーバーサイドでメールパラメータを適切に解析および検証します。
* インジェクション攻撃を防ぐためにプリペアドステートメントまたはパラメータ化されたクエリを使用します。
* **参考**:
* [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](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://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](https://twitter.com/HusseiN98D/status/1254888748216655872)
## **APIパラメータを介した任意のユーザーのメールアドレスとパスワードの変更**
* 攻撃者はAPIリクエスト内のメールアドレスおよびパスワードパラメータを変更してアカウント資格情報を変更することができます。
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
* **対策手順**:
* 厳格なパラメータ検証と認証チェックを確保する。
* 不審なアクティビティを検知し対応するために堅牢なロギングとモニタリングを実装する。
* **参考**:
* [APIパラメータの操作を通じたフルアカウント乗っ取り](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **レート制限なし: メールボミング**
* パスワードリセットリクエストのレート制限がないと、メールボミングが発生し、ユーザーがリセットメールで圧倒される可能性がある。
* **対策手順**:
* IPアドレスまたはユーザーアカウントに基づいたレート制限を実装する。
* 自動悪用を防ぐためにCAPTCHAチャレンジを使用する。
* **参考**:
* [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **パスワードリセットトークンの生成方法を特定する**
* トークン生成のパターンや方法を理解することで、トークンの予測やブルートフォース攻撃が可能になる。いくつかのオプション:
* タイムスタンプに基づく
* ユーザーIDに基づく
* ユーザーのメールに基づく
* ユーザーの名前と姓に基づく
* 生年月日に基づく
* 暗号技術に基づく
* **対策手順**:
* トークン生成に強力で暗号化された方法を使用する。
* 予測不可能性を確保するために十分なランダム性と長さを確保する。
* **ツール**: トークンのランダム性を分析するためにBurp Sequencerを使用する。
## **推測可能なUUID**
* UUIDバージョン1が推測可能または予測可能な場合、攻撃者は有効なリセットトークンを生成するためにそれらをブルートフォース攻撃する可能性がある。確認すること:
{% content-ref url="uuid-insecurities.md" %}
[uuid-insecurities.md](uuid-insecurities.md)
{% endcontent-ref %}
* **対策手順**:
* ランダム性のためにGUIDバージョン4を使用するか、他のバージョンに対して追加のセキュリティ対策を実装する。
* **ツール**: [guidtool](https://github.com/intruder-io/guidtool)を使用してGUIDの分析と生成を行う。
## **レスポンス操作: 悪いレスポンスを良いものに置き換える**
* HTTPレスポンスを操作してエラーメッセージや制限をバイパスする。
* **対策手順**:
* レスポンスの整合性を確保するためにサーバーサイドのチェックを実装する。
* 中間者攻撃を防ぐためにHTTPSのような安全な通信チャネルを使用する。
* **参考**:
* [ライブバグバウンティイベントでの致命的なバグ](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **期限切れトークンの使用**
* 期限切れのトークンがまだパスワードリセットに使用できるかどうかをテストする。
* **対策手順**:
* 厳格なトークン有効期限ポリシーを実装し、サーバーサイドでトークンの有効期限を検証する。
## **ブルートフォースパスワードリセットトークン**
* BurpsuiteやIP-Rotatorなどのツールを使用してリセットトークンをブルートフォース攻撃する試み。IPベースのレート制限をバイパスする。
* **対策手順**:
* 堅牢なレート制限とアカウントロックアウトメカニズムを実装する。
* ブルートフォース攻撃を示す疑わしいアクティビティを監視する。
## **トークンを使用してみる**
* 攻撃者のリセットトークンが被害者のメールと一緒に使用できるかどうかをテストする。
* **対策手順**:
* トークンがユーザーセッションや他のユーザー固有の属性にバインドされていることを確保する。
## **ログアウト/パスワードリセット時のセッション無効化**
* ユーザーがログアウトしたりパスワードをリセットしたときにセッションが無効化されていることを確保する。
* **対策手順**:
* ログアウトまたはパスワードリセット時にすべてのセッションが無効化されるように適切なセッション管理を実装する。
## **ログアウト/パスワードリセット時のセッション無効化**
* リセットトークンは、無効になる期限時間を持つべきである。
* **対策手順**:
* リセットトークンのために合理的な有効期限を設定し、サーバーサイドで厳密に強制する。
## 参考文献
* [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
**ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く関わるコンテンツに参加しましょう
**リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じてハッキングの世界を最新の状態に保ちましょう
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を入手しましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力を始めましょう!