impacket 编程手册 2.3:从0开始实现windows通信接口与漏洞利用
原创 侠盗鲁平 2026-10-01 06:57 日本

GitHub: https://github.com/lupingQAQ/impacket-programming-manual
Docs: https://lupingqaq.github.io/impacket-programming-manual/
WeChat: IndexSec
0x00 旧版复盘
2022 年,本公众号发过一篇《impacket 编程手册》(旧版传送门),全文 142 页。坦白讲,那一版问题不少:
旧版问题 | 具体表现 |
|---|---|
视角 | 入门笔记体,部分内容是边查边记 |
组织 | 没有阅读路线,章节之间依赖关系不清晰 |
案例缺位 | 协议模块讲完就结束,没有落地到已知漏洞的利用原理 |
语言 | 只有中文版,代码注释中英混杂 |
四年间 impacket 源码与域渗透生态变化很大,旧版内容已需要实质性更新。这次不是增量修补,而是推倒重写——保留"以 impacket 源码为线索"的定位,其余全部重构。当前版本 v2.3,约 5400 行,与修订后的中文第二版同步维护英文版。
0x01 为什么需要一本源码级手册
impacket 是事实上的域渗透工具包,其 examples 目录下的 secretsdump.py、psexec.py、wmiexec.py 等脚本基本覆盖了域渗透的常规需求。
但值得注意的是:很多 AD 域漏洞的公开 PoC 直接基于 impacket 模块开发或改写——
sam-the-adminCVE-2022-33679(Kerberos RC4_PKINIT 降级)
noPac
Zerologon 工具链
PetitPotam 类中继攻击
BadSuccessor(CVE-2025-53779,滥用 Windows Server 2025 的 dMSA 账户类型)
CVE-2025-33073(反射式中继,在未强制 SMB 签名的机器上直接拿到 SYSTEM)
而网上的文章几乎都集中在讲怎么运行这些示例脚本,怎么调参数;讲怎么基于 impacket 做二次开发、下次漏洞爆发时怎么快速写出自己的 PoC 的内容,长期是空白。
本手册填的就是这个空白:以 impacket 源码树为线索逐模块拆解,读到的是 getKerberosTGT/getKerberosTGS 的内部实现、ccache/keytab 的二进制布局、DCERPCTransportFactory 的分发逻辑、DCOMConnection/IRemUnknown 的对象模型——而不是又一篇参数速查。
0x02 手册结构:六部分九章
部分 | 章节 | 内容 | 前置知识 |
|---|---|---|---|
第一部分 预备与基础 | 第 1 章 impacket 总览与目录结构 | 各模块在源码树中的位置 | 无 |
第 2 章 structure.py 通用序列化基类 | 所有协议包结构的公共基类 | 无 | |
第二部分 认证与目录服务 | 第 3 章 LDAP(ldap) | 域内目录查询、ACL 结构、全局编录 | 第 2 章 |
第 4 章 Kerberos(krb5) | 票据、ccache/keytab、PAC、GSS-API 与 SPNEGO | 第 2 章 | |
第三部分 DCE/RPC | 第 5 章 dcerpc | RPC 基础(NDR、rpcrt、EPM、transport)+ 按功能分五组的 20+ 接口模块 | 第 2、4 章 |
第四部分 DCOM 与 WMI | 第 6 章 MS-DCOM | COM/DCOM 编程、dcomrt、oaut/comev/scmp/vds/wmi 子模块 | 第 5 章 |
第五部分 基础库 | 第 7 章 common | SMB2/3、DPAPI、NTDS(ese)、TDS 等 | 按需 |
第六部分 新版接口与实战案例 | 第 8 章 0.12–0.14 新增接口与支持库 | ICPR(AD CS 证书注册)、GKDI、NEGOEX、RAA、SCMR、 | 第 2、5 章 |
第 9 章 实战案例 | BadSuccessor(CVE-2025-53779)与 CVE-2025-33073 的利用原理 | 第 3、5 章 |
第 2 章是全书地基:structure.py 的 Structure 基类定义了一种对标准 struct 格式扩充的数据格式描述语言,keytab、ccache、smb3structs 等文件中的每个协议包结构类都继承自它。读懂第 2 章,后面所有协议的组包/解包都是同一套模式。
推荐阅读路线:基础(第 1–2 章)→ Kerberos(第 4 章)→ 按功能组选读 RPC 接口模块(第 5 章)→ 需要横向到 WMI/DCOM 时读第 6 章。
0x03 dcerpc:20+ 接口模块按功能分五组
第三部分是全书篇幅最重的部分。impacket 的 dcerpc/v5 下有二十多个 MS 协议接口实现,逐个平铺直叙容易迷失,手册将其按功能分为五组:
功能组 | 模块 |
|---|---|
基础与传输 | ndr、dtypes、rpcrt、enum、epm、transport |
安全策略与域认证 | lsad、lsat、mgmt、mimilib、nrpc(Zerologon)、samr |
系统与运维 | even6、iphlp、rrp(注册表)、rprn/par(打印)、srvs(共享)、wkst、tsts、TSCH(计划任务)、dhcpm |
Exchange 相关 | nspi、oxabref、rpch |
凭据与目录复制 | bkrp、drsuapi(DCSync)、dssp |
每组内部先讲协议交互流程,再进入源码关键函数。
此外,新增的第六部分补齐了 impacket 0.12–0.14 引入的新接口——ICPR(AD CS 证书注册)、GKDI(组密钥分发)、NEGOEX(SPNEGO 扩展协商)、RAA(远程授权)与 SCMR(服务控制管理器),以及 acl.py、dpapi_ng.py 两个支持库。
0x04 贯穿全书的实战案例
协议模块不讲完就翻篇,而是落到已知漏洞的利用原理上:
案例 | 所在模块 | 手册章节 |
|---|---|---|
Zerologon(CVE-2020-1472) | nrpc | 第 5 章 |
PrinterBug / PrintNightmare | rprn / par | 第 5 章 |
CVE-2019-1040 NTLM MIC 绕过 | gssapi | 第 4 章 |
Exchange RPC over HTTP 中继(rpcmap / ProxyRelay) | rpch | 第 5 章 |
RPC 安全回调缓存滥用(Cold Hard Cache,Akamai 报告) | dcomrt | 第 6 章 |
WMI 事件持久化(wmipersist) | wmi | 第 6 章 |
黄金 PAC 构造 | krb5 / pac | 第 4 章 |
BadSuccessor(CVE-2025-53779,dMSA 滥用) | ldap / krb5 | 第 9 章 |
CVE-2025-33073(反射式中继 → SYSTEM) | smb / ntlmrelayx | 第 9 章 |
读完对应模块再看案例,能明确看到"协议特性 → 缺陷 → 利用"的完整链条——这也是下一批域漏洞 PoC 的写作套路。
0x05 v1 → v2 升级对照
维度 | v1(2022) | v2.x(当前) |
|---|---|---|
篇幅与形态 | 142 页笔记体 | 约 5400 行、六部分九章、双 PDF 与在线文档站 |
组织 | 平铺无路线 | 阅读指南表格 + 章节依赖标注 |
协议覆盖 | 部分 examples 脚本讲解 | LDAP / Kerberos / GSS-API / DCE/RPC / 20+ MS 接口 / DCOM / WMI / common |
案例落地 | 无 | 9 类已知漏洞案例贯穿对应模块 |
代码引用 | 未系统核对 | 与 fortra/impacket master 逐条核对(以发布时 master 为基准) |
语言 | 中文单语 | 中英双语 + 双 PDF |
0x06 编写方法论
新版在写作方法上做了三件事来保证质量:
引用代码与上游逐条核对。全部代码引用已与 fortra/impacket master 比对(以发布时 master 为基准);如 par.py 的 opnum 39 元组、hept_map、MimiUnbind/MiniUnbind 等上游未统一之处,均按源码原样保留并加注说明——读者拿手册对照源码时不会对不上。
步骤编号注释。长代码段压缩为关键路径 + 步骤编号注释(中文版 ①②③、英文版 (1)(2)(3)),一眼看清调用链,而不是在数百行样板代码里来回翻。
描述性目录。每个模块标题带内容摘要(如 ### nrpc.py — Netlogon 认证与 Zerologon(CVE-2020-1472)),而非裸文件名,目录本身即可当索引用。
与 impacket 版本同步。第六部分覆盖 impacket 0.12–0.14 新增的接口与支持库(ICPR、GKDI、NEGOEX、RAA、SCMR、acl.py、dpapi_ng.py),并对上游尚无独立示例的接口在 example/ 目录补齐可运行 PoC;同时整体修复了英文版 RPC 接口说明中残留的机器翻译乱码。
0x07 获取方式
git clone https://github.com/lupingQAQ/impacket-programming-manual.git在线阅读:仓库内
impacket编程手册.md(中文)/impacket_programming_manual_EN.md(English)文档站:https://lupingqaq.github.io/impacket-programming-manual/
离线阅读:Releases 页下载
impacket编程手册.pdf或impacket_programming_manual_EN.pdf实验环境:两台虚拟机搭一套 Windows AD 实验 +
pip install impacket,跟着案例逐模块复现可运行 PoC:
example/目录(ICPR 证书注册、GKDI 取密钥、NEGOEX 解析、RAA 权限枚举)
欢迎通过 GitHub Issues 或 PR 纠错——尤其是对照 impacket / 微软协议文档的技术审校(函数名、认证流程、加解密描述)。
0x08 免责声明
本手册仅用于合法的安全研究、教学以及获得明确授权的渗透测试。
本文转载自微信公众号「Security丨Art」,查看原文。版权归原作者所有,如有侵权请联系删除。