关于DLL劫持死锁的问题

admin 2023年12月20日10:01:13评论59 views字数 1581阅读5分16秒阅读模式

有时候挖掘白名单的时候会发现在DllMain中编写的loader或shellcode无法执行这个原因和解决方式我们来解决一下:

当DLL被加载到进程中的时候,DllMain函数在同步锁内执行,比如expample.exe应用程序加载多个DLL,例如A.dll,B.dll,C.dll,必须等待A.dll的DllMain函数完成后才能继续加载后续的DLL,也就是B.dll,C.dll。

如果A.dll的dllMain函数涉及到需要同步并且导致延迟的操作,则可能导致进程无法加载剩余的DLL情况,因此可能永远无法初始化,从而导致操作的问题。

因为如果A.dll的DllMain函数中执行的shellcode依赖于B.dll,C.dll加载后,shellcode本身根本就不会执行,考虑到这一点,建议从目标的导出函数中执行有效负载,这样更加可靠。

为了避免DLL死锁的问题,我们应该从导出函数中执行shellcode。

那么我们会想一个DLL中那么多的导出函数我怎么知道我应该写那个导出函数???

比如说如下我不写导出函数的话他会报错如下:

关于DLL劫持死锁的问题

这种问题就是msedge_elf.dll中是缺少导出函数的,也就是说我们identity_helper.exe加载msedge_elf.dll的时候会调用它的导出函数。

那么msedge_elf.dll中的导出函数实在是太多了,我们应该怎么样精确的知道我们应该写那些导出函数呢?

我们从原始的目录中打开identity_helper.exe文件,从x64dbg中打开。

这里说的原始目录指的是identity_helper.exe这个文件原本是在那个目录的。

然后进去x64dbg:

在符号选择msedge_elf.dll,在这里把所有的导出函数这里按下F2下断点。

关于DLL劫持死锁的问题

然后我们F9过来他会到程序入口这里,如果一次F9不行那么就多次即可。(后面会有一个EntryPoint)

关于DLL劫持死锁的问题

当我们再去按下F9(多次)的时候,他会跳到你缺少的那个导出函数哪里。

关于DLL劫持死锁的问题

因为我们之前在它这个msedge_elf.dll中所有的导出函数都下过断点了。

我们只需要一直F9即可,它会跳到缺少导出函数的哪里。

关于DLL劫持死锁的问题

那么我们现在就明白了它现在缺少这两个导出函数,那么我们直接写这两个导出函数就行了。

// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "pch.h"extern "C" __declspec(dllexport) int GetInstallDetailsPayload() {    MessageBoxA(NULL,"This Dll is GetInstallDetailsPayload!","success",MB_OK);    return 0;}extern "C" __declspec(dllexport) int SignalInitializeCrashReporting() {    MessageBoxA(NULL,"This Dll is GetInstallDetailsPayload!","success",MB_OK);    return 0;}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;}

可以看到正常执行了导出函数中的代码。

关于DLL劫持死锁的问题

记得关注转发好兄弟

原文始发于微信公众号(Relay学安全):关于DLL劫持死锁的问题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月20日10:01:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于DLL劫持死锁的问题http://cn-sec.com/archives/2318062.html

发表评论

匿名网友 填写信息