挖掘注入线程
简介 在红蓝对抗中,进程注入是攻击者维持访问、绕过防御的经典手段。本文通过一个完整的实验——从向 explorer.exe 注入 shellcode 获取反向 Shell,到使用 PowerShell 脚本与 WinDBG 进行交叉检测——逐层揭开线程注入的攻防细节,并深入解析检测工具背后的内存取证逻辑。 注入 首先,我们使用课程中编写的注入器程序,将一段用于反弹 Shell 的 shellcode 注入到 notepad.exe 或 exploer.exe 进程中。选择 explorer.exe 是因为它通常是用户态下长期运行且拥有合法网络连接权限的进程,注入后不易被察觉。 注入器内部会执行以下关键步骤: 打开目标进程:通过 OpenProcess 获取 notepad.exe 的句柄,申请必要的访问权限(如 PROCESS_VM_WRITE、PROCESS_CREATE_THREAD)。 分配内存:在目标进程虚拟地址空间内调用VirtualAllocEx,申请一块可读、可写、可执行(RWX)的内存区域,大小与 shellcode 匹配。 写入 Shellcode:使用WriteProcessMemory将准备好的反弹 Shell 字节码拷贝到新分配的内存中。 启动远程线程:调用CreateRemoteThread或RtlCreateUserThread等 API,让目标进程执行这片内存中的代码。 执行注入器后,我们的受害者主机会立即显示弹窗信息,证明 shellcode 已在 notepad.exe 的上下文中成功运行。 注入检测 攻击发生后,我们切换到蓝队视角,使用开源 PowerShell 脚本 Get-InjectedThreads.ps1(来自 NetSPI)对系统内所有进程的线程进行扫描。 下载地址: https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2 $a = Get-InjectedThread; $a 脚本遍历当前系统中的每一个进程,并检查其内部的所有线程。很快,我们捕捉到一个异常项: 从输出可以明确看到,notepad…