浅谈dll文件劫持漏洞的发现与挖掘

引言:

最近跟着朋友一直在学dll劫持漏洞,感觉学到了好多,在这里感谢 Reheart 表哥!!
dll劫持漏洞,已经是个很老很老的漏洞了,但是还是有很多的~~大中小型~~企业开发的程序存在这样的漏洞,依然是黑客们拦路抢劫杀人越货的不二神器。

0x01 什么是DLL劫持?

Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式。这就是DLL(Dynamic Link Library),即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。

每一个DLL都有一个入口函数,即DLLMain,系统在特定环境下会调用DLLMain。比如接下来的一些事件中,就会调用Dll的入口函数。

  • 1.进程装载DLL。
  • 2.进程卸载DLL。
  • 3.DLL在被装载之后创建了新线程。
  • 4.DLL在被装载之后一个线程被终止了。

一般可以使用IDA或者x64dbg等工具去分析一下程序的装载行为,然后根据程序的装载行为进行劫持测试即可。

应用程序导入函数与DLL文件中的导出函数进行链接有两种方式:隐式链接(load-time dynamic linking)也叫静态调用和显式链接(run-time dynamic linking)也叫动态调用。隐式链接方式一般用于开发和调试,而显式链接方式就是我们常见的使用LoadLibary或者LoadLibraryEx函数(注:涉及到模块加载的函数有很多)来加载DLL去调用相应的导出函数。调用LoadLibrary或者LoadLibraryEx函数时可以使用DLL的相对路径也可以使用绝对路径,但是很多情况下,开发人员都是使用了相对路径来进行DLL的加载。那么,在这种情况下,Windows系统会按照特定的顺序去搜索一些目录,来确定DLL的完整路径。

相对路径记下来,这个常考。

浅谈dll文件劫持漏洞的发现与挖掘_第1张图片

调用LoadLibrary函数时,系统会依次从下面几个位置去查找所需要调用的DLL文件。

  • 1.程序所在目录。

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

  • 3.系统目录即 SYSTEM32 目录。

  • 4.16位系统目录即 SYSTEM 目录。

  • 5.Windows目录。

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

  • 微软为了防止DLL劫持漏洞的产生,在XP SP2版本之后,添加了一个SafeDllSearchMode的注册表属性。注册表路径如下:

    • HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
    • ManagerSafeDllSearchMode
  • 当SafeDllSearchMode的值设置为1,即安全DLL搜索模式开启时,查找DLL的目录顺序如下:

    • 1.程序所在目录
    • 2.系统目录即 SYSTEM32 目录。
    • 3.16位系统目录即 SYSTEM 目录。
    • 4.Windows目录。
    • 5.加载 DLL 时所在的当前目录。
    • 6.PATH环境变量中列出的目录。
    • 但是这东西默认是关闭的!

利用这个特性,攻击者就可以伪造一个相同名称,相同导出函数表的一个“假”DLL,并将每个导出函数转向到“真”DLL。将这个“假”DLL放到程序的目录下,当程序调用DLL中的函数时就会首先加载“假”DLL,在“假”DLL中攻击者已经加入了恶意代码,这时这些恶意代码就会被执行,之后,“假”DLL再将DLL调用流程转向“真”DLL,以免影响程序的正常执行。

这就是DLL劫持漏洞。

0x02 如何利用DLL劫持

编写一个用于劫持DLL文件,需要两个步骤:

  • 1.查看被劫持的DLL的导出函数表。
  • 2.编程实现劫持DLL向原DLL的导出函数的转发,并加入你的“恶意代码”。

现在已经有很多脚本可以自己生成你的dll劫持代码了,仅仅编译即可利用,在这里笔者不在赘述如何编写代码了。

一般劫持分为劫持系统Dll/劫持程序的DLL

  • 前者通用性更好,但是容易被发现。

  • 后者的不容易被安全软件干掉。

各有各的优势所在。

但是劫持方法都是大同小异的。

0x03 实战

一般环节都是如下所示。

首先下载我们的目标程序,然后拖入x64dbg进行分析一下。

发现了一个加载有问题的dll

LINKINFO.dll

它会优先在安装目录里面进行寻找,如果没找到,会在系统目录下进行寻找。

那么我们编写一个dll劫持文件,放入到第一寻找的目录中。

发现程序正常运行,并且完成了命令执行。

当然还有更多花里胡哨的玩法。

这就需要测试一些软件的功能,然后进行相关的挖掘了。

但是基本方法都大同小异。

浅谈dll文件劫持漏洞的发现与挖掘_第2张图片

遇到了以后再分享吧。

附赠一张cnvd漏洞报送:

浅谈dll文件劫持漏洞的发现与挖掘_第3张图片

还有两三张大厂的还没归档,都在等处置,就先放这里吧。

这里附上表哥博客:http://reheart.cn/

你可能感兴趣的:(web安全,笔记)