写文章的契机还是看沙雕群友挖了十多个DLL劫持的漏洞交CNVD上去了。。。

就想起来搜集整理一下这部分

0x01 前言

DLL(Dynamic Link Library)文件为动态链接库文件,又称"应用程序拓展",是软件文件类型

在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件

如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去按照顺序搜索这些特定目录时下查找这个DLL,只要攻击者能够将恶意的DLL放在优先于正常DLL所在的目录,就能够欺骗系统优先加载恶意DLL,来实现"劫持"

0x02 原理

Windows xp sp2之前

Windows查找DLL的目录以及对应的顺序:

1. 进程对应的应用程序所在目录;

2. 当前目录(Current Directory);

3. 系统目录(通过 GetSystemDirectory 获取);

4. 16位系统目录;

5. Windows目录(通过 GetWindowsDirectory 获取);

6. PATH环境变量中的各个目录;

例如:对于文件系统,如doc文档打开会被应用程序office打开,而office运行的时候会加载系统的一个dll文件,如果我们将用恶意的dll来替换系统的dll文件,就是将DLL和doc文档放在一起,运行的时候就会在当前目录中找到DLL,从而优先系统目录下的DLL而被执行。

Windows xp sp2之后

Windows查找DLL的目录以及对应的顺序(SafeDllSearchMode 默认会被开启):

默认注册表为:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,其键值为1

1. 进程对应的应用程序所在目录(可理解为程序安装目录比如C:\ProgramFiles\uTorrent)

2. 系统目录(即%windir%system32);

3. 16位系统目录(即%windir%system);

4. Windows目录(即%windir%);

5. 当前目录(运行的某个文件所在目录,比如C:\Documents and Settings\Administrator\Desktop\test);

6. PATH环境变量中的各个目录;

Windows7 以上版本

系统没有了SafeDllSearchMode 而采用KnownDLLs,那么凡是此项下的DLL文件就会被禁止从exe自身所在的目录下调用,而只能从系统目录即SYSTEM32目录下调用,其注册表位置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

那么最终Windows2003以上以及win7以上操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径,之后,应用程序就将DLL载入了自己的内存空间,执行相应的函数功能。

  • 默认情况下,如果软件安装在c盘根目录,而不是c:\Program Files,那经过身份验证的用户具有该目录的写权限,另外,perl,python,ruby等软件通常都添加到path变量中。那攻击者可以在当前目录中编写恶意DLL,只要重新运行exe程序就会中招。
  • SafeDllSearchMode + KnownDLLs二者结合可用来防范dll劫持,但是如果调用"不常见"的dll,也就是并未出现在KnownDLLs的列表中,那么无论SafeDllSearchMode是否开启,dll搜索的第一顺序均为程序的当前目录,这里就可能存在一个DLL劫持漏洞(在程序同级目录下预先放置一个同名dll,在进程启动的过程中会优先加载,实现劫持)

综上,产生DLL劫持的条件

1.利用的DLL不在'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs'注册表中

2.其dll是EXE程序首先加载的DLL,而不是依赖其他DLL加载的

3.DLL被加载进内存中

0x03 查找&&检测

可以利用进程查看工具:ProcessExplorer(下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer)、ProcessMonitor(下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procmon)或者火绒剑来查看 应用程序加载的dll

如果某程序的进程调用了注册表KnownDLLs中不存在的dll,就可能存在dll劫持

我说的属于人工检测

推荐常见的几种自动检测工具,检测可能利用dll劫持的文件:

1.Rattler

下载链接:https://github.com/sensepost/rattler/releases

2.dll_hijack_detect

下载链接:https://github.com/adamkramer/dll_hijack_detect/releases

3.ChkDllHijack

下载链接:https://github.com/anhkgg/anhkgg-tools

0x04 利用

可以用msf生成的dll木马放入软件根目录,替换可能存在dll劫持的文件

也可以使用dll注入工具把dll木马注入到程序的其他进程中,进行劫持

( dll注入工具:InjectProc 下载链接:https://github.com/secrary/InjectProc/releases)

还可以利用msf、cs生成shellcode,利用dll注入工具把shellcode生成dll文件,再利用PE工具把dll导入exe......甚至可以用NSIS打包做新的exe程序进行钓鱼

未完待续。。。

参考文章:https://www.cnblogs.com/backlion/p/7472021.html

https://www.cnblogs.com/miruier/p/13893585.html

https://mp.weixin.qq.com/s/rA7YYRuQpkyU6NQNCZCNnA

分享几篇有意思的文章:https://www.freebuf.com/articles/system/241946.html

https://www.cnblogs.com/swyft/articles/5580342.html

https://www.freebuf.com/articles/system/243791.html

未经允许,禁止转载

DLL劫持漏洞的更多相关文章

  1. 老树开新花:DLL劫持漏洞新玩法

    本文原创作者:丝绸之路 <img src="http://image.3001.net/images/20150921/14428044502635.jpg!small" t ...

  2. Dll劫持漏洞详解

      一.dll的定义 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分 ...

  3. 原创QQ影音DLL劫持漏洞+动画实战教程

    1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...

  4. Linux 动态链接库 - dll劫持

    如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...

  5. [转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析

    本菜最近学习了什么DLL注入啊,hook啊(r3)的相关技术,觉得很好玩,于是深入发现还有DLL劫持这种东西觉得挺好玩的,加上最近看到各种木马分析报告中都还有发现有利用白加黑的现象.于是自己想找几个来 ...

  6. 36.浅谈DLL劫持

    最近在搞内网,需要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干很多事情,比如杀软对某些厂商的软件是实行白名单的,你干些敏感操作都是不拦截,不提示的.还有留后门,提权等等.本文主要介绍如何检测 ...

  7. DLL劫持学习及复现

    0x01 dll简介 在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式.这就是DLL(Dynamic Link Library),即动态链接 ...

  8. dll劫持技术

    DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. DLL劫持原理 ...

  9. DLL搜索路径和DLL劫持

    DLL搜索路径和DLL劫持 环境:XP SP3 VS2005 作者:magictong 为什么要把DLL搜索路径(DLL ORDER)和DLL劫持(DLL Hajack)拿到一起讲呢?呵呵,其实没啥深 ...

随机推荐

  1. 关于easyswoole实现websocket聊天室的步骤解析

    在去年,我们公司内部实现了一个聊天室系统,实现了一个即时在线聊天室功能,可以进行群组,私聊,发图片,文字,语音等功能,那么,这个聊天室是怎么实现的呢?后端又是怎么实现的呢? 后端框架 在后端框架上,我 ...

  2. challenge

    一.查壳 无壳的64位linux文件 二.拖入ida静态分析 F5反编译一下. 发现这段代码实际意义就是把字符串传进v7当中.v7的值就是flag值. 这个函数整体分析下来,各种递归,尝试用c语言来复 ...

  3. IDA,IDA PRO 产品介绍

    IDA理念这是我们在开发产品时竭尽全力遵循的理念--在此过程中,我们相信我们将开发出能够为您带来所需的可靠性.便利性和易用性的软件.没有什么能打败人脑因为我们知道一秒钟的洞察力仍然胜过百年的处理时间, ...

  4. 『与善仁』Appium基础 — 2、常用Android模拟器的安装

    目录 1.Android Virtual Devices模拟器 2.Genymotion模拟器 (1)Genymotion模拟器下载 (2)模拟器Genymotion安装 (3)Genymotion模 ...

  5. Automation Framework Design 自动化框架设计思想

    从2007年到2017年,十年内自动化测试工具层出不穷,各种工具在运用一段时间之后,各个公司都会有测试架构师对于目前的自动化测试工具进行框架定制设计. 从惠普2007年GDCC推出的的WebDrivi ...

  6. c++中的对象模型

    1 对象模型的前世 类在c++编译器内部可以理解成结构体,所以在对象模型分析时,我们可以把 class  当作一种特殊的 struct: 1)在内存中 class 可以看作是普通成员变量的集合: 2) ...

  7. 2021.07.21 NPCBOT增加人类的SS和74

    #ssinsert into `creature_template_npcbot_appearance`(`entry`,`name*`,`gender`,`skin`,`face`,`hair`,` ...

  8. springMVC-5-视图解析器

    视图和视图解析器工作流程 第一步:获取到ModelAndView对象 请求处理方法执行完成后,无论返回是String,View 还是 ModeMap 类型,Spring MVC 也会在内部将它们装配成 ...

  9. JavaScript实现拖放效果

    JavaScript实现拖放效果 笔者实现该效果也是套用别人的轮子的.传送门 然后厚颜无耻的贴别人的readme~,笔者为了方便查阅就直接贴了,有不想移步的可以看这篇.不过还是最好请到原作者的GitH ...

  10. dva的effect那么难用,自己造一个轮子吧

    背景 对于dva这个开发框架,国内从事react的前端工程师多半不会感到陌生,dva完善的开发体系和简单的api,让其被广泛运用到实际工作中.我所在的公司也是长期使用dva作为基础的开发框架,虽然好用 ...