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

209 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 特殊的HTTP头部
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中被广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## Wordlists & Tools
* [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`
* `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-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`**此头部用于通信资源可以处理的HTTP方法。例如可以指定为`Allow: GET, POST, HEAD`,表示资源支持这些方法。
* **`Expect`**:客户端使用此头部传达服务器需要满足的期望,以便成功处理请求。常见用例涉及`Expect: 100-continue`头部,表示客户端打算发送大数据负载。客户端在继续传输之前等待`100 (Continue)`响应。此机制有助于通过等待服务器确认来优化网络使用。
## 下载
* HTTP响应中的**`Content-Disposition`**头部指示文件应该是**内联**显示(在网页内部)还是作为**附件**(下载)。例如:
```
Content-Disposition: attachment; filename="filename.jpg"
```
## 安全头部
### 内容安全策略CSP<a href="#csp" id="csp"></a>
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/)
{% endcontent-ref %}
### **受信任类型**
通过CSP强制执行受信任类型应用程序可以防范DOM XSS攻击。受信任类型确保只有符合既定安全策略的特定对象可以在危险的Web API调用中使用从而通过默认方式保护JavaScript代码。
```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;');
});
}
```
```javascript
// 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
```
## 参考资料
* [Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
* [HTTP Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
* [Security Headers](https://web.dev/security-headers/)
* [Security Headers Articles](https://web.dev/articles/security-headers)
<details>
<summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>