本地进程DLL注入

本地进程DLL注入

0X00 前言DLL注入,是向一个正在运行的进程注入代码的过程。我们注入的代码以DLL的形式存在。本文将DLL作为payload的用法,并演示如何在当前进程中加载恶意DLL文件。

0X01 DLL demo这里笔者用一个简单的MessageBox 来作为演示demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#include

#include

#include "pch.h"

void MsgBox() {

MessageBoxA(0,"ring0rl.github.io","blog",MB_OK);

}

BOOL APIENTRY DllMain( HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH: {

MsgBox();

break;

}

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

可以先运行看一下,可见可以成功弹窗

0x02 本地进程注入在诸多Windows API 中我们可以使用 LoadLibrary 来加载DLL。这个函数使用磁盘上的 DLL 路径并将其加载到调用进程的地址空间中,在本文中,笔者采用的调用进程是当前进程。加载 DLL 将运行其入口点,从而运行MsgBox函数 ,使其运行我们的dll。

下面的代码将 DLL 的名称作为命令行参数,并使用LoadLibrary加载它 。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#include

#include

int main(int argc,char* argv[]) {

if (argc < 2) {

printf("[!] 请输入要注入的dll");

return -1;

}

printf("[+] 正在注入 \"%s\" 当前进程的PID为%d \n",argv[1],GetCurrentProcessId());

printf("[+] 正在加载dll...\n");

if (LoadLibraryA(argv[1]) == NULL) {

printf("[!] 注入失败 %d\n",GetLastError());

return -1;

}

printf("[+] 注入成功!\n");

return 0;

}

可见注入成功,成功弹窗

0x03 结果验证要进一步验证我们的DLL是否已加载到进程中,我们可以验证当前进程的模块列表来检索我们的DLL。

0x04 小结本文介绍了本地进程注入DLL的方法,并通过代码加以实现,有本地进程注入必然有远程进程注入,后续笔者将接着讨论远程进程注入DLL。

注:本文仅用于安全研究和学习之用

相关推荐

2024年常用的APP设计网站推荐
beat365官网下载

2024年常用的APP设计网站推荐

📅 07-02 👁️ 6338
雪地奔驰中哪些车好用?最佳车辆推荐
365bet官方贴吧

雪地奔驰中哪些车好用?最佳车辆推荐

📅 09-05 👁️ 975
穿越火线夜玫瑰值不值得买?深度体验及玩家评价
365bet体育在线网投

穿越火线夜玫瑰值不值得买?深度体验及玩家评价

📅 08-15 👁️ 2829