常见漏洞验证121 条

SSI 注入检查

服务器端包含(SSI)指令被页面解析时,用户输入若进入 SSI 上下文可被求值;多见于 .shtml/.stm 类历史页面。

SSI 注入是什么

服务器端包含(SSI)是历史悠久服务端指令机制,Apache、Nginx、IIS 都曾提供支持:在页面里写入形如尖括号加井号开头的指令,Web 服务器处理响应时会解析执行,例如展开环境变量、输出文件大小或包含其他文件。如果用户输入能被拼进这类被解析的页面,就可能触发信息泄露甚至本地文件包含。现代站点已很少启用 SSI,所以检查的第一步不是找利用载荷,而是确认服务器是否真的对目标页面开启了 SSI 解析。

基本信息

典型载体历史遗留的 .shtml/.stm 页面与开启 SSI 的目录配置
生效条件服务器对页面启用 SSI 解析且指令未被转义
观察信号页面出现变量展开或指令执行后的输出
修复方向关闭不必要的 SSI 解析,输入与输出位置严格分离

典型使用场景

  • 历史站点迁移:早年用 SSI 做页头页脚拼接的站点仍在运行
  • 公告与静态页维护:运维直接改模板文件,用户输入被拼进页面
  • 文件统计与展示:页面用指令输出文件大小、修改时间等信息
  • 多站点共用模板:一个目录开了 SSI,影响面覆盖整个虚拟主机
  • 上传目录误配置:允许上传的目录被设为 SSI 解析,形成上传后执行

检查步骤

检查步骤
1. 识别可能启用 SSI 的站点与页面:看扩展名、看服务器配置  # 以配置为准
2. 在可控输入处提交无害的指令标记串,观察返回页是否被解析
3. 记录页面路径、输入点、解析现象与响应差异
4. 确认解析开启后再评估影响面,不做文件包含类进一步验证
5. 结论写明解析开关状态,避免把文本回显误判为执行

指令类型与风险

指令类型作用确认解析后的风险
变量输出类输出环境变量或请求头字段泄露服务器路径与运行环境信息
文件信息类输出文件大小与时间等属性探测文件存在性与目录结构
文件包含类把其他文件内容嵌入页面可能读取敏感文件,属高危
命令执行类多数发行版默认已禁用仅在历史配置中出现,按配置核实
修复视角:现代站点优先移除 SSI,改用构建期或后端模板拼装;必须保留时严格限制可用指令集合,并对所有外部输入做转义。
页面文本里出现指令样字符串不等于已被执行:必须以服务器配置或变量确实被展开为证据,避免误报。

易错点

  • 把文本中出现指令样字符串当作已执行:必须以配置或实际展开结果为证据
  • 未确认解析开关就投入大量时间构造载荷:先定性开关状态再定深度
  • 忽略全局配置:一个目录开启 SSI 可能覆盖同虚拟主机的全部页面
  • 在上传目录反复试探:若该目录被误设为解析目录,试探动作可能直接落地执行
  • 只记录现象不记录服务器与版本:不同 Web 服务器支持的指令集合差异很大,结论无法复核

数据来源与参考

  • Apache httpd 文档(mod_include/SSI)
  • OWASP WSTG WSTG-INPV-08
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌