漏洞介绍
测试文件上传漏洞时,服务器可能不允许我们上传php类型的文件,这时如果目标服务器开启了SSI与CGI支持,那么,我们就可以上传一个后缀为shtml的文件,比利用代码 <!--#exec cmd="id" -->
实现任意命令执行。
使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为”服务器端嵌入”或者叫”服务器端包含”,是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。
漏洞复现
环境的搭建依旧是依赖于Vulhub。
现在我们已经上传好了.shtml文件,代码为 <!--#exec cmd="cat /etc/passwd" -->
接下来,访问ssi.shtml,成功执行命令,得到:
当然,这里我们也可以构造代码 <!--# include file="upload.php">
,包含文件进行读取。
这里看到ssi.shtml文件,确实成功包含了upload.php。
漏洞修复
1、可以关闭SSI服务。
2、过滤<、>、-、#、!等字符。