Special HTTP headers

HackTricksをサポートする

ワードリストとツール

変更するヘッダーの場所

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

  • 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

hop-by-hop headers

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

  • Content-Length: 30

  • Transfer-Encoding: chunked

HTTP Request Smuggling / HTTP Desync Attack

キャッシュヘッダー

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

  • **X-Cacheは、リクエストがキャッシュされていない場合はmissの値を持ち、キャッシュされている場合はhit**の値を持つことがあります。

  • ヘッダー**Cf-Cache-Status**でも同様の動作があります。

  • **Cache-Control**は、リソースがキャッシュされているかどうか、次回キャッシュされる時期を示します:Cache-Control: public, max-age=1800

  • Varyは、通常はキーがないヘッダーであっても、キャッシュキーの一部として扱われる追加のヘッダーを示すために、レスポンスでよく使用されます。

  • **Age**は、オブジェクトがプロキシキャッシュに存在している秒数を定義します。

  • **Server-Timing: cdn-cache; desc=HIT**は、リソースがキャッシュされていたことも示します。

Cache Poisoning and Cache Deception

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

  • 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-SinceおよびIf-Unmodified-Since**は、レスポンスヘッダー**Last-Modified**が異なる時間を含む場合にのみデータで応答されます。

  • **If-MatchおよびIf-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:このヘッダーは、リソースが処理できるHTTPメソッドを伝えるために使用されます。例えば、Allow: GET, POST, HEADのように指定され、リソースがこれらのメソッドをサポートしていることを示します。

  • Expect:クライアントがリクエストを正常に処理するためにサーバーが満たす必要がある期待を伝えるために使用されます。一般的な使用例は、クライアントが大きなデータペイロードを送信する意図を示すExpect: 100-continueヘッダーです。クライアントは、送信を進める前に100 (Continue)レスポンスを探します。このメカニズムは、サーバーの確認を待つことでネットワークの使用を最適化するのに役立ちます。

ダウンロード

  • HTTPレスポンスの**Content-Dispositionヘッダーは、ファイルをインライン**(ウェブページ内)で表示するか、添付ファイル(ダウンロード)として扱うかを指示します。例えば:

Content-Disposition: attachment; filename="filename.jpg"

これは「filename.jpg」という名前のファイルがダウンロードされて保存されることを意図していることを意味します。

セキュリティヘッダー

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

Content Security Policy (CSP) Bypass

信頼されたタイプ

CSPを通じて信頼されたタイプを強制することで、アプリケーションはDOM XSS攻撃から保護されます。信頼されたタイプは、確立されたセキュリティポリシーに準拠した特定のオブジェクトのみが危険なWeb API呼び出しに使用できることを保証し、デフォルトでJavaScriptコードを保護します。

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // Results in safe assignment.

X-Content-Type-Options

このヘッダーはMIMEタイプのスニッフィングを防ぎます。これはXSS脆弱性につながる可能性があります。ブラウザがサーバーによって指定されたMIMEタイプを尊重することを保証します。

X-Content-Type-Options: nosniff

X-Frame-Options

クリックジャッキングに対抗するために、このヘッダーはドキュメントが<frame><iframe><embed>、または<object>タグにどのように埋め込まれるかを制限し、すべてのドキュメントがその埋め込み許可を明示的に指定することを推奨しています。

X-Frame-Options: DENY

クロスオリジンリソースポリシー (CORP) とクロスオリジンリソースシェアリング (CORS)

CORPは、どのリソースがウェブサイトによって読み込まれるかを指定するために重要であり、クロスサイトの漏洩を軽減します。一方、CORSは、特定の条件下で同一オリジンポリシーを緩和し、より柔軟なクロスオリジンリソース共有メカニズムを可能にします。

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP) と Cross-Origin Opener Policy (COOP)

COEP と COOP は、クロスオリジンの隔離を有効にするために不可欠であり、Spectre のような攻撃のリスクを大幅に低減します。これらは、それぞれクロスオリジンリソースの読み込みとクロスオリジンウィンドウとの相互作用を制御します。

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

最後に、HSTSはブラウザがサーバーと安全なHTTPS接続のみで通信することを強制するセキュリティ機能であり、プライバシーとセキュリティを向上させます。

Strict-Transport-Security: max-age=3153600

参考文献

HackTricksをサポートする

Last updated