文件上传 - Apache SSI远程命令执行

一、漏洞原理

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

Tips:(shtml释义)

  • T1(作用?):
    一些大的门户网站如sohu、sina,如果是动态的一个页面会有多次数据库查询,如此庞大信息量如何保证速度和质量那? 高性能的服务器是其一; 其二是使用shtml静态页面,如此为提升访问质量!
  • T2(shtml和html区别?)
    (shtml不是html而是一种服务器API,shtml是服务器动态产生的html)
      两者都是超文本格式,但shtml是一种用于SSI(Servcie Side Include ,服务器端包含指令)技术的文件,一般浏览器访问时会优先扫描依次shtml文件看有没有SSI指令存在,就就按服务器设定的规则去解释SSI指令[ 当作一种动态编程语言来处理 ],然后跟html一起被渲染。
      当shtml或shtm中不包含服务端可执行脚本时作用和html或htm一样。

二、漏洞场景/挖掘思路

  1. 业务场景Fuzz,比如获取IP、定位、时间等
  2. 识别页面是否包含.stm、.shtm和.shtml后缀
  3. 一些业务中,用户输入内容会展现在在页面中(一个存在反射性xss漏洞页面,输入的payload不是xss代码而是SSI标签,同时服务器又开启了对SSI支持就会利用xss远程执行命令)

三、触发条件

当符合以下条件时,攻击者可以在Web服务器上运行任意命令:

  • Web服务器为Apache和IIS(支持SSI功能的服务器)
  • 服务器有上传或者用户输入页面且未对相关SSI关键字做过滤
  • Web应用程序在返回响应的HTML页面时,嵌入用户输入
  • 未对输入的参数值进行输入过滤

四、漏洞复现

(使用docker搭建,具体搭建操作传送门

4.1 启动环境

# 进入漏洞(进入vulhub对应的漏洞环境的目录)
》》cd /Kevin/vulhub-master/httpd/ssi-rce
在这里插入图片描述
# 编译并运行环境
》》docker-compose build && docker-compose up -d

Tips:
# 只运行以下命令也可以,因为docker-compose up -d 运行后会自动查找目录下的配置文件,如果配置文件中包含的环境已经存在则不会再编译了,如果不存在会重新编译,因此此命令包含了docker–compose build命令
》》docker-compose up -d

4.2 访问环境

# 浏览器访问: http://<vul’s ip>:8080/upload.php
在这里插入图片描述

4.3 复现过程

# 我们随便上传一个文件探一下服务器是否为Apache
在这里插入图片描述
(Unsupported filetype uploaded. 不支持的文件上传格式!)

# 我们上传一个poc文件(Apache SSI_poc exp.shtml)

<!--#exec cmd="cat /etc/passwd"-->

Tips:因为IIS和Apache都支持SSI功能,因此poc中cmk="ls"比较稳妥一些!

# 上传成功
在这里插入图片描述
# 浏览器访问上传的文件成功执行命令
在这里插入图片描述

五、防御措施

发布了111 篇原创文章 · 获赞 104 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Aaron_Miller/article/details/96484648