等我熬过这一段狼狈,一个人尝尽孤独的滋味,我会笑着与这个世界和解
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文件:
勾选x64
编写注入器,用到核心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注入正常程序的进程
找到everything的进程进行注入,成功上线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