目录
1. 开篇:新阶段与新目标
1.1 当前状态:获取新子域 SYSTEM 权限
1.2 本周核心任务:凭据转储与学习
2. Impacket 框架深度学习
2.1 框架定位与重要性
2.2 背景与支持的协议
2.3 学习 Impacket 的推荐路径
2.4 Impacket 工具集详解 (完整列表)
2.5 工具集分类解析
2.6 核心横向移动工具对比与分析
2.6.1 smbexec.py
2.6.2 psexec.py
2.6.3 wmiexec.py
2.6.4 atexec.py
2.6.5 dcomexec.py
2.7 Impacket 命令语法学习方法
2.8 理解协议与工具选择
3. PowerShell 深度学习
3.1 学习态度转变:正视 PowerShell 的强大
3.2 PowerShell 核心概念
3.3 高效学习方法
3.4 CMD vs PowerShell 深度对比
3.5 常用命令对比表
4. 凭据转储 (secretsdump.py) 详解与实践
4.1 本周核心实践任务
4.2 理解转储内容的重要性
4.3 周六实操预告
5. 总结与 Q&A
5.1 本周学习要点
5.2 .NET 在免杀中的角色
5.3 学习建议与心态
1. 开篇:新阶段与新目标
1.1 当前状态:获取新子域 SYSTEM 权限
当前立足点: 我们已经成功获取了
21.123(ServiceDesk 服务器) 的NT AUTHORITY\SYSTEM权限。新环境: 这台机器属于一个新的子域,意味着开启了一个全新的攻击面。
当前需求:
持久化 (Persistence): 在新子域建立稳定的访问权限。
凭据转储 (Credential Dumping): 获取该机器上缓存的凭据,用于横向移动。
内部侦察 (Internal Reconnaissance): 探测新子网的存活主机、开放服务,为下一步攻击做准备。
1.2 本周核心任务:凭据转储与学习
实践任务: 完成对
21.123的凭据转储。学习重点:
深入学习 Impacket 框架。
深入学习 PowerShell。
学习目的: 这两个工具/环境在后续的域渗透中将被大量使用,必须熟练掌握。理解其原理和细节,有助于更准确地判断信息、划分攻击优先级。
2. Impacket 框架深度学习
2.1 框架定位与重要性
定位: Impacket 是一个平台级的域渗透工具集,与
NXC(NetExec/CrackMapExec) 体量相当,是域渗透中几乎可以完成所有事情的框架。核心本质: 它不仅是一系列工具,更是一个用于处理网络协议的 Python 类库 。它为开发者提供了对数据包的底层编程访问能力,可以从头构建或解析数据包 。
攻击者价值:
Examples 工具集: 提供了大量即用型的攻击和管理脚本,是日常渗透中使用最多的部分 。
二次开发: 可以在其框架基础上进行二次开发,定制符合特定需求的工具,这是高级红队成员必备的能力。
2.2 背景与支持的协议
维护方: 之前由 SecureAuth 托管,现在由 Fortra 的 Core Security 团队负责维护 。
支持的协议 (部分列表):
网络层/传输层: 以太网, Linux "Cooked" Capture , IP (v4/v6) , TCP, UDP, ICMP, ARP 。
应用层/服务: NMB, SMB (v1-v3) , MSRPC v5 (支持多种传输和认证方式) , 部分 TDS (MSSQL) 和 LDAP 协议实现 。
MSRPC 接口: 实现了 EPM, LSAD, SAMR, SRVS, SCMR, WMI, DCOM 等多种接口 。
2.3 学习 Impacket 的推荐路径
前提: 具备一定的攻击链和安全理念理解,否则开发的工具可能脱离实战需求。
学习步骤:
读代码: 阅读
examples中脚本的源码,理解其功能实现和协议交互逻辑。改代码: 尝试修改现有脚本以适应特定业务场景或绕过检测。
仿写: 模仿现有工具,实现特定环节的功能或函数。
贡献: 向主库提交代码 (Pull Request),接受社区和维护者的检验。
独立开发: 在 Impacket 框架基础上独立开发新工具。
推荐资料: 《黑帽子编程》(Black Hat Python) 是一本很好的入门书籍,但直接阅读 Impacket 源码是更贴近实战的学习方式。
2.4 Impacket 工具集详解 (完整列表)
Impacket 提供了超过60个
examples 工具,以下是其功能详解 :
2.5 工具集分类解析
Impacket 的工具可以按功能大致分为几类,这有助于理解和选择:
远程执行:
psexec.py,smbexec.py,atexec.py,wmiexec.py,dcomexec.py。这是横向移动的核心。Kerberos 相关:
GetTGT.py,GetST.py,GetUserSPNs.py,ticketer.py,goldenPac.py,rbcd.py。覆盖了从票据请求到伪造、委派利用的完整流程。Windows 机密/凭据转储:
secretsdump.py,mimikatz.py。中间人攻击:
ntlmrelayx.py。SMB/MSRPC 工具:
smbclient.py,addcomputer.py,services.py,rpcdump.py,samrdump.py等。其他: 枚举 (
GetADUsers.py), 已知漏洞利用 (sambaPipe.py), 文件格式解析 (esentutl.py) 等。
2.6 核心横向移动工具对比与分析
横向移动是高价值操作,也是 IDS/IPS/EDR 的重点监控对象。理解不同工具的原理和留下的日志痕迹至关重要。
2.6.1 smbexec.py
原理: 通过创建/启动/删除一个 Windows 服务来执行命令 。服务名原为
BTOBTO,现已改为随机8字符 。它将命令写入一个批处理文件 (execute.bat),然后执行,并通过 SMB 共享回显输出 。特点: 仅提供非交互式 Shell 。
日志痕迹:
大量日志: 会产生登录日志 (4624/4672/4776) ,
服务创建日志 (7045) , 以及多个进程创建日志 (4688) 。
检测: Windows Defender 默认会检测并拦截 。痕迹非常明显。
2.6.2 psexec.py
原理: 模拟经典的 PsExec 工具,通过上传一个恶意的服务可执行文件 (
RemComSvc) 到目标的ADMIN$共享,然后创建并启动服务来执行命令 。特点: 可指定命令,也可进入半交互式 Shell 。
日志痕迹:
同样产生登录日志 (4624/4672/4776) 和
服务创建/运行日志 (7045, 7036) 。
会留下服务可执行文件 (
%systemroot%\随机名.exe) 的落地痕迹 。检测: Windows Defender 默认会检测并拦截 。
2.6.3 wmiexec.py
原理: 通过 WMI (Windows Management Instrumentation) 的
Win32_Process类的Create方法来执行命令,并通过 SMB 共享回显输出 。特点: 半交互式 Shell 。
不创建服务,不落地文件。
日志痕迹:
产生登录日志 (4624/4672/4776) 。
关键进程日志 (4688):
wmiprvse.exe(WMI Provider Host) 进程会创建cmd.exe来执行命令 。可能产生 WMI 活动日志 (5857/5858) 。
检测: Windows Defender 默认不检测 。相对前两者更为隐蔽。
2.6.4 atexec.py
原理: 通过任务计划程序 (Task Scheduler) 创建一个一次性的计划任务来执行命令 。
特点: 只能执行单条命令,没有交互式 Shell 。
日志痕迹:
产生登录日志 。
任务计划日志 (4698, 及 TaskScheduler/Operational 日志) 。
进程日志 (4688):
svchost.exe(任务计划服务) 创建cmd.exe执行命令 。检测: Windows Defender 默认不检测 。
2.6.5 dcomexec.py
原理: 通过 DCOM (分布式组件对象模型) 远程创建 COM 对象 (如
ShellWindows,MMC20.Application) 来执行命令 。特点: 半交互式 Shell 。
日志痕迹:
产生登录日志 。
进程日志 (4688): 父进程可能是
svchost.exe(DCOM 服务),子进程可能是mmc.exe或explorer.exe等,再由它们创建cmd.exe。检测: Windows Defender 默认不检测 。
2.7 Impacket 命令语法学习方法
官方帮助: 首选使用
-h或--help查看官方帮助文档 。不要过度依赖网上的二手教程。结构化理解: Impacket 命令参数通常分为几个部分:
目标 (Target):
[domain/]username[:password]@<targetName or address>。认证 (Authentication):
-hashes,-k(Kerberos),-no-pass,-aesKey。连接 (Connection):
-dc-ip,-target-ip,-port。功能选项 (Options): 每个工具特有的参数。
手写命令: 在学习阶段,务必手动输入命令,而不是复制粘贴。这能培养肌肉记忆,加深对参数结构的理解,并在出错时具备排错心态和能力。
2.8 理解协议与工具选择
思维拔高: 不要孤立地学习工具。要反向思考:
我当前的目标开放了哪些端口/协议 (SMB/445, RPC/135, WinRM/5985)?
这个协议支持哪些操作?
Impacket 中有哪些工具是基于这个协议实现的?
通过这种从协议到工具的思维方式,
即使遇到 Impacket 中没有的工具,
也能举一反三,寻找其他实现了相同协议的工具。
3. PowerShell 深度学习
3.1 学习态度转变:正视 PowerShell 的强大
常见误区: 从 Linux 过来的安全人员可能对 PowerShell 感到不适应或排斥,认为其设计“反人类”。
正确认知:
PowerShell 非常强大: 它是微软寄予厚望的、深度集成在 Windows 生态中的自动化和管理框架 。
基于 .NET: PowerShell 是构建在 .NET Framework/Core 之上的 。几乎所有的 .NET 类库都可以在 PowerShell 中调用,这赋予了它极强的编程和扩展能力 。
值得学习: 学习 PowerShell 不仅仅是为了在 Windows 环境下“生存”,更是为了利用其强大功能提升效率。熟练后体验会非常好。
3.2 PowerShell 核心概念
Cmdlet (小命令): PowerShell 的核心是 Cmdlet,采用动词-名词 (Verb-Noun) 的命名规范,如
Get-Process,Set-Location。对象管道 (Object Pipeline): 与 Linux 的文本管道不同,PowerShell 的管道
|传递的是 .NET 对象 。这意味着可以对上一个命令的输出对象直接进行过滤、排序、选择属性等复杂操作,而无需做复杂的文本解析 。脚本:
*.ps1文件,支持变量、函数、类、控制流等完整的编程结构 。
3.3 高效学习方法
掌握核心辅助 Cmdlet:
Get-Help: 获取命令的详细帮助。Get-Help Get-Process -Examples或-Full。这是最权威的学习资料。
Get-Command: 查找命令 。Get-Member: 查看一个对象有哪些属性 (Properties) 和方法 (Methods) 。
强制使用原生命令:
关键习惯: 遇到一个操作(如列出目录),强制自己使用 PowerShell 的原生 Verb-Noun Cmdlet (
Get-ChildItem),而不是你已经习惯的别名 (ls,dir) 或 CMD 命令 。目的: 通过这种方式,可以快速熟悉 PowerShell 的命令体系和设计哲学,真正地“进入”PowerShell 的世界。
手动操作: 同样,手动输入命令,感受参数自动补全、语法结构,对于快速上手至关重要。
3.4 CMD vs PowerShell 深度对比
| 功能 | CMD 命令 | PowerShell 命令|
|:-------------|:------------------------------------|:---------------------------------|
| 显示目录内容 | dir | Get-ChildItem 或 ls|
| 改变当前目录 | cd 或 chdir | Set-Location 或 cd|
| 创建目录 | mkdir 或 md | New-Item -ItemType Directory|
| 删除目录 | rmdir 或 rd | Remove-Item|
| 删除文件 | del 或 erase | Remove-Item|
| 复制文件 | copy | Copy-Item|
| 移动文件 | move | Move-Item|
| 重命名文件 | ren 或 rename | Rename-Item|
| 显示 IP 配置 | ipconfig | Get-NetIPAddress|
| 查看进程 | tasklist | Get-Process|
| 结束进程 | taskkill | Stop-Process|
| 清除屏幕 | cls | Clear-Host|
| 显示系统信息 | systeminfo | Get-ComputerInfo|
| 设置环境变量 | set | $env:VariableName = "Value"|
| 显示环境变量 | set | Get-ChildItem Env:|
| 显示网络连接 | netstat | Get-NetTCPConnection|
| 查看服务 | net start | Get-Service|
| 启动服务 | net start <service> | Start-Service <service>|
| 停止服务 | net stop <service> | Stop-Service <service>|
| 列出用户账户 | net user | Get-LocalUser|
| 添加用户账户 | net user <username> <password> /add | New-LocalUser <username> -Password (ConvertTo-SecureString "password" -AsPlainText -Force) |
| 删除用户账户 | net user <username> /delete | Remove-LocalUser <username>|
| 显示磁盘信息 | chkdsk | Get-Volume|
| 格式化磁盘 | format | Format-Volume|
| 查找文件 | dir /s /b <filename> | Get-ChildItem -Recurse -Filter <filename>|
| 打开程序 | <program>.exe | Start-Process <program>|
| 显示当前用户 | whoami | [System.Security.Principal.WindowsIdentity]::GetCurrent().Name|
| 查看系统日志 | eventvwr | Get-WinEvent|
| 执行脚本 | start <script>.bat | .\<script>.ps1|
| 查找文本内容 | find | Select-String|
| 重定向输出 | command > file.txt | command \| Out-File file.txt|
| 查找进程 | tasklist /fi "imagename eq <name>" | Get-Process <name>|
| 设置时间 | time | Set-Date -Date "MM/DD/YYYY HH:MM:SS"|3.5 常用命令对比表
4. 凭据转储 (secretsdump.py) 详解与实践
4.1 本周核心实践任务
目标: 在已获得
SYSTEM权限的21.123机器上,进行凭据转储。工具: 使用 Impacket 的
secretsdump.py。
4.2 理解转储内容的重要性
超越简单哈希:
secretsdump不仅转储用户哈希,它能提取多种类型的“秘密” (Secrets)。为何叫
secretsdump而非samdump或ntdsdump:多种来源: 它可以从 SAM, LSA, NTDS.dit 等多个地方提取信息。
多种类型: 输出内容包括但不限于:
本地用户 NTLM 哈希。
域用户 NTLM 哈希 (从 DC 的 NTDS.dit)。
LSA Secrets: 缓存的域凭据、服务账户密码等。
Kerberos 密钥: 用户的 AES, DES, RC4 密钥。
学习价值: 深入理解其输出,知道每种哈希/密钥的来源和用途,对于后续的哈希传递、票据伪造等攻击至关重要。即使在
secretsdump.py无法使用的场景,理解这些 secrets 的存储位置,也有助于手动提取。
4.3 周六实操预告
周六将实际操作
secretsdump.py。重点讲解输出内容的解读,特别是各种哈希和密钥的含义及应用场景。
讲解 RID (Relative ID) 的含义,以及如何通过 RID 识别特殊账户(如 500 是管理员,501 是 Guest)。
5. 总结与 Q&A
5.1 本周学习要点
Impacket: 熟悉其框架结构、工具分类和核心横向移动工具的原理及痕迹。
PowerShell: 转变心态,通过强制使用原生命令和手动操作来熟练掌握。
secretsdump: 准备学习其使用和输出解读。动手实践: 在靶场环境中,将学到的命令和工具付诸实践,让“手”跟上“大脑”的思考。
5.2 .NET 在免杀中的角色
原因: Windows 的许多底层安全机制(如 AMSI、Defender 的部分功能)和核心服务都是基于 .NET 实现的。因此,要进行内存加载、绕过这些机制,通常需要与 .NET 的底层进行交互。
与 C# 的关系: C# 是 .NET 平台的主要语言,因此很多高级的 Windows 免杀技术都是用 C# 编写的。
学习曲线:
.NET是一个庞大的生态系统,学习门槛较高。但对于志在 Windows 高级对抗的红队成员来说,是绕不开的一环。
5.3 学习建议与心态
Python 的重要性: Python 在安全领域应用广泛,深入理解 Python 有助于理解大量安全工具(如 Impacket)的原理。
.NET 学习: 现阶段不强求,等深入研究免杀时自然会接触和学习。对于有 Java 基础的人,学习 C#/.NET 会相对平滑,因为两者在设计理念上有相似之处(虚拟机、面向对象等)。
-.-
评论区