01. 管道访问配置
在 .NET 中通常使用 PipeSecurity 类为管道设置访问控制规则,用于管理命名管道的访问控制列表(ACL)。通过这个类,可以为命名管道配置精细化的安全权限,从而控制哪些用户或用户组能够访问管道,以及他们可以执行的操作。
最常用的方法是 AddAccessRule,用于向命名管道的访问控制列表中添加一条新的访问规则。
以下代码展示了如何使用 PipeSecurity 和 PipeAccessRule 配置管道的访问权限。
using System;
using System.IO.Pipes;
using System.Security.AccessControl;
class Program
{
static void Main()
{
PipeSecurity pipeSecurity = new PipeSecurity();
pipeSecurity.AddAccessRule(new PipeAccessRule(
"Everyone",
PipeAccessRights.ReadWrite,
AccessControlType.Allow));
using (NamedPipeServerStream namedPipeServerStream = new NamedPipeServerStream(
"TestPipe",
PipeDirection.InOut,
1,
PipeTransmissionMode.Message,
PipeOptions.None,
128,
128,
pipeSecurity))
{
Console.WriteLine("管道已创建,等待客户端连接...");
namedPipeServerStream.WaitForConnection();
Console.WriteLine("客户端已连接!");
}
}
}
何使用 PipeSecurity 和 PipeAccessRule不过,在生产环境中,应限制对管道的访问,仅允许特定用户组使用。例如,可以使用管理员组。
pipeSecurity.AddAccessRule(new PipeAccessRule("Administrators", PipeAccessRights.FullControl, AccessControlType.Allow));
02. 命名管道服务器
NamedPipeServerStream 是 .NET 提供的命名管道服务器端实现类,用于实现进程间通信。允许创建一个命名管道服务器,以便客户端通过管道名称连接,并与服务器进行数据交换。
命名管道是双向通信的一种机制,可以用于同一台计算机上的不同进程之间通信,或者通过网络与远程计算机通信,具体使用代码如下所示。
public NamedPipeServerStream(
string pipeName,
PipeDirection direction,
int maxNumberOfServerInstances = NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode transmissionMode = PipeTransmissionMode.Byte,
PipeOptions options = PipeOptions.None,
int inBufferSize = 0,
int outBufferSize = 0,
PipeSecurity pipeSecurity = null
)
上述代码中,pipeName 表示管道名称,客户端需要通过该名称连接。direction 参数表示管道的方向,可以是 In(只读)、Out(只写)或 InOut(读写)。
具体实际的用法,可以参考如下代码展示了如何创建一个简单的命名管道服务器。
using System;
using System.IO;
using System.IO.Pipes;
using System.Text;
class Program
{
static void Main()
{
string pipeName = "TestPipe";
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream(
pipeName,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message,
PipeOptions.Asynchronous))
{
Console.WriteLine($"管道已创建: {pipeName}");
Console.WriteLine("等待客户端连接...");
pipeServer.WaitForConnection();
Console.WriteLine("客户端已连接");
byte[] message = Encoding.UTF8.GetBytes("Hello from server");
pipeServer.Write(message, 0, message.Length);
Console.WriteLine("消息已发送");
byte[] buffer = new byte[256];
int bytesRead = pipeServer.Read(buffer, 0, buffer.Length);
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"收到客户端消息: {receivedMessage}");
}
}
}
03. 工具实战操作
Sharp4Tokenvator 便是这样一款基于命令管道实现的 Windows 令牌访问工具,主要用于模拟低权限用户到高权限用户。通过工具,用户可以借助系统中高权限进程的令牌,创建新的进程并以高权限运行,从而实现权限提升。
3.1 工具用法
以下是使用 Sharp4Tokenvator.exe 工具的基本步骤,使用工具提供的Steal_Token 命令接口,利用目标进程的令牌模拟高权限用户并执行命令。
Steal_Token /Process:3576 /Command:cmd.exe
其中,3576为目标进程PID,如下图所示。
综上,Sharp4Tokenvator是一个强大的令牌操作工具,其基于.NET的实现使其在Windows系统中具有高度的灵活性和适用性
04.星球学习资源
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。
.NET 免杀WebShell
.NET 反序列化漏洞
.NET 安全防御绕过
.NET 内网信息收集
.NET 本地权限提升
.NET 内网横向移动
.NET 目标权限维持
.NET 数据外发传输
这些阶段所涉及的工具集不仅代表了当前.NET安全领域的最前沿技术,更是每一位网络安全爱好者不可或缺的实战利器。
文章涉及的工具已打包,请加/入/后下/载:https://wx.zsxq.com/group/51121224455454