跳转至

Server Side Inclusion

服务器端包含 (SSI) 注入

描述

当应用程序将用户可控的数据合并到随后解析为服务器端包含指令的响应中时,就会发生服务器端包含 (SSI) 注入漏洞。如果未对提供的用户输入进行严格验证,恶意参与者可能会操纵或插入指令来执行恶意代码。

利用 SSI 注入漏洞通常允许将任意内容(例如 JavaScript)注入到应用程序的响应中,从而带来类似于跨站脚本 (XSS) 的风险。根据服务器的配置,该漏洞还可能允许访问受保护的文件或在服务器上执行任意系统命令。

SSI 注入可以有多个注入点,例如 POST 表单、HTTP 标头、Cookie..

  • 代码执行:
GET / HTTP/1.1
Host: localhost
Referer: <!--#exec cmd="/bin/ls"-->
  • 文件包含:
POST /contact HTTP/1.1
Host: localhost

body=<!--#include virtual="/proc/version"-->

建议

要减轻服务器端包含注入漏洞的风险,请考虑以下建议:

  • 禁用 SSI:如果不需要,禁用 SSI 是减轻 SSI 注入风险的万无一失的建议,将 SSI 限制在有限数量的页面上也将有助于减轻某些风险。

  • 输入验证和净化:在将用户提供的输入(尤其是像 <> 这样的 HTML 特殊字符)传递给具有 SSI 执行权限的页面之前,对其进行净化和/或编码。

  • 使用 suEXEC:使用 suEXEC 限制运行 SSI 指令的用户的权限。

<!--#if expr="$user_input =~ /^[a-zA-Z0-9_\-]+$/i" -->
   <!--#include virtual="/web/$user_input" -->
<!--#else -->
   Invalid input!
<!--#endif -->

链接

标准

  • GDPR:
    • ART_5
    • ART_32
  • PCI_STANDARDS:
    • REQ_6_2
    • REQ_6_3
    • REQ_11_3
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_3_4
    • CC_4_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY213
    • SECURITY255