hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

10 KiB
Raw Blame History

特殊的HTTP头部

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式

Wordlists & Tools

更改位置的头部

重写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

{% 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-cacheCache-Control: no-cache相同
  • Warning**Warning**通用HTTP头部包含有关消息状态可能存在问题的信息。响应中可能会出现多个Warning头部。Warning: 110 anderson/1.3.37 "Response is stale"

条件

  • 使用这些头部的请求:**If-Modified-SinceIf-Unmodified-Since**仅在响应头部**Last-Modified**包含不同时间时才会响应数据。
  • 使用**If-MatchIf-None-Match**的条件请求使用Etag值因此如果数据Etag已更改Web服务器将发送响应内容。Etag是从HTTP响应中获取的。
  • Etag值通常基于响应内容计算。例如,ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"表示Etag37字节的内容的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请求中**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"

安全头部

内容安全策略CSP

{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}

受信任类型

通过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

跨源嵌入策略COEP和跨源打开策略COOP

COEP和COOP对于启用跨源隔离至关重要大大降低了类似Spectre的攻击风险。它们分别控制跨源资源的加载和与跨源窗口的交互。

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

HTTP 严格传输安全性HSTS

最后HSTS 是一项安全功能,强制浏览器只能通过安全的 HTTPS 连接与服务器通信,从而增强隐私和安全性。

Strict-Transport-Security: max-age=3153600

参考资料

从零开始学习AWS黑客技术 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式