该项目是一个概念验证代码,用于在本地命名管道用户模拟中使用传递哈希(Pass-the-Hash)进行身份验证。另有一篇博客文章进行解释:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
它基于项目 Invoke-SMBExec.ps1 和 RoguePotato 的代码实现。
过去我曾在某些 Offensive Security 项目中遇到这样的情况:我已经拥有一个 低权限 用户账户的 NTLM 哈希,需要在该用户账户下获取当前已沦陷系统的 shell——但现有的公共工具无法实现。假设这种情况还面临两个事实:NTLM 哈希无法破解,且 受害者用户没有进程可以注入 shellcode 或迁移进去。这对某些人来说可能听起来像是一个荒谬的边缘情况。但我确实多次经历过这种情况。不止一次在项目中,我花费大量时间寻找适用于这种特定情况的正确工具/技术。
我对此工具/技术的个人目标如下:
低权限账户——根据项目目标,可能需要以特定用户(如 CEO、HR 账户、SAP 管理员等)访问系统遗憾的是,被模拟的用户不允许进行网络身份验证,因为新进程使用的是受限制的模拟令牌。因此,你只能将此技术用于本地操作,以另一个用户身份执行操作。
有两种使用该技术的方法。你可以编译 \Resources\PipeServerImpersonate.sln,将可执行文件放到远程主机上,然后通过 \Resources\Invoke-NamedPipePTH.ps1 连接到命名管道:
或者你可以使用独立脚本以保持在内存中:
如果你不想释放二进制文件,只需传递原生 Windows 二进制文件(如 Powershell)的参数:
Invoke-ImpersonateUser-PTH -Username USERNAME -Hash NTLMHASH -Domain DOMAIN -PipeName mypipe -binary "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -argument "-nop -w 1 -sta -enc BASEBLOB"