基于PSexec的一些原理分析
0x01 PSexec
PsExec可以算是一个轻量级的 telnet 替代工具,无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与命令控制台几乎相同的实时交互性。PsExec最强大的功能就是在远程系统和远程支持工具(如 ipconfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。
一般使用psexec用来横向移动,可以用来控制主机,条件是拥有被控主机的账户和密码.
psexec工具的使用:
1 | psexec.exe \\目标IP –u administrator –p password |
建立PSexec的过程:
1 | 1.通过ipc$连接,释放psexecsvc.exe到目标 |
登录认证方式是 NTLM 认证,通过ipc(进程间通信)连接后,登录目标主机,连接admin$通道,向目标主机写入 psexecsvc.exe
文件到C:\Windows\AppendData(或者WirteData
目录下 ,接着使用IPC命名管道调用svcctl接口,用于开启远程服务psexecsvc.exe
( 用于在其他系统中远程执行命令), 最终创建服务后会建立4个命名管道。
因此,在使⽤ Metasploit
对⽬标进⾏ Psexec
的时候, payload ⼀定要使⽤正向 bind连接 ,因为目标是服务端,我们是客户端主动去连接服务端
而命名管道又是什么?
0x02 命名管道
管道: 管道是一个共享内存块,可用于通信和数据交换。管道是一个有两端的对象,一个进程向管道写入信息,另一个进程从管道读取信息。创建管道的进程称为管道服务端(只能在本地创建),连接管道的进程称为管道客户端。
特点:
基于smb协议通信,用于在两个进程之间传输数据,包括本地进程和远程进程,其客户端既可以接收数据也可以发送数据,服务器端也是可以接收数据,又可以发送数据。支持单向、双向通信。可以被任意符合权限要求的进程访问,
命名管道可以由 CreateNamedPipeA
创建,接着客户端连接,然后实现读写操作
可以参考以下文档
创建命名网络功能 (winbase.h) - win32 应用程序|微软文档 (microsoft.com)
为什么要使用命名管道来建立网络通信呢?
1 | 因为他走的是smb协议,也是tcp的一种。在Windows中,当尝试绑定一个tcp socket端口建立通信时,defender防火墙会警报,需要用户确认放行才可以,这没有高权限不就直接寄了。而命名管道利用了未加密的smb协议(445端口),在Windows中,通常是默认允许smb协议出入站的,所以命名管道经常被使用来绕过防火墙 |
利用:
1 | 利用模拟客户端功能获取system权限,eg:msf的getsystem功能 |
msf中getsystem
原理:
1 | 官方回答: |
C2通信:
1 | 每个终端将为每个直接连接的子终端提供一个命名管道服务器和一个命名管道客户端。服务器监听管道名称,并等待客户端的连接。客户端连接到特定主机名和管道名称的服务器,从而创建命名管道。管道的每一个终端都有从另一个终端读取和写入的能力,即,将 Payload 运行(注入)后,创建了自定义命名管道(作服务端),等待连接即可,这一过程被称为Bind连接。 |
0x03 复现
首先建立下ipc连接
1 | PsExec.exe -accepteula \\10.10.10.10 -s cmd.exe |
system权限
administrator权限
在不建立ipc连接的前提下
1 | PsExec.exe \\10.10.10.11 -u redteam\administrator -p admin!@#456 -s cmd.exe |
在不想获得交互式shell的情况下,可以直接执行命令
1 | PsExec.exe \\10.10.10.11 -u redteam\administrator -p admin!@#456 -s cmd /c "ipconfig" |
Peace.