横向渗透之PSExec、SMBExec和WMIExec的使用及特征

在这里插入图片描述

PSEXEC

攻击者通过PSEXEC连接到远程机器并通过命名管道执行命令,命名管道是通过一个随机命名的二进制文件创建的,这个文件被写入到远程机器上的ADMIN$共享,最后通过SVCManager用来创建服务。

实际上,这一步相当于运行下列命令:’

sc create [serviceName] binPath= "C:\Windows\[uploaded-binary].exe"

一旦建立了命名管道,我们与远程机器之间的所有命令的输入和输出都将通过SMB协议(445/TCP)进行通信。

命名管道

管道:管道是一个共享内存块,可用于通信和数据交换。管道是一个有两端的对象,一个进程向管道写入信息,另一个进程从管道读取信息。创建管道的进程称为管道服务端(只能在本地创建),连接管道的进程称为管道客户端。

特点:

基于 smb 协议通信,用于在两个进程之间传输数据,包括本地进程和远程进程,其客户端既可以接收数据也可以发送数据,服务器端也是可以接收数据,又可以发送数据。支持单向、双向通信。可以被任意符合权限要求的进程访问,

命名管道可以由 CreateNamedPipeA 创建,接着客户端连接,然后实现读写操作

为什么要使用命名管道来建立网络通信呢?

因为他走的是smb协议,也是tcp的一种。在Windows中,当尝试绑定一个tcp socket端口建立通信时,defender防火墙会警报,需要用户确认放行才可以,这没有高权限不就直接寄了。而命名管道利用了未加密的smb协议(445端口),在Windows中,通常是默认允许smb协议出入站的,所以命名管道经常被使用来绕过防火墙

那么我们来看看是不是我们所说的那样。

首先我们通过PSEXEC去横向的时候,这里上传了一个文件名字叫SBxFixsS.exe的文件,也就是说将这个文件写入到了远程机器的ADMIN$共享中,我们可以查看一下共享目录。
在这里插入图片描述
可以看到这个目录已经有文件了。
在这里插入图片描述

这时候将二进制文件写入到ADMIN$共享之后,SVCManager通过这个文件创建一个回连我们机器的命名管道。

如下图:
在这里插入图片描述

在这里插入图片描述
那么我们来看看系统都会产生什么样的日志。可以看到在安全这里会产生特殊登录 登录日志。
在这里插入图片描述
但是如果我们将PSEXEC窗口关闭的时候,比如 CTRL + C,那么他就会产生注销的日志。
在这里插入图片描述
但是如果我们将PSEXEC窗口关闭的时候,比如 CTRL + C,那么他就会产生注销的日志。
在这里插入图片描述

可以发现如果使用CTRL +C 在结束掉PSEXEC进程之后并不会将文件删除.
在这里插入图片描述
但是如果我们使用exit,文件就会被删除.
在这里插入图片描述

SMBEXEC

SMBEXEC和PSEXEC是差不多的,但是SMBEXEC不会将二进制文件保存到磁盘上,相反,SMBEXEC会利用一个批处理文件,以及一个临时文件,来执行和转发消息,就像PSEXEC一样,SMBExec也是通过SMB协议来发送消息输入信息并接收输出结果的。

接下来我们来看看SMBEXEC的原理。
在这里插入图片描述
建立连接之后,我们执行notepad.exe,可以发现它卡在这了,这因为我们在等待远程机器的输入,然而它永远不会输入。我们打开进程资源管理器查看,这里使用Process Explorer。
在这里插入图片描述
可以看到,Notepad.exe进程是CMD.exe的子进程,如果我们将鼠标悬停在CMD.exe上,可以看到它正在处理存储在C:\Windows\TEMP\execute.bat中数据。那好,下面就让我们快速读取这个文件中存储的数据。
在这里插入图片描述
在读取execute.bat文件中的数据后,我们就会发现,原来发送给远程机器的输入被追加到了文件的开头处。

这个批处理文件本质作用就是把我们的输入发送到远程机器上,执行它们,并把输出重定向到一个名为__output的临时文件中,该文件位于\127.0.0.1\C$路径中。

那么我们来看下日志:
在这里插入图片描述

WMIEXEC

WMIEXEC相比前两个是截然不同的,它是通过135端口与远程RPC建立初始通信来访问远程机器,初始通信建立后,它会使用一个大于1024的随机端口进行协商。

该连接用于向远程机器发送输入。并且,输入的内容将在CMD.EXE进程中执行,输出的内容将保存在远程机器上ADMINKaTeX parse error: Expected group after '_' at position 16: 共享的临时文件中。通过查找以“_̲_”开头的文件名,我们可以很容…共享中找到这个临时文件。两个下划线后面的数值看似随机,但实际上是当前日期和时间转换而成的时间戳。

下面,让我们仔细看看这里到底发生了什么。同样,为了便于分析,让我们请求远程机器启动一个Notepad.exe的实例。我们会发现,执行这个命令会导致WMIExec被挂起。
在这里插入图片描述
正如我们所看到的(用紫色高亮显示的部分),我们发送的输入是在CMD.exe进程中执行的。我们还可以发现,命令的输出将被重定向到位于ADMIN$共享中的临时文件中。

在进程内的线程完成任务后,该进程被终止,而输出则被写入临时文件中。然后,存储在临时文件内的输出将通过SMB发回我们的机器上。

可以看到临时文件。
在这里插入图片描述
WMIEXEC生成的日志:
在这里插入图片描述

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值