type
status
date
slug
summary
tags
category
icon
password

Dll劫持技术介绍

DLL劫持(Dynamic Link Library Hijacking)是一种攻击技术,利用目标系统中的软件程序在加载动态链接库(DLL)时存在的漏洞,替换合法的DLL文件为恶意的DLL文件,从而实现攻击者对目标系统的控制。AheadLib是一个常用的工具,用于进行DLL劫持攻击。

Dll载入优先规则

  1. 程序所在目录
  1. 程序加载目录
  1. 系统目录即SYSTEM32目录
  1. 16位系统目录即SYSTEM目录
  1. Windows目录
  1. PATH环境变量中列出的目录
同时,还通过“Know DLLs注册表项”确定应用程序所要调用的DLL的路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
在此项下的DLL会被禁止从EXE自身所在目录下调用,而只能从系统目录即SYSTEM32目录下调用。所以dll劫持要选择不包含在“Know DLLs注册表项”中的dll。

实现过程

劫持应用DLL

只要宿主没有对自己的DLL做校检的话就可以进行劫持替换。
Note:当我们找到了一个可以劫持的DLL的时候,用于劫持的DLL文件需要劫持原DLL文件的所有导出函数,不然无法正常执行。可以用工具辅助生成DLL,例如:AheadLib

案例分析

本文以WPS为例。
在尝试的过程中发现et.exe单独复制出来运行会产生报错缺少dll文件。
notion image
将缺失的dll文件复制到相同文件夹后即可成功运行,而且他并没有对dll文件做签名校验。
notion image

使用劫持 dll 源代码生成器

首先打开GUI文件,再将dll拖入其中即可。
notion image
右键利用Aheadlib将dll函数模仿导出到指定文件夹。
notion image
生成之后总共是三个文件 .c .h .asm
notion image

编写新DLL

Visual Studio创建新项目
notion image
选择动态链接库
notion image
点击创建
notion image
将之前生成的三个文件复制到项目文件夹后手动拖入到解决方案,并在入口处引用头文件。
notion image
指针会去改变原本的函数地址进行链接,使用汇编的方式进行跳转,也就是krpt_jump.asm这个文件。
notion image
由于不需要用到跳转所以采用最笨的方法,去汇编文件内手动删除跳转。
notion image
汇编文件需要手动配置,具体怎么配置在文件最开始处已经标明了。
notion image
尝试生成,发现可以成功生成就可以了。
notion image
然后我们可以在源码中插入我们需要的恶意代码。 为了验证漏洞,我们让其在劫持成功的时候弹出消息提示窗口。
notion image
编译生成同名的“krpt.dll”DLL文件,与et.exe放在同一文件夹内,双击运行,可以看到弹窗成功
notion image
 

工具

参考资料

https://www.freebuf.com/articles/system/243791.html https://www.anquanke.com/post/id/225911 https://bbs.pediy.com/thread-263668.htm https://blog.csdn.net/Dome_/article/details/100623838
 
免杀教程:Shellcode JS加载器CobaltStrike4.4安装环境汉化破解及特征去除