介绍
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
DLL劫持是一种漏洞,这个漏洞存在于所有版本的Windows操作系统之中。当用户进行了非法操作时,就有可能触发这个漏洞。很多人认为,这是Windows操作系统的一个功能,而非一个漏洞。因为这一机制是由微软公司专门设计出来的。
简单来说,你可以创建一个自定义的恶意dll文件,并将这个文件与一个正常的文件一同放在一个目录下。当这个正常的文件被一个存在漏洞的应用程序打开之后,你自定义的dll文件将会被加载,你嵌入其中的代码将会被执行。我们必须针对每一款存在漏洞的应用程序来指定这种恶意dll文件专用的文件名。别担心,我们只要使用任何一款调试工具就可以轻易完成这一步操作。
测试环境
1、TIM2.3.2
2、劫持工具(backdoor-factory)
3、增强型任务管理器(Process Explorer)
测试过程
运行Process Explorer查询运行程序加载的dll。
调用的dll很多,对AFUtil.dll进行测试
使用backdoor-factory生成恶意的dll
一共就两个选项,如果1不行就选择2,我这里选择1
会在backdoored的目录下生成一个恶意的dll
替换原始的dll(先备份原始的dll)
进行msf的配置
运行TIM反弹shell
预防
1、DLL劫持利用系统未知DLL的搜索路径方式,使得程序加载当前目录下的系统同名DLL。所以可以告诉系统DLL的位置,改变加载系统DLL的顺序不是当前目录,而是直接到系统目录下查找。
这个想法可以通过修改注册表实现。
在注册表键值:>#####HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\KnownDLLs
是调用系统DLL的首要查找目录。例如里面有RE_SZ类型的"ntdll"="ntdll.dll"项,则系统载入"ntdll"时会直接从系统目录加载。
由此,添加"LPK"="LPK.DLL"即可防止LPK被劫持,同理可以阻止一些其他DLL被劫持,例如"USP10"。
在Windows NT系统,XP默认只有少数关键DLL在此键值下,Win7下面此键值已经相当齐全,在Win7系统下发生DLL劫持的概率要比XP小很多。 (借用百度的预防知识点)
2、还可以通过第三方工具进行dll劫持检测。DllHijackAuditor能够防止木马病毒劫持系统中的dll文件加载运行,是一款很不错的dll文件保护工具。
3、坚持从官方下载软件,拒绝第三方。万一有后门呢?