Special HTTP headers

htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ

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

pagehop-by-hop headers

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

  • Content-Length: 30

  • Transfer-Encoding: chunked

pageHTTP 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 はリソースがキャッシュされていることも示します

pageCache 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-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: このヘッダーは、リソースが処理できるHTTPメソッドを通知するために使用されます。たとえば、Allow: GET, POST, HEAD と指定されることがあり、これはリソースがこれらのメソッドをサポートしていることを示します。

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

ダウンロード

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

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

セキュリティヘッダー

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

pageContent 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

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

X-Content-Type-Options: nosniff

X-Frame-Options

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

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP) と Cross-Origin Resource Sharing (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

参考

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricks をサポートする他の方法:

Last updated