hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md
2023-07-07 23:42:27 +00:00

21 KiB
Raw Blame History

特別なHTTPヘッダー

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

ワードリストとツール

位置を変更するヘッダー

IPソースを書き換える:

  • X-Originating-IP: 127.0.0.1
  • X-Forwarded-For: 127.0.0.1
  • X-Forwarded: 127.0.0.1
  • Forwarded-For: 127.0.0.1
  • X-Forwarded-Host: 127.0.0.1
  • X-Remote-IP: 127.0.0.1
  • X-Remote-Addr: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • X-Original-URL: 127.0.0.1
  • Client-IP: 127.0.0.1
  • X-Client-IP: 127.0.0.1
  • X-Host: 127.0.0.1
  • True-Client-IP: 127.0.0.1
  • Cluster-Client-IP: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • Via: 1.0 fred, 1.1 127.0.0.1
  • Connection: close, X-Forwarded-For(ホップバイホップヘッダーをチェック)

位置を書き換える:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

ホップバイホップヘッダー

ホップバイホップヘッダーは、リクエストを処理しているプロキシによって処理され、消費されるヘッダーであり、エンドツーエンドのヘッダーとは異なります。

  • Connection: close, X-Forwarded-For

{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}

HTTPリクエストスマグリング

  • Content-Length: 30
  • Transfer-Encoding: chunked

{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}

キャッシュヘッダー

サーバーキャッシュヘッダー

  • レスポンスの**X-Cacheには、リクエストがキャッシュされていない場合はmissという値があり、キャッシュされている場合はhit**という値があります。
  • **Cache-Control**は、リソースがキャッシュされているかどうか、次にリソースが再度キャッシュされる時間を示します:Cache-Control: public, max-age=1800
  • Varyは、通常はキーにならないヘッダーをキャッシュキーの一部として扱うために、レスポンスでよく使用されます。
  • **Age**は、オブジェクトがプロキシキャッシュに存在している時間(秒単位)を定義します。
  • **Server-Timing: cdn-cache; desc=HIT**は、リソースがキャッシュされていることも示しています。

{% content-ref url="../../pentesting-web/cache-deception.md" %} cache-deception.md {% endcontent-ref %}

ローカルキャッシュヘッダー

  • Clear-Site-Data: 削除するキャッシュを示すヘッダー:Clear-Site-Data: "cache", "cookies"
  • Expires: レスポンスの有効期限の日付/時刻を含む:Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • Pragma: no-cacheCache-Control: no-cacheと同じです。
  • Warning: **Warning**一般的なHTTPヘッダーには、メッセージのステータスに関する問題の可能性についての情報が含まれています。複数のWarningヘッダーがレスポンスに表示される場合があります。Warning: 110 anderson/1.3.37 "Response is stale"

条件文

  • If-Modified-SinceIf-Unmodified-Since ヘッダを使用したリクエストは、レスポンスヘッダの Last-Modified が異なる時間を含んでいる場合にのみデータが返されます。
  • If-MatchIf-None-Match を使用した条件付きリクエストは、Etag 値を使用して、データEtagが変更された場合にのみウェブサーバからレスポンスの内容を送信します。Etag は HTTP レスポンスから取得されます。
  • Etag の値は通常、レスポンスの内容に基づいて計算されます。例えば、ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" は、Etag37 バイトSha1 であることを示しています。

レンジリクエスト

  • Accept-Ranges: サーバがレンジリクエストをサポートしているかどうか、およびどの単位でレンジを表現できるかを示します。Accept-Ranges: <range-unit>
  • Range: サーバが返すべきドキュメントの一部を示します。
  • If-Range: 指定された Etag または日付がリモートリソースと一致する場合にのみ満たされる条件付きレンジリクエストを作成します。リソースの非互換なバージョンから 2 つの範囲をダウンロードするのを防ぐために使用されます。
  • Content-Range: フルボディメッセージ内の部分メッセージが属する位置を示します。

メッセージボディの情報

  • Content-Length: リソースのサイズ(バイト単位の 10 進数)。
  • Content-Type: リソースのメディアタイプを示します。
  • Content-Encoding: 圧縮アルゴリズムを指定するために使用されます。
  • Content-Language: 視聴者向けに意図された人間の言語を記述し、ユーザが自分の好みの言語に応じて区別できるようにします。
  • Content-Location: 返されるデータの代替位置を示します。

ペントストの観点からは、この情報は通常「役に立たない」ですが、リソースが 401 または 403 で保護されており、この情報を取得する方法がある場合、これは「興味深い」かもしれません。
たとえば、HEAD リクエストで RangeEtag の組み合わせを使用すると、HEAD リクエストを介してページのコンテンツが漏洩することがあります。

  • ヘッダ Range: bytes=20-20 を含むリクエストと、ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" を含むレスポンスは、バイト 20 の SHA1 が ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y であることを漏洩しています。

サーバ情報

  • Server: Apache/2.4.1 (Unix)
  • X-Powered-By: PHP/5.3.3

制御

  • Allow: リソースでサポートされているメソッドのセットをリストします。Allow: GET, POST, HEAD
  • Expect: Expect HTTP リクエストヘッダは、リクエストを適切に処理するためにサーバが満たす必要がある期待を示します。
  • 現在、Expect: 100-continue 以外の期待は指定されていません。このリクエストで(おそらく大きな)メッセージボディを送信する予定であり、100(継続)の中間レスポンスを受け取りたいことを受信者に通知します。

ダウンロード

  • Content-Disposition: 通常の HTTP レスポンスでは、Content-Disposition レスポンスヘッダは、コンテンツがブラウザでインライン表示されるかWeb ページまたは Web ページの一部として)または添付ファイルとして(ダウンロードしてローカルに保存される)かを示すヘッダです。
  • Content-Disposition: attachment; filename="filename.jpg"

セキュリティヘッダ

コンテンツセキュリティポリシーCSP

{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}

信頼されたタイプ

信頼されたタイプは、DOM XSS からのアプリケーションの自由な記述、セキュリティレビュー、およびメンテナンスを提供するツールです。これらはCSPを介して有効にすることができ、危険な Web API を特別なオブジェクト信頼されたタイプのみ受け入れるように制限することで、JavaScript コードをデフォルトで安全にします。

これらのオブジェクトを作成するには、セキュリティポリシーを定義することができます。セキュリティポリシーでは、データが DOM に書き込まれる前にセキュリティルールエスケープやサニタイズなどが一貫して適用されることを保証できます。これらのポリシーは、コード内で唯一の場所であり、DOM XSS を導入する可能性がある場所です。

Content-Security-Policy: require-trusted-types-for 'script'
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
}
});
}
// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.

// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // '&lt;img src=x onerror=alert(1)&gt;'

X-Content-Type-Options

悪意のあるHTMLドキュメントがあなたのドメインから提供される場合たとえば、写真サービスにアップロードされた画像に有効なHTMLマークアップが含まれている場合、一部のブラウザはそれをアクティブなドキュメントとして扱い、アプリケーションのコンテキストでスクリプトを実行することを許可します。これにより、クロスサイトスクリプティングのバグが発生します。

X-Content-Type-Options: nosniffは、特定のレスポンスのContent-Typeヘッダに設定されたMIMEタイプが正しいことをブラウザに指示することで、これを防ぎます。このヘッダは、すべてのリソースに対して推奨されています。

X-Content-Type-Options: nosniff

X-Frame-Options

悪意のあるウェブサイトがあなたのサイトをiframeとして埋め込むことができる場合、これによって攻撃者はクリックジャッキングによってユーザーに意図しないアクションを実行させることができます。また、一部の場合ではスペクター型攻撃によって、悪意のあるウェブサイトが埋め込まれたドキュメントの内容を知ることができる可能性があります。

X-Frame-Optionsは、ブラウザが<frame><iframe><embed>、または<object>でページをレンダリングするかどうかを許可するかどうかを示します。すべてのドキュメントは、他のドキュメントに埋め込まれることを許可するかどうかを示すために、このヘッダーを送信することが推奨されています。

特定のオリジンのみがドキュメントを埋め込むことを許可するなど、より詳細な制御が必要な場合は、CSPframe-ancestorsディレクティブを使用してください。

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP)

攻撃者は、ウェブベースのクロスサイトリークを悪用して、別のオリジンからリソースを埋め込むことで、それらに関する情報を取得することができます。

Cross-Origin-Resource-Policyは、ロードされることが許可されるウェブサイトのセットを示すことで、このリスクを軽減します。このヘッダーは、same-originsame-sitecross-originのいずれかの値を取ります。すべてのリソースは、他のウェブサイトからのロードを許可するかどうかを示すために、このヘッダーを送信することが推奨されています。

Cross-Origin-Resource-Policy: same-origin

Cross-Origin Resource Policy (CORB)

これは、サイドチャネル攻撃Spectreを含むの脅威を軽減するのに役立ちます。既存のウェブ機能には必要ないが、機密情報を含む可能性がある特定のクロスオリジンネットワークレスポンスをウェブページに配信しないように、ブラウザが設計されています。同様に、Cross-Site Script InclusionXSSIの脆弱性も軽減するのに役立ちます。例えば、<script>や<img>タグから要求されたクロスオリジンのtext/htmlレスポンスをブロックし、代わりに空のレスポンスを返します。これは、Site Isolationに含まれる保護の重要な部分です。

Cross-Origin Opener Policy (COOP)

攻撃者のウェブサイトは、ポップアップウィンドウを開いて別のサイトに関する情報を取得することができます。これは、ウェブベースのクロスサイトリークを悪用することによって可能になります。一部の場合では、これによりSpectreに基づくサイドチャネル攻撃も行われる可能性があります。

Cross-Origin-Opener-Policyヘッダーは、window.open()target="_blank"を使用して開かれたクロスオリジンウィンドウからドキュメント自体を分離する方法を提供します。その結果、ドキュメントのクロスオリジンオープナーは参照を持たず、それとの相互作用ができなくなります。

Cross-Origin-Opener-Policy: same-origin-allow-popups

Cross-Origin Resource Sharing (CORS)

他の項目とは異なり、Cross-Origin Resource SharingCORSはヘッダーではなく、ブラウザのメカニズムであり、クロスオリジンリソースへのアクセスを要求し許可します。

デフォルトでは、ブラウザは同一オリジンポリシーを強制し、ウェブページがクロスオリジンリソースにアクセスするのを防ぎます。たとえば、クロスオリジンの画像が読み込まれた場合、それが視覚的にウェブページに表示されていても、ページ上のJavaScriptは画像のデータにアクセスできません。リソースプロバイダは、CORSを使用して制限を緩和し、他のウェブサイトがリソースを読み取ることを許可することができます。

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP)

Spectreベースの攻撃がクロスオリジンのリソースを盗む能力を低減するために、SharedArrayBufferperformance.measureUserAgentSpecificMemory()などの機能はデフォルトで無効化されています。

Cross-Origin-Embedder-Policy: require-corpは、CORSやCORPヘッダーを介して明示的にロードされるまで、ドキュメントやワーカーが画像、スクリプト、スタイルシート、iframeなどのクロスオリジンのリソースをロードすることを防止します。COEPはCross-Origin-Opener-Policyと組み合わせて、ドキュメントをクロスオリジンの分離にオプトインすることができます。

ドキュメントにクロスオリジンの分離を有効にする場合は、Cross-Origin-Embedder-Policy: require-corpを使用してください。

Cross-Origin-Embedder-Policy: require-corp

HTTP Strict Transport Security (HSTS)

プレーンなHTTP接続では通信は暗号化されていないため、ネットワークレベルの盗聴者にデータがアクセス可能です。

Strict-Transport-Securityヘッダは、ブラウザに対して、サイトをHTTPではなくHTTPSを使用してロードするように指示します。設定されると、ヘッダで定義された期間の間、ブラウザはリダイレクトなしでドメインにアクセスするためにHTTPの代わりにHTTPSを使用します。

Strict-Transport-Security: max-age=3153600

リソース

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥