01
阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02
基本介绍
Sharp4SessionExec.exe 是一款用于通过特定身份的会话(Session)状态执行命令的工具。它可以在 Windows 系统中切换到不同的会话,并以该会话的权限执行命令,从而在内网渗透测试或红队活动中实现权限降级操作。
03
使用方法
值得注意的是,Sharp4SessionExec工具需要以 SYSTEM 权限运行,才能切换到目标会话并执行命令。这使其成为渗透测试中一种非常有效的工具,尤其适用于场景中需要模拟不同权限级别用户的操作。常见用法示例如下所示。
.Sharp4SessionExec.exe 1 "whoami;hostname"
在这个示例中,工具将在 ID 为 1 的会话中执行 whoami;hostname 命令,显示当前用户及计算机名称。使用该工具的过程中,系统管理员可以根据当前环境,选择不同的会话 ID 和命令。
上图,通过会话 ID 切换到指定用户会话,并且支持PowerShell 执行任意命令,并且输出执行结果。
04
原理解析
以下是工具中的核心实现代码及其详细解释。我们将逐步剖析该工具如何在指定会话中执行命令。首先,工具通过命令行传入的会话 ID 来确定要切换到哪个会话
int num;
bool flag3 = int.TryParse(text, out num);
if (flag3)
{
bool flag4 = num == Process.GetCurrentProcess().SessionId;
if (flag4)
{
Console.WriteLine("Cannot use the current session ID.");
}
else
{
Program.ExecuteCommandInSession(num, command, noOutput);
}
}
else
{
Console.WriteLine("Invalid Session ID");
}
如果指定 ID 有效且不与当前会话相同,则调用 ExecuteCommandInSession 方法在目标会话中执行命令。接下来是 ExecuteCommandInSession 方法的详细实现,具体代码如下所示。
IntPtr intPtr;
bool flag = !Program.WTSQueryUserToken(sessionId, out intPtr);
if (flag)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
此处,工具使用 WTSQueryUserToken API 来获取指定会话的用户令牌。如果无法获取该令牌,程序会抛出异常。
Program.SECURITY_ATTRIBUTES structure = default(Program.SECURITY_ATTRIBUTES);
structure.nLength = Marshal.SizeOf<Program.SECURITY_ATTRIBUTES>(structure);
structure.bInheritHandle = true;
IntPtr intPtr2, intPtr3;
Program.CreatePipe(out intPtr2, out intPtr3, ref structure, 0);
IntPtr intPtr4, intPtr5;
Program.CreatePipe(out intPtr4, out intPtr5, ref structure, 0);
随后,工具通过 STARTUPINFO 结构体配置进程的启动信息。这里将管道句柄绑定到 hStdOutput 和 hStdError,确保 PowerShell 的输出和错误可以通过管道捕获。
最后,通过 CreateProcessAsUser API,以指定会话的用户身份启动 PowerShell 进程,并执行传入的命令。命令通过 -Command 参数传递给 PowerShell。
Program.PROCESS_INFORMATION process_INFORMATION = default(Program.PROCESS_INFORMATION);
string lpApplicationName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "WindowsPowerShell", "v1.0", "powershell.exe");
string lpCommandLine = "-Command "" + command + """;
uint dwCreationFlags = NoOutput ? 134217728U : 0U;
bool flag2 = !Program.CreateProcessAsUser(intPtr, lpApplicationName, lpCommandLine, ref structure, ref structure, true, dwCreationFlags, IntPtr.Zero, null, ref structure2, out process_INFORMATION);
综上,Sharp4SessionExec.exe 主要用于内网渗透场景中的权限管理和会话切换。在拥有高权限(例如 SYSTEM 权限)时,通过切换到普通用户会话执行命令,以模拟低权限用户操作,进行进一步的渗透活动。工具已经打包在星球,感兴趣的朋友可以加入自取。
05
推荐阅读
从漏洞分析到安全攻防,我们涵盖了.NET安全各个关键方面,为您呈现最新、最全面的.NET安全知识,下面是公众号发布的精华文章集合,推荐大家阅读!
06
欢迎加入.NET安全星球
为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。 星球门票后期价格随着内容和质量的不断沉淀会适当提高,因此越早加入越好!
目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。
星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。
我们还有一个会员专属的内部星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。
为了助力大家在2024国家级hvv演练中脱颖而出,我们特别整理出了一套涵盖dotNet安全矩阵星球的八大.NET相关方向工具集。
.NET 免杀WebShell
.NET 反序列化漏洞
.NET 安全防御绕过
.NET 内网信息收集
.NET 本地权限提升
.NET 内网横向移动
.NET 目标权限维持
.NET 数据外发传输
这些阶段所涉及的工具集不仅代表了当前.NET安全领域的最前沿技术,更是每一位网络安全爱好者不可或缺的实战利器。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...