# 特殊的HTTP头部
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 获取[**官方PEASS和HackTricks的衣物**](https://peass.creator-spring.com) * **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
## 字典和工具 * [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers) * [https://github.com/rfc-st/humble](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](../../pentesting-web/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](../../pentesting-web/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](../../pentesting-web/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)发生变化时,Web 服务器才会发送响应的内容。`Etag` 是从 HTTP 响应中获取的。 * **Etag** 值通常是基于响应内容进行计算的。例如,`ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` 表示 `Etag` 是响应内容的 **37 字节** 的 **Sha1** 值。 ## 范围请求 * **`Accept-Ranges`**:指示服务器是否支持范围请求,以及范围可以用哪种单位表示。`Accept-Ranges: ` * **`Range`**:指示服务器应该返回文档的哪个部分。 * **`If-Range`**:创建一个条件范围请求,只有当给定的 Etag 或日期与远程资源匹配时才会满足。用于防止从不兼容版本的资源下载两个范围。 * **`Content-Range`**:指示部分消息在完整消息体中的位置。 ## 消息体信息 * **`Content-Length`**:资源的大小,以十进制字节数表示。 * **`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`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100)(Continue)的中间响应。 ## 下载 * **`Content-Disposition`**:在常规的 HTTP 响应中,**`Content-Disposition`** 响应头部是一个指示内容是否预期在浏览器中以 _inline_ 的方式显示,即作为网页的一部分或整个网页,或者作为 _attachment_ 下载并本地保存的头部。 * `Content-Disposition: attachment; filename="filename.jpg"` ## 安全头部 ### 内容安全策略(CSP) {% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} [content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/) {% endcontent-ref %} ### 受信任类型(Trusted Types) 受信任类型提供了编写、安全审查和维护无 DOM XSS 的应用程序的工具。它们可以通过 [CSP](https://web.dev/security-headers/#csp) 启用,并通过限制危险的 Web API 仅接受特殊对象(受信任类型)来使 JavaScript 代码默认安全。 要创建这些对象,您可以定义安全策略,在其中可以确保在将数据写入 DOM 之前始终应用安全规则(如转义或清理)。这些策略是代码中唯一可能引入 DOM XSS 的地方。 ```http Content-Security-Policy: require-trusted-types-for 'script' ``` ```javascript // Feature detection if (window.trustedTypes && trustedTypes.createPolicy) { // Name and create a policy const policy = trustedTypes.createPolicy('escapePolicy', { createHTML: str => { return str.replace(/\/g, '>'); } }); } ``` ```javascript // 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(''); el.innerHTML = escaped; // '<img src=x onerror=alert(1)>' ``` ### X-Content-Type-Options 当恶意的HTML文档从您的域名中提供服务时(例如,如果上传到照片服务的图像包含有效的HTML标记),某些浏览器将将其视为活动文档,并允许其在应用程序的上下文中执行脚本,从而导致[跨站脚本漏洞](https://www.google.com/about/appsecurity/learning/xss/)。 `X-Content-Type-Options: nosniff` 通过指示浏览器对给定响应的`Content-Type`头中设置的[MIME类型](https://mimesniff.spec.whatwg.org/#introduction)是正确的,从而防止此问题。建议在**所有资源**中使用此头。 ```http X-Content-Type-Options: nosniff ``` ### X-Frame-Options 如果恶意网站可以将您的网站嵌入到iframe中,这可能允许攻击者通过[点击劫持](https://portswigger.net/web-security/clickjacking)来引发用户的意外操作。此外,在某些情况下,[Spectre类型的攻击](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\))给恶意网站提供了了解嵌入文档内容的机会。 `X-Frame-Options`指示浏览器是否允许在``、`