.NET 技术系列 | 通过CreatePipe函数创建管道

server/2024/12/17 22:03:41/

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" 运行后的效果如下图所示。

04.NET安全星球

dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

图片

图片

图片

星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。

图片

    我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

.NET 免杀WebShell
.NET 反序列化漏洞
.NET 安全防御绕过
.NET 内网信息收集
.NET 本地权限提升
.NET 内网横向移动
.NET 目标权限维持
.NET 数据外发传输

这些阶段所涉及的工具集不仅代表了当前.NET安全领域的最前沿技术,更是每一位网络安全爱好者不可或缺的实战利器。

文章涉及的工具已打包,请加/入/后下/载:https://wx.zsxq.com/group/51121224455454


http://www.ppmy.cn/server/151008.html

相关文章

数据库实验四(SQL 数据库更新操作与完整性约束实践)

一、实验目的 本次实验主要目的包括: 熟练掌握使用 SQL 语句实现更新操作的方法,能够对数据库中的数据进行准确修改。深刻认识完整性约束对数据库的重要性,理解其在维护数据准确性、一致性和可靠性方面的关键作用。精通在 MySQL 中对完整性约…

【Python】paddleocr快速使用及参数详解

文章目录 1. paddleocr快速使用1.1 使用默认模型路径1.2 设定模型路径 2. PaddleOCR其他参数介绍PaddleOCR模型推理参数解释 其它相关推荐: PaddleOCR模型训练及使用详细教程 官方网址:https://github.com/PaddlePaddle/PaddleOCR PaddleOCR是基于Paddle…

Java从入门到工作2 - IDEA

2.1、项目启动 从git获取到项目代码后,用idea打开。 安装依赖完成Marven/JDK等配置检查数据库配置启动相关服务 安装依赖 如果个别依赖从私服下载不了,可以去maven官网下载补充。 如果run时提示程序包xx不存在,在项目目录右键Marven->Re…

从模型到视图:如何用 .NET Core MVC 构建完整 Web 应用

MVC模式自出现以来便成为了 Web 开发的基石,它通过将数据、业务逻辑与用户界面分离,使得应用更加清晰易于维护,然而随着前端技术的飞速发展和框架如 React、Vue、Angular 等的崛起,许多开发者开始倾向于前后端分离的方式&#xff…

elk部署与实战案例

**ELK Stack** 是一个非常强大的日志处理和分析平台,由 **Elasticsearch**、**Logstash** 和 **Kibana** 三个组件组成。它被广泛应用于日志收集、搜索、分析和可视化。ELK 可以处理大量数据,并帮助用户从中提取有价值的信息。以下是一个从部署到实际应用…

AirSim 无人机利用姿态文件获取图片

之前我们得到了随机姿态下无人机获得的不同场景图像,我们输出了无人机随机的姿态信息到poses.csv文件中,现在我们想要复现我们的结果,就要利用我们之前输出的姿态文件来获取图像。 无人机利用姿态文件获取图片的代码如下: impor…

后端向前端传值

如果在后端使用Spring MVC(或类似的框架)并通过model.addAttribute(“serverIp”, serverConfig.getIp())将服务器IP地址传递给前端视图,那么在前端视图中(通常是HTML模板,如Thymeleaf、JSP等),…

分享两个爬虫练习网站+一个python游戏网站

目录 第一个网站第二个Python游戏网站 第一个网站 网站一 第二个 网站二 Python游戏网站 网站三