0x01 PSexec
PsExec 可以算是一个轻量级的 telnet 替代工具,无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与命令控制台几乎相同的实时交互性。PsExec 最强大的功能就是在远程系统和远程支持工具(如 ipconfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。
一般使用 psexec 用来横向移动,可以用来控制主机,条件是拥有被控主机的账户和密码。
psexec 工具的使用:
psexec.exe \目标IP –u administrator –p password
建立 PSexec 的过程:
1.通过ipc$连接,释放psexecsvc.exe到目标
2.通过服务管理SCManager远程创建psexecsvc服务,并启动服务
3.客户端连接执行命令,服务端启动相应的程序并执行回显数据
4.运行完后删除服务
!!!会产生大量日志,很容易被溯源
5.在域环境测试时发现,⾮域⽤户⽆法利⽤内存中的票据使⽤ PSexec 功能,只能依靠账号和密码进⾏传递
登录认证方式是 NTLM 认证,通过 ipc(进程间通信)连接后,登录目标主机,连接 admin$ 通道,向目标主机写入 psexecsvc.exe
文件到 C:WindowsAppendData(或者WirteData
目录下 ,接着使用 IPC 命名管道调用 svcctl 接口,用于开启远程服务 psexecsvc.exe
( 用于在其他系统中远程执行命令), 最终创建服务后会建立4个命名管道。
因此,在使⽤ Metasploit
对⽬标进⾏ Psexec
的时候, payload ⼀定要使⽤正向 bind 连接 ,因为目标是服务端,我们是客户端主动去连接服务端
而命名管道又是什么?
0x02 命名管道
管道:管道是一个共享内存块,可用于通信和数据交换。管道是一个有两端的对象,一个进程向管道写入信息,另一个进程从管道读取信息。创建管道的进程称为管道服务端(只能在本地创建),连接管道的进程称为管道客户端。
特点:
基于 smb 协议通信,用于在两个进程之间传输数据,包括本地进程和远程进程,其客户端既可以接收数据也可以发送数据,服务器端也是可以接收数据,又可以发送数据。支持单向、双向通信。可以被任意符合权限要求的进程访问,
命名管道可以由 CreateNamedPipeA
创建,接着客户端连接,然后实现读写操作
可以参考以下文档
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createnamedpipea
为什么要使用命名管道来建立网络通信呢?
因为他走的是smb协议,也是tcp的一种。在Windows中,当尝试绑定一个tcp socket端口建立通信时,defender防火墙会警报,需要用户确认放行才可以,这没有高权限不就直接寄了。而命名管道利用了未加密的smb协议(445端口),在Windows中,通常是默认允许smb协议出入站的,所以命名管道经常被使用来绕过防火墙
利用:
利用模拟客户端功能获取system权限,eg:msf的getsystem功能
作为c2通信
本地权限提升
msf 中 getsystem
原理:
官方回答:
creates a named pipe from Meterpreter. It also creates and runs a service that runs cmd.exe /c echo “some data” >.pipe[random pipe here]. When the spawned cmd.exe connects to Meterpreter’s named pipe, Meterpreter has the opportunity to impersonate that security context. Impersonation of clients is a named pipes feature. The context of the service is SYSTEM, so when you impersonate it, you become SYSTEM.
msf 会创建一个命名管道,然后创建一个服务去运行cmd.exe /c echo “some data” >\.pipe[random pipe here],当 cmd 连接到 Meterpreter 的命名管道的时候,因为服务是 system 权限,msf 也就得到了一个 system 的 shell
C2通信:
每个终端将为每个直接连接的子终端提供一个命名管道服务器和一个命名管道客户端。服务器监听管道名称,并等待客户端的连接。客户端连接到特定主机名和管道名称的服务器,从而创建命名管道。管道的每一个终端都有从另一个终端读取和写入的能力,即,将 Payload 运行(注入)后,创建了自定义命名管道(作服务端),等待连接即可,这一过程被称为Bind连接。
这种连接方式很常见,如 Metasploit 和 Cobalt Strike 都有类似功能。
0x03 复现
首先建立下 ipc 连接
PsExec.exe -accepteula \10.10.10.10 -s cmd.exe
# -accepteula 第⼀次运⾏ PsExec 会弹出确认框,使⽤该参数就不会弹出确认框
# -s以System权限运⾏远程进程,获得⼀个System权限的交互式Shell,如果不⽤这个参数,那么会获得⼀个administrator权限的shell
system 权限
administrator 权限
在不建立 ipc 连接的前提下
PsExec.exe \10.10.10.11 -u redteamadministrator -p admin!@#456 -s cmd.exe
在不想获得交互式 shell 的情况下,可以直接执行命令
PsExec.exe \10.10.10.11 -u redteamadministrator -p admin!@#456 -s cmd /c "ipconfig"
Peace.
原文始发于微信公众号(海狮安全团队):PSexec的原理分析
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论