21 KiB
特別なHTTPヘッダー
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterで🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するために、hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出してください。
ワードリストとツール
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers
- https://github.com/rfc-st/humble
位置を変更するヘッダー
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-cache
はCache-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"
は、Etag
が 37 バイトの 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 リクエストで Range
と Etag
の組み合わせを使用すると、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, '<').replace(/>/g, '>');
}
});
}
// 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; // '<img src=x onerror=alert(1)>'
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>
でページをレンダリングするかどうかを許可するかどうかを示します。すべてのドキュメントは、他のドキュメントに埋め込まれることを許可するかどうかを示すために、このヘッダーを送信することが推奨されています。
特定のオリジンのみがドキュメントを埋め込むことを許可するなど、より詳細な制御が必要な場合は、CSPのframe-ancestors
ディレクティブを使用してください。
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP)
攻撃者は、ウェブベースのクロスサイトリークを悪用して、別のオリジンからリソースを埋め込むことで、それらに関する情報を取得することができます。
Cross-Origin-Resource-Policy
は、ロードされることが許可されるウェブサイトのセットを示すことで、このリスクを軽減します。このヘッダーは、same-origin
、same-site
、cross-origin
のいずれかの値を取ります。すべてのリソースは、他のウェブサイトからのロードを許可するかどうかを示すために、このヘッダーを送信することが推奨されています。
Cross-Origin-Resource-Policy: same-origin
Cross-Origin Resource Policy (CORB)
これは、サイドチャネル攻撃(Spectreを含む)の脅威を軽減するのに役立ちます。既存のウェブ機能には必要ないが、機密情報を含む可能性がある特定のクロスオリジンネットワークレスポンスをウェブページに配信しないように、ブラウザが設計されています。同様に、Cross-Site Script Inclusion(XSSI)の脆弱性も軽減するのに役立ちます。例えば、<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 Sharing(CORS)はヘッダーではなく、ブラウザのメカニズムであり、クロスオリジンリソースへのアクセスを要求し許可します。
デフォルトでは、ブラウザは同一オリジンポリシーを強制し、ウェブページがクロスオリジンリソースにアクセスするのを防ぎます。たとえば、クロスオリジンの画像が読み込まれた場合、それが視覚的にウェブページに表示されていても、ページ上のJavaScriptは画像のデータにアクセスできません。リソースプロバイダは、CORSを使用して制限を緩和し、他のウェブサイトがリソースを読み取ることを許可することができます。
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Cross-Origin Embedder Policy (COEP)
Spectreベースの攻撃がクロスオリジンのリソースを盗む能力を低減するために、SharedArrayBuffer
やperformance.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 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。