SessionExec 允许您在 Windows 系统上的其他会话中执行指定的命令,可以针对特定会话 ID 或所有会话,并可以选择抑制命令输出。
该工具的灵感来自于 James Forshaw 很久以前发布的 EOP COM Session Moniker 漏洞利用代码。
SessionExec 利用 Windows API 来查询会话信息并在这些会话中创建进程。
从 Visual Studio 的构建工具运行以下命令编译 SessionExec.cs
csc /reference:System.Runtime.InteropServices.dll /reference:System.Runtime.InteropServices.RuntimeInformation.dll SessionExec.cs /out:SessionExec.exe
或者您可以使用Invoke-SessionExec.ps1
,它是相同的脚本,但使用反射加载方法在内存中运行。
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Leo4j/SessionExec/main/Invoke-SessionExec.ps1')
您还可以在此处找到由 The-Viper-One 编码的该工具的纯 powershell 实现
SessionExec.exe[/NoOutput]
Invoke-SessionExec[/NoOutput]
使用quser
命令检查哪些会话可用。然后在特定会话或All
会话上运行命令。
如果您发现自己是网络中一台或多台计算机上的本地管理员,并且这些目标上有用户会话,则可以一起使用 SessionExec 和 Find-LocalAdminAccess 来检查这些用户中是否有任何用户对网络中的其他计算机具有本地管理员访问权限网络。
如果是这样,您可以为在这些计算机上进行会话的用户重复该过程。从理论上讲,这一系列操作可能会导致整个域的泄露。
此外,您可以使用 Amnesiac 获取 shell、捕获 NTLMv2 哈希值并中继它们、获取 TGT 等等,所有这些都以自动化的方式进行。
我将把这个概念实现到 Amnesiac 中,并且我们正在与 The-Viper-One 一起努力将它实现到 PsMapExec 中。
目前,这是一个概念验证 (PoC):