.NET 技术系列 | 通过CreatePipe函数创建管道
2024-12-12 08:35:0 Author: mp.weixin.qq.com(查看原文) 阅读量:3 收藏

01

阅读须知

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面

02

管道介绍

在Windows操作系统中,红队可能会利用CreatePipe函数来创建管道,可以在不同的进程之间传递数据,这些数据可能包括命令、结果或其他敏感信息。由于管道通信是匿名的,并且可以在亲缘关系的进程之间高效地进行,因此成为红队在内网渗透阶段的一种有力工具。

2.1 CreatePipe函数

在.NET环境中,可以通过P/Invoke(平台调用)机制来调用Windows API函数,包括CreatePipe函数。以下是一个使用C#调用CreatePipe函数的示例代码:

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool CreatePipe(
out IntPtr hReadPipe,
out IntPtr hWritePipe,
ref SECURITY_ATTRIBUTES lpPipeAttributes,
uint nSize
);

在这个示例中,我们首先通过P/Invoke导入了CreatePipe函数,随后需要再定义一个SECURITY_ATTRIBUTES结构体,如下代码所示。

[StructLayout(LayoutKind.Sequential)]
private struct SECURITY_ATTRIBUTES
{
public uint nLength;
public IntPtr lpSecurityDescriptor;
public bool bInheritHandle;
}

然后,我们就可以使用CreatePipe函数创建一个管道,并获取了读端和写端的句柄,具体代码如下所示。

IntPtr hStdOutRead;
IntPtr hStdOutWrite;
CreatePipe(out hStdOutRead, out hStdOutWrite, ref saHandles, 0);
SetHandleInformation(hStdOutRead, HANDLE_FLAGS.INHERIT, 0);
hReadPipe指向接收读取端句柄的指针,hWritePipe指向接收写入端句柄的指针。CreatePipe的主要目的是将子进程的标准输出和错误输出重定向到管道,便于父进程可以读取这些输出。
另外,通过直接调用 Windows 系统 kernel32.dll 中的 CreateProcess 函数配合这些管道允许数据在进程和它所创建的子进程之间高效、安全地传递,具体代码如下所示。
siEx.StartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
siEx.StartupInfo.wShowWindow = SW_HIDE;

var ps = new SECURITY_ATTRIBUTES();
var ts = new SECURITY_ATTRIBUTES();
ps.nLength = Marshal.SizeOf(ps);
ts.nLength = Marshal.SizeOf(ts);

bool ret = CreateProcess(null, command, ref ps, ref ts, true, EXTENDED_STARTUPINFO_PRESENT | CREATE_NO_WINDOW, IntPtr.Zero, null, ref siEx, out pInfo);
上述代码,新进程创建后,调用SafeFileHandle封装了 hStdOutRead 句柄,再结合StreamReader从管道读取新进程输出的Stream流数据,再通过do语句循环不断的读取输出数据,直到子进程完全退出管道中无数据为止。

03

工具实现

Sharp4cmd.exe 是一个基于 .NET  CreatePipe 函数 实现的命令行交互工具,它独特之处在于不依赖系统的 cmd.exe 来执行命令,如下图所示。

当输入参数 "whoami /priv" 运行后的效果如下图所示。

命令完全通过直接调用底层 API 实现任意系统命令执行,实现不依赖 cmd.exe 的命令执行工具已经打包在星球,感兴趣的朋友可以自取

04

推荐阅读

从漏洞分析到安全攻防,我们涵盖了.NET安全各个关键方面,为您呈现最新、最全面的.NET安全知识,下面是公众号发布的精华文章集合,推荐大家阅读!




05

欢迎加入.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安全领域的最前沿技术,更是每一位网络安全爱好者不可或缺的实战利器。


文章来源: https://mp.weixin.qq.com/s?__biz=MzUyOTc3NTQ5MA==&mid=2247497429&idx=1&sn=317426e2ee2094bfdb33b11d461990be&chksm=fa595838cd2ed12e5519e89226fe115b474987fec9d093fecb8b332a69077a7c05d4684fa35e&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh