mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
209 lines
10 KiB
Markdown
209 lines
10 KiB
Markdown
# 特殊的HTTP头部
|
||
|
||
<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)
|
||
* 探索[**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, '<').replace(/>/g, '>');
|
||
});
|
||
}
|
||
```
|
||
|
||
```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>
|