# 服务器端包含/边缘端包含注入
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家) 支持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/hacktricks_live)**。** * 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
## 服务器端包含基本信息 **(介绍摘自[Apache文档](https://httpd.apache.org/docs/current/howto/ssi.html))** SSI(服务器端包含)是放置在HTML页面中的指令,**在服务器上进行评估**,而页面正在提供时。它们让您可以**向现有HTML页面添加动态生成的内容**,而无需通过CGI程序或其他动态技术提供整个页面。\ 例如,您可以将指令放入现有的HTML页面中,如: `` 当提供页面时,此片段将被评估并替换为其值: `Tuesday, 15-Jan-2013 19:28:54 EST` 何时使用SSI,何时让页面完全由某个程序生成,通常取决于页面的静态部分有多少,以及每次提供页面时需要重新计算多少。SSI是向页面添加小块信息的绝佳方式,例如上面显示的当前时间。但是,如果页面的大部分是在提供时生成的,您需要寻找其他解决方案。 如果Web应用程序使用扩展名为\*\* `.shtml`、`.shtm`或`.stm` \*\*的文件,则可以推断存在SSI,但情况并非总是如此。 典型的SSI表达式具有以下格式: ``` ``` ### 检查 ```javascript // Document name // Date // File inclusion // Including files (same directory) // CGI Program results // Including virtual files (same directory) // Modification date of a file // Command exec // Command exec // Reverse shell // Print all variables // Setting variables ``` ## 边缘包含 在缓存信息或动态应用程序时可能会出现问题,因为内容的一部分可能会在下次检索内容时发生变化。这就是ESI的用途,通过使用ESI标记指示需要在发送缓存版本之前生成的动态内容。\ 如果攻击者能够在缓存内容中注入ESI标记,那么他就可以在将文档发送给用户之前注入任意内容。 ### ESI检测 从服务器响应中的以下标头表示服务器正在使用ESI: ``` Surrogate-Control: content="ESI/1.0" ``` 如果您找不到此标头,则服务器**可能仍在使用ESI**。\ **也可以使用盲目利用方法**,因为请求应该发送到攻击者的服务器: ```javascript // Basic detection hello // If previous is reflected as "hello", it's vulnerable // Blind detection // XSS Exploitation Example // Cookie Stealer (bypass httpOnly flag) // Introduce private local files (Not LFI per se) // Valid for Akamai, sends debug information in the response ``` ### ESI利用 [GoSecure创建了](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/)一张表,以了解我们可以针对不同支持ESI的软件尝试的可能攻击,具体取决于支持的功能: * **Includes**:支持``指令 * **Vars**:支持``指令。用于绕过XSS过滤器 * **Cookie**:文档cookie可被ESI引擎访问 * **Upstream Headers Required**:除非上游应用程序提供头部,否则代理应用程序将不会处理ESI语句 * **Host Allowlist**:在这种情况下,ESI包含仅可能来自允许的服务器主机,例如,只有对这些主机才可能进行SSRF | **软件** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** | | :----------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: | | Squid3 | 是 | 是 | 是 | 是 | 否 | | Varnish Cache | 是 | 否 | 否 | 是 | 是 | | Fastly | 是 | 否 | 否 | 否 | 是 | | Akamai ESI 测试服务器 (ETS) | 是 | 是 | 是 | 否 | 否 | | NodeJS esi | 是 | 是 | 是 | 否 | 否 | | NodeJS nodesi | 是 | 否 | 否 | 否 | 可选的 | #### XSS 以下ESI指令将在服务器响应中加载任意文件 ```xml ``` #### 绕过客户端 XSS 保护 ```xml x=>alert(/Chrome%20XSS%20filter%20bypass/);> Use to bypass WAFs: ipt>alert(1)ript> error=alert(1)> ``` #### 窃取 Cookie * 远程窃取 cookie ```xml ``` * 通过在响应中反射XSS来窃取HTTP\_ONLY cookie: ```bash # This will reflect the cookies in the response # Reflect XSS (you can put '">' URL encoded and the URL encode eveyrhitng to send it in the HTTP request) # It's possible to put more complex JS code to steal cookies or perform actions ``` #### 私有本地文件 不要将其与“本地文件包含”混淆: ```markup ``` #### CRLF CRLF (Carriage Return Line Feed) refers to the sequence of characters used to denote a line break in HTTP headers. It consists of the ASCII characters 13 (CR) followed by 10 (LF). Attackers can exploit CRLF injection vulnerabilities to manipulate HTTP responses, perform header injection attacks, and potentially execute malicious actions. ```markup ``` #### 开放式重定向 以下内容将向响应添加一个 `Location` 头部 ```bash ``` #### 添加标题 * 在强制请求中添加标题 ```xml ``` * 在响应中添加标头(用于绕过带有 XSS 的响应中的 "Content-Type: text/json") ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### 在添加标头时的 CRLF (**CVE-2019-2438)** ```xml ``` #### Akamai调试 这将发送包含在响应中的调试信息: ```xml ``` ### ESI + XSLT = XXE 通过为_dca_参数指定`xslt`值,可以实现基于**`eXtensible Stylesheet Language Transformations (XSLT)`**的ESI包含。这种包含导致HTTP代理服务器检索XML和XSLT文件,后者过滤前者。这些XML文件可用于_XML External Entity (XXE)_攻击,使攻击者能够执行SSRF攻击。然而,这种方法的效用有限,因为ESI包含本身已经作为SSRF向量。由于底层Xalan库不支持,外部DTD不会被处理,从而防止本地文件提取。 ```xml ``` XSLT文件: ```xml ]> &xxe; ``` 检查XSLT页面: {% content-ref url="xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} [xslt-server-side-injection-extensible-stylesheet-language-transformations.md](xslt-server-side-injection-extensible-stylesheet-language-transformations.md) {% endcontent-ref %} ### 参考资料 * [https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) * [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/) * [https://academy.hackthebox.com/module/145/section/1304](https://academy.hackthebox.com/module/145/section/1304) * [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91) ## Brute-Force Detection List {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)! 支持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/hacktricks_live)**。** * 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。