SSI 注入是什么
服务器端包含(SSI)是历史悠久服务端指令机制,Apache、Nginx、IIS 都曾提供支持:在页面里写入形如尖括号加井号开头的指令,Web 服务器处理响应时会解析执行,例如展开环境变量、输出文件大小或包含其他文件。如果用户输入能被拼进这类被解析的页面,就可能触发信息泄露甚至本地文件包含。现代站点已很少启用 SSI,所以检查的第一步不是找利用载荷,而是确认服务器是否真的对目标页面开启了 SSI 解析。
基本信息
| 典型载体 | 历史遗留的 .shtml/.stm 页面与开启 SSI 的目录配置 |
|---|---|
| 生效条件 | 服务器对页面启用 SSI 解析且指令未被转义 |
| 观察信号 | 页面出现变量展开或指令执行后的输出 |
| 修复方向 | 关闭不必要的 SSI 解析,输入与输出位置严格分离 |
典型使用场景
- 历史站点迁移:早年用 SSI 做页头页脚拼接的站点仍在运行
- 公告与静态页维护:运维直接改模板文件,用户输入被拼进页面
- 文件统计与展示:页面用指令输出文件大小、修改时间等信息
- 多站点共用模板:一个目录开了 SSI,影响面覆盖整个虚拟主机
- 上传目录误配置:允许上传的目录被设为 SSI 解析,形成上传后执行
检查步骤
检查步骤
1. 识别可能启用 SSI 的站点与页面:看扩展名、看服务器配置 # 以配置为准
2. 在可控输入处提交无害的指令标记串,观察返回页是否被解析
3. 记录页面路径、输入点、解析现象与响应差异
4. 确认解析开启后再评估影响面,不做文件包含类进一步验证
5. 结论写明解析开关状态,避免把文本回显误判为执行指令类型与风险
| 指令类型 | 作用 | 确认解析后的风险 |
|---|---|---|
| 变量输出类 | 输出环境变量或请求头字段 | 泄露服务器路径与运行环境信息 |
| 文件信息类 | 输出文件大小与时间等属性 | 探测文件存在性与目录结构 |
| 文件包含类 | 把其他文件内容嵌入页面 | 可能读取敏感文件,属高危 |
| 命令执行类 | 多数发行版默认已禁用 | 仅在历史配置中出现,按配置核实 |
修复视角:现代站点优先移除 SSI,改用构建期或后端模板拼装;必须保留时严格限制可用指令集合,并对所有外部输入做转义。
页面文本里出现指令样字符串不等于已被执行:必须以服务器配置或变量确实被展开为证据,避免误报。