浅谈红队攻防之道-DLL注入上线cs

admin 2024年6月29日01:53:34评论4 views字数 2547阅读8分29秒阅读模式
等我熬过这一段狼狈,一个人尝尽孤独的滋味,我会笑着与这个世界和解


0x1 DLL注入概念

DLL注入(DLL Injection)是一种计算机编程技术,它可以强行使另一个进程加载一个动态链接库(DLL)以在其地址空间内运行指定代码。常见用途是改变原先程序的行为,实现程序作者本未设计或可预期的结果。比如用于hook系统调用、读取密码框内容。

将任意代码注入任意进程的程序被称为DLL注入器。

通俗来说,DLL注入的目标对象是某一进程,然后在该进程的地址空间上注入DLL中的代码并且执行,主要是起到了动态修改程序行为的作用。合理地来说,也可用于动态拓展程序功能,即起到增强作用。

0x2 远程线程注入步骤

本次介绍的DLL注入方式是远程线程注入(CreateRemoteThread)

步骤如下:

1.打开目标进程句柄

2.开辟目标进程空间,用于存放需要注入的DLL文件路径

3.通过CreateRemoteThread函数调用LoadLibrary,传入DLL文件路径的地址作为参数,进行远程动态调用。

技术的核心原理:

注入器的进程的内存空间是没办法让目标进程访问到的,而核心调用DLL的基础原理是程序执行LoadLibrary函数去加载指定的DLL,所以必须要在目标进程空间存放DLL的文件地址(这样目标进程才能调用到),由于kernel.dll加载的地址在所有进程都是一样的,且LoadLibrary是其导出模块,其RVA地址是固定在PE结构的,所以注入器获取到的API地址是一样,可作用于目标进程,这样就可以通过远程执行目标进程的新线程,然后线程执行LoadLibrary函数加载指定DLL实现DLL注入。

先用cs生成一个木马DLL文件:

浅谈红队攻防之道-DLL注入上线cs

勾选x64

浅谈红队攻防之道-DLL注入上线cs

编写注入器,用到核心API函数如下:

OpenProcess

HANDLE OpenProcess(
DWORD dwDesiredAccess, //PROCESS_ALL_ACCESS 进程控制的权限
BOOL bInheritHandle, //false, 句柄是否可以被继承
DWORD dwProcessId //目标进程pid,某些系统进程会出错
);

VirtualAllocEx

LPVOID VirtualAllocEx(
HANDLE hProcess, //目标进程句柄 PROCESS_VM_OPERATION
LPVOID lpAddress, //NULL,自动分配空间地址
SIZE_T dwSize, //单位byte, 分配的空间区域大小
DWORD flAllocationType, //MEM_COMMIT 内存类型
DWORD flProtect //PAGE_READWRITE, 内存区域权限可读可写
);

WriteProcessMemory

BOOL WriteProcessMemory(
HANDLE hProcess, //目标进程句柄 PROCESS_VM_WRITE and PROCESS_VM_OPERATION
LPVOID lpBaseAddress, //写入内容的基地址
LPCVOID lpBuffer, //指向写入数据的指针
SIZE_T nSize, //写入数据的大小
SIZE_T *lpNumberOfBytesWritten //NULL,不记录写入字节数目
);

CreateRemoteThread

HANDLE CreateRemoteThread(
HANDLE                 hProcess, //目标句柄
LPSECURITY_ATTRIBUTES lpThreadAttributes,//NULL,默认描述符
SIZE_T                 dwStackSize, //0,使用默认栈大小
LPTHREAD_START_ROUTINE lpStartAddress,// 指针指向远程调用函数的地址
LPVOID                 lpParameter, //指针指向参数地址
DWORD                 dwCreationFlags,//0,立刻执行
LPDWORD               lpThreadId //NULL,不返回验证信息
);

GetModuleHandle

HMODULE GetModuleHandleA(
LPCSTR lpModuleName //kernel32.dll 模块名称
);

GetProcAddress

FARPROC GetProcAddress(
HMODULE hModule, //模块句柄
LPCSTR lpProcName //导出函数名称
);
0x3 远程线程注入实现

编译生成

浅谈红队攻防之道-DLL注入上线cs

将恶意DLL注入正常程序的进程

浅谈红队攻防之道-DLL注入上线cs

找到everything的进程进行注入,成功上线cs

浅谈红队攻防之道-DLL注入上线cs

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。


CSDN:
https://rdyx0.blog.csdn.net/

公众号:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect

博客:
https://rdyx0.github.io/

先知社区:
https://xz.aliyun.com/u/37846

SecIN:
https://www.sec-in.com/author/3097

FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85



原文始发于微信公众号(儒道易行):浅谈红队攻防之道-DLL注入上线cs

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月29日01:53:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅谈红队攻防之道-DLL注入上线cshttps://cn-sec.com/archives/2897827.html

发表评论

匿名网友 填写信息