Apache SSI远程命令执行漏洞

什么是SSI

Apache SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。

从技术层面来讲,SSI是一种在静态的shtml文件中根据需求插入内容;

SSI其实是一套为web服务器提供的命令,指令的基本格式为:<!--指令名称="指令内容"-->

常用的指令:

|------------------|-------------------------------------------------------------------------|
| 指令名称 | 指令作用 |
| #include | 将文本文件的内容直接插入到文档页面中 |
| #echo | 将环境变量插入到页面中 |
| #flastmod和#fsize | #flastmod文件最近更新日期。 #fsize文件的长度。 |
| #exec | 将某一外部程序的输出插入到页面中,可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi(cgi为插入到CGI程序中) |
| #config | 指定返回给客户端浏览器的错误信息、日期和文件大小的格式 |
| #printenv | 显示当前存在于WEB服务器环境中的所有环境变量 |
| #set | 可给变量赋值,以用于后面的if语句 |
| #if | 创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示 |

在目前我了解的应用于远程执行漏洞的指令是#exec,如果对于其他指令可以自行了解

#exec语法:

<!--#exec cmd="文件名称"-->

运用于常规程序

<!--#exec cgi="文件名称"-->

运用于CGI程序

SSI 远程命令执行漏洞产生原理

漏洞产生原因:在Apache服务器下,如果开启了SSI功能,那么就可以利用ssi指令对shtml等文件进行任意的命令执行;在文件上传时,如果限制了php上传,可以通过上传shtml利用<!--#exec cmd="命令" -->执行任意命令

触发条件

当存在一些条件时,就可以在利用ssi在web服务器上实现任意命令执行:

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

例题

[BJDCTF2020]EasySearch

打开环境,是一个类似登录框的东西

尝试登录一下

常规进行抓包看看有没有什么提示,响应头没有什么提示,进行目录的扫描

进行目录扫描不建议使用disearch,这里使用dirmap,这是一个功能强于DirBuster、Dirsearch、cansina、御剑的扫描软件

扫描发现一个swp备份文件,尝试访问

拿到源码,审查一下代码

 if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '

传入的密码在经过md5加密后的,前6位等于6d0bc1

在网上找一个脚本跑一下

import hashlib

for i in range(100000000):
    a = hashlib.md5(str(i).encode("utf-8")).hexdigest()

    if a[0:6] == '6d0bc1':
        print(i)

passward可以为这两组数字

现在开始尝试登录

admin&2020666

抓包看看响应头的回显,提示了一个url直接去访问

访问后能看见回显了我们刚刚登录的username ,说明这里存在注入点,可以利用

注入方式就是我们应该考虑的,我们的思路应该还是先利用命令执行来获取关于flag的信息,并且可以发现此时的后缀是shtml,那么就存在SSI漏洞尝试进行注入

在username的位置进行ssi注入

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

不能明显的发现flag的位置,也可以再单独的去ls每个子目录下的内容,或者是直接查看flag的位置

<!--#exec cmd="find / -name flag*"-->

cat flag

<!--#exec cmd="cat /var/www/html/flag_990c66bf85a09c664f0b6741840499b2"-->
相关推荐
Aloudata14 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
小钱c721 小时前
Mac下安装Apache JMeter并启动
jmeter·macos·apache
FserSuN2 天前
Apache Calcite - 查询优化之自定义优化规则
apache·calcite
黑风风3 天前
Ubuntu 22 安装 Apache Doris 3.0.3 笔记
笔记·ubuntu·apache
网络安全指导员3 天前
常见网络安全设备默认口令
服务器·网络·安全·web安全·php·apache
Mr_Xuhhh4 天前
Linux第一个小程序-进度条
linux·运维·visualstudio·小程序·编辑器·apache
风口上的吱吱鼠5 天前
20241031 Apache2修改日志里面的时间格式
服务器·apache
小刘同学++5 天前
在 Ubuntu 22.04 上部署Apache 服务, 访问一张照片
linux·ubuntu·apache
cgqyw5 天前
Apache 负载均衡详细配置步骤
运维·apache·负载均衡
Mitch3115 天前
【环境搭建】Apache Kylin 各个版本Docker搭建汇总
docker·apache·kylin