.NET内网实战:通过傀儡进程执行Shellcode

01阅读须知

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

02基本介绍

图片

03编码实现

在 Windows 操作系统中,简单来说,傀儡进程就是攻击者通过一系列技术操作,将原本正常的进程转化为执行恶意任务的傀儡。通常借助ZwQueryInformationProcess、ReadProcessMemory和ResumeThread等API函数来实现这个技术。

3.1 相关函数

ZwQueryInformationProcess函数用于获取指定进程的信息,如进程ID、父进程信息等,ReadProcessMemory函数用于从指定进程的内存中读取数据,ResumeThread函数表示当暂停计数递减至零时,恢复线程的执行。在.NET平台下调用该函数的代码如下所示。

DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out IntPtr lpNumberOfBytesRead);

3.2 实现傀儡进程

要成功构建傀儡进程,关键在于两点:首先是选择合适时机向内存写入Shellcode,其次则是精准地修改进程的执行流程。在.NET环境中调用相关函数的核心代码示例如下。

public PROCESS_INFORMATION StartProcess(string path)
{
STARTUPINFO startInfo = new STARTUPINFO();
PROCESS_INFORMATION procInfo = new PROCESS_INFORMATION();
uint flags = CreateSuspended | DetachedProcess | CreateNoWindow;
if (!CreateProcess((IntPtr)0, path, (IntPtr)0, (IntPtr)0, true, flags, (IntPtr)0, (IntPtr)0,  ref  startInfo, out procInfo))
throw new SystemException("[x] 创建进程失败!");
return procInfo;
}

首先通过调用CreateProcess函数来创建一个新的进程,并设置处于挂起状态,随后,读取该进程中特定模块的内存地址。接着,使用ZwCreateSection函数来创建一个进程间共享的内存区域,这个区域允许不同的进程间共享数据。

public bool CreateSection(uint size)
{
    LARGE_INTEGER liVal = new LARGE_INTEGER();
    size_ = round_to_page(size);
    liVal.LowPart = size_;
    var status = ZwCreateSection(ref section_, GenericAll, (IntPtr)0, ref liVal, PageReadWriteExecute, SecCommit, (IntPtr)0);
    return nt_success(status);
}

最终,调用ResumeThread函数,激活并恢复主线程的执行,使进程按照预设的包含Shellcode的代码运行执行。

图片

综上,傀儡进程是通过篡改某进程的内存数据来实现的,具体做法是在内存中写入Shellcode,并操纵进程的执行流程,使其转而执行恶意的Shellcode。这样一来,虽然进程的外壳看似未变,但内部执行的操作却已完全替换。想要了解更多内网安全防御绕过方向的文章,可以移步订阅小报童《.NET 内网实战攻防》电子报刊。

04

欢迎加入.NET 电子报刊

我们的小报童电子报刊【.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、付费专栏及课程。

余额充值