16 KiB
特殊的HTTP头部
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks的衣物
- 加入💬 Discord群组 或 电报群组 或 关注我在推特上的🐦@carlospolopm.
- 通过向hacktricks repo 和hacktricks-cloud repo 提交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)发生变化时,Web 服务器才会发送响应的内容。Etag
是从 HTTP 响应中获取的。 - Etag 值通常是基于响应内容进行计算的。例如,
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"
表示Etag
是响应内容的 37 字节 的 Sha1 值。
范围请求
Accept-Ranges
:指示服务器是否支持范围请求,以及范围可以用哪种单位表示。Accept-Ranges: <range-unit>
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
(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 {% endcontent-ref %}
受信任类型(Trusted Types)
受信任类型提供了编写、安全审查和维护无 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中,这可能允许攻击者通过点击劫持来引发用户的意外操作。此外,在某些情况下,Spectre类型的攻击给恶意网站提供了了解嵌入文档内容的机会。
X-Frame-Options
指示浏览器是否允许在<frame>
、<iframe>
、<embed>
或<object>
中呈现页面。建议所有文档发送此头部,以指示它们是否允许被其他文档嵌入。
如果您需要更精细的控制,例如只允许特定来源嵌入文档,请使用CSP frame-ancestors
指令。
X-Frame-Options: DENY
跨源资源策略 (CORP)
攻击者可以通过利用基于Web的跨站泄漏来嵌入来自另一个源的资源,例如来自您的网站的资源,以了解有关它们的信息。
Cross-Origin-Resource-Policy
通过指示可以加载它的网站集合来减轻此风险。该标头可以采用以下三个值之一:same-origin
、same-site
和 cross-origin
。建议所有资源发送此标头,以指示它们是否允许其他网站加载。
Cross-Origin-Resource-Policy: same-origin
跨源资源策略(CORB)
它有助于减轻侧信道攻击(包括Spectre)的威胁。它旨在防止浏览器将可能包含敏感信息且对现有网络功能不必要的跨源网络响应传递给网页。
同样,它还有助于减轻跨站脚本包含(XSSI)漏洞。
例如,它将阻止从<script>或<img>标签请求的跨源text/html响应,并将其替换为空响应。这是站点隔离中包含的保护措施的重要部分。
跨源打开策略(COOP)
攻击者的网站可以通过利用基于Web的跨站泄漏来在弹出窗口中打开另一个站点以获取有关其的信息。在某些情况下,这也可能导致基于Spectre的侧信道攻击。
Cross-Origin-Opener-Policy
头部提供了一种方式,使文档能够与通过window.open()
或没有rel="noopener"
的带有target="_blank"
的链接打开的跨源窗口隔离。因此,文档的任何跨源打开者都无法引用它并且无法与其交互。
Cross-Origin-Opener-Policy: same-origin-allow-popups
跨源资源共享(CORS)
与本文中的其他内容不同,跨源资源共享(CORS)不是一个头部,而是一种浏览器机制,用于请求和允许访问跨源资源。
默认情况下,浏览器通过同源策略来防止网页访问跨源资源。例如,当加载跨源图像时,即使在网页上可视化显示,页面上的JavaScript也无法访问图像的数据。资源提供者可以通过CORS选择性地放宽限制,允许其他网站读取资源。
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
跨域嵌入策略(COEP)
为了减少Spectre攻击窃取跨域资源的能力,默认情况下禁用了SharedArrayBuffer
或performance.measureUserAgentSpecificMemory()
等功能。
Cross-Origin-Embedder-Policy: require-corp
阻止文档和工作线程加载跨域资源,如图像、脚本、样式表、iframe等,除非这些资源通过CORS或CORP头部明确选择加载。COEP可以与Cross-Origin-Opener-Policy
结合使用,将文档选择为跨域隔离。
当您希望为文档启用跨域隔离时,请使用Cross-Origin-Embedder-Policy: require-corp
。
Cross-Origin-Embedder-Policy: require-corp
HTTP严格传输安全(HSTS)
通过普通的HTTP连接进行通信是未加密的,使得传输的数据可以被网络级别的窃听者访问。
Strict-Transport-Security
头部告知浏览器不应该使用HTTP加载网站,而应该使用HTTPS。一旦设置了该头部,浏览器将在头部定义的时间段内,无需重定向,直接使用HTTPS访问该域名。
Strict-Transport-Security: max-age=3153600
资源
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入💬 Discord 群组 或 Telegram 群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks 仓库 和hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。