专栏名称: 衡阳信安
船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!
目录
51好读  ›  专栏  ›  衡阳信安

深入了解Psexec与SMBexec

衡阳信安  · 公众号  ·  · 2024-08-23 00:00

正文

了解Psexec

什么是Psexec

PsExec 是由 Mark Russinovich 创建的 Sysinternals Suite中包含的工具。最初,它旨在作为系统管理员的运维工具,以便可以通过在远程主机上运行命令来执行维护任务。 PsExec 可以算是一个轻量级的 telnet 替代工具,它使无需手动安装客户端软件即可执行其他系统上的命令,并且可以获得与命令控制台几乎相同的实时交互性。PsExec最强大的功能就是在远程系统和远程支持工具(如 ipconfig、whoami)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。

利用方式

官方Pstools-psexec

针对远程建立连接的方式有两种:

一种先建立IPC通道连接,然后直接使用,操作如下:

# 先net use 连接上IPC
net use \\192.168.0.1\ipc$ "password123!@#" /user:alibaba

# 确认是否进入IPC会话
.\PsExec64.exe \\ip cmd.exe 弹cmd

另一种时在psexec的参数中指定账户密码 操作如下:

.\PsExec64.exe \\192.168.0.1 –u administrator –p password

impacket-psexec

#非官方自带-参考 impacket 工具包使用,操作简单,容易被杀
PsExec.exe -hashes :NTHASH [./][email protected] #工作组
PsExec.exe -hashes :NTHASH domain/[email protected] #域

工作原理

它的背后工作流程:

  • PSEXESVC.exe 上传到 ADMIN$ (指向 /admin$/system32/PSEXESVC.EXE )共享文件夹内,也可能时其它共享文件夹内的随机可执行文件名称。如:存在exchange时共享文件夹为:address共享。

  • 远程创建用于运行 PSEXESVC.exe 的服务;

  • 远程启动服务。

PSEXESVC 服务充当一个重定向器。它在远程系统上运行指定的可执行文件(示例中的是 cmd.exe )。同时,它通过主机之间来重定向进程的输入/输出(利用命名管道)。

详细过程

  • 使用提供的凭证,通过 SMB 会话 进行身份验证。

  • 通过 SMB 访问默认共享文件夹 ADMIN$ ,并上载 PSEXESVC.exe

  • 打开 \\RDC\pipe\svcctl 的句柄,与 服务控制管理器(SCM) 进行通信,这使得我们能够远程创建/启动服务。此时使用的是 SVCCTL 服务,通过对 SVCCTL服务 DCE/RPC 调用来启动 PsExec ;

  • 使用上传的 PSEXESVC.exe 作为服务二进制文件,调用 CreateService 函数

  • 调用 StartServices 函数

  • 正如下面的 Wireshark 所捕获到的数据,它是创建了命名管道来重定向 stdin(输入)、stdout(输出)、stderr(输出)。

总共创建了4个命名管道,一个用于服务本身,另外的管道用于重定向进程的 stdin、stdout、stderr。

利用条件

1、远程机器的 139 或 445 端口需要开启状态,即 SMB;
2、明文密码或者 NTLM 哈希;
3、具备将文件写入共享文件夹的权限;
4、能够在远程机器上创建服务:SC_MANAGER_CREATE_SERVICE (访问掩码:0x0002);
5、能够启动所创建的服务:SERVICE_QUERY_STATUS(访问掩码:0x0004)+ SERVICE_START(访问掩码:0x0010)

注意

NTLM != NTLM v1/v2 ;
NTFS 权限 != 共享权限;
如果使用的是 Sysinternal 的 PsExec,它是会将 PSEXESVC.exe 复制到 ADMIN$,因此是具备访问它的权限;
PSEXESVC 服务将会安装在远程系统中,此时将会生成 Event 4697、7045 这2种事件日志;
PsExec 2.1版本之后,不再是明文传输。

在多数情况下,即使账号出现泄漏情况,使用 PsExec , 也无法完成第4和第5点的要求,因为账号不是特权账号(RID500、域管理员)

日志分析

psexec在完成一次正常的命令执行时,产生的日志。

psexec.exe \xxx.xxx.xxx.xxx -u username -p password -s cmd
# 返回一个指定PC的system权限的交互式shell

在执行上述命令的一瞬间,目标机器上事件日志中出现了如下日志记录:

系统日志

安全日志

7036日志信息提示如下:

PSEXESVC 服务处于正在运行状态。

7045日志信息提示如下:

服务已安装在系统中。
服务名称: PSEXESVC
服务文件名: %SystemRoot%\PSEXESVC.exe
服务类型: 用户模式服务
服务启动类型: 按需启动
服务帐户: LocalSystem

4697日志中关键日志信息:

ServiceFileName:%SystemRoot%\PSEXESVC.exe

4624中日志中提示登录帐户为:

TargetUserName:Administrator

5145日志中关键日志信息:

使用者:
安全 ID: TESTDOMAIN\Administrator
帐户名: Administrator
帐户域: TESTDOMAIN
登录 ID: 0x25A393
网络信息:
对象类型: File
源地址: 192.168.0.104
源端口: 49165
共享信息:
共享名称: \*\ADMIN$
共享路径: ??\C:\Windows
相对目标名称: PSEXESVC.exe

综述,执行该程序一定会出现如下日志:

系统日志
7045
7036
安全日志
4697
4624
5145

注意:日志的产生需要开启审核策略

  • 7045、7036此类系统日志无需设置,默认开启

  • 4697、4624、5145此类安全审核日志需要自定义设置高级审核策略。

  • 4697:高级审核策略配置->审核策略->系统->审核安全系统扩展->成功

  • 4624:高级审核策略配置->审核策略->登录\注销->审核登录->成功

  • 5145:高级审核策略配置->审核策略->对象访问->审核详细的文件共享->成功和失败

了解SMBexec

SMBExec 与 PSExec 非常相似,但是,SMBExec 不会将二进制文件放入磁盘。SMBExec 利用一个批处理文件和一个临时文件来执行和转发消息。与 PSExec 一样,SMBExec 通过 SMB 协议 (445/TCP) 发送输入并接收输出。

利用方式

## 工作组环境下
# 明文密码
.\smbexec.exe 用户名:密码@ip
.\smbexec.exe admin:[email protected]

# hash
.\smbexec.exe -hashes :NTLMhash 用户名@ip
.\smbexec.exe -hashes :209c6174da490caeb422f3fa5a7ae634 [email protected]

# 在域环境下
# 明文密码
.\smbexec.exe 域名/用户名:密码@ip

# hash
.\smbexec.exe -hashes :NTLMhash 域名/用户名@ip

详细过程

SMBExec 是如何工作的。使用 SMBExec 建立到远程机器的交互式连接后,执行Notepad.exe运行一个记事本,因为记事本进程打开后不会中断。







请到「今天看啥」查看全文