DLL Hijacking Exploit

  1. 云栖社区>
  2. 博客>
  3. 正文

DLL Hijacking Exploit

技术小美 2017-11-08 15:02:00 浏览666
展开阅读全文

 前几天 exploit-db 数据库中公布了 长达 3 页的本地漏洞,全是:DLL Hijacking Exploit。详情可以参考:http://www.exploit-db.com/local/,那么什么是 DLL Hijacking Exploit? 是什么原因造成的 DLL Hijacking Exploit 呢? 下面我给简单说一下原因:

一、环境变量执行优先级

说起该漏洞,先谈一下变量的优先级别:

最高

%userprofile%

%systemroot%/system32

%systemroot%

用户定义path

最低

二、软件兼容性原因导致漏洞产生

Windows 操作有不同的操作系统,而不同的操作系统里面有不同的 共享链接库(dll),这就造成了不一致,有的库XP才有,有的库win7才有,有的或者直接废弃掉了,而软件必须兼容这些,这就给 DLL Hijacking Exploit 攻击带来了可称之机。首先看一张图:

image

当我打开 2222.docx 文档的时候,默认会调用  winword.exe 进程打开文件,然后寻找共享链接库(dll),这里我们抓到的是:imeshare.dll、IMM32.DLL。可以看到,winword 会通过上面提到的环境变量优先级来查找dll 的位置,如果存在就加载该dll 文件。根据上面的图可以看到如下顺序:

程序安装目录—》system32 目录—》注册表的images file execution options 映象路径à 加载。

在每一步寻找dll 的时候,如果存在就马上加载。根据“有的库XP才有,有的库win7才有,有的或者直接废弃掉了”这个原因,我们就理由说:我们可以劫持攻击。攻击思路如下:“如果某一系统中废弃掉了某一个 dll 文件,而软件又要为了兼容系统,还会寻找 dll,这时候,我们就可以在他寻找的某一路径中(可以为最终路径,也就是当前目录),写入我们的恶意dll 文件,让其加载执行code

三、实施攻击

前提条件:

1、  软件启动时需要加载一个 dll 。

2、  软件需要的 dll 在系统中不存在(因为不同系统环境不同,很多dll已经废弃)。

3、  一个编译好的恶意dll,示例代码如下:

#include <windows .h>
 
int hax()
 
{
 
WinExec(&quot;calc&quot;, 0);
 
exit(0);
 
return 0;
 
}
 
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
 
{
 
hax();
 
return 0;
 
}
</windows>

 

攻击:

在 winword.exe 启动时会调用 imeshare.dll,如果系统中不存在,就会在某一系统环境变量指定的路径中寻找,现在我们把制作好的 imeshare.dll 放在 doc 文档的当前目录,然后当 word 启动时,就会加载我们的恶意dll,执行恶意code。

所需要的文件。

漏洞执行成功!

四、其他软件利用

五、劫持总结

a)         Javascript Hijacking

b)         Linux shell Hijacking

c)         images file execution options hijack

d)         DLL Hijacking

e)         …..

f)          Windows shell Hijacking

所有造成劫持的原因都来源于:某个东西可被覆盖!!

 

思考:在其他地方是否可被劫持呢? 思想? 大脑?









本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/575499,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小美
+ 关注