从零开始的白加黑免杀
type
status
date
slug
summary
tags
category
icon
password
Dll劫持技术介绍
DLL劫持(Dynamic Link Library Hijacking)是一种攻击技术,利用目标系统中的软件程序在加载动态链接库(DLL)时存在的漏洞,替换合法的DLL文件为恶意的DLL文件,从而实现攻击者对目标系统的控制。AheadLib是一个常用的工具,用于进行DLL劫持攻击。
Dll载入优先规则
- 程序所在目录
- 程序加载目录
- 系统目录即SYSTEM32目录
- 16位系统目录即SYSTEM目录
- Windows目录
- 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文件。
将缺失的dll文件复制到相同文件夹后即可成功运行,而且他并没有对dll文件做签名校验。
使用劫持 dll 源代码生成器
首先打开GUI文件,再将dll拖入其中即可。
右键利用Aheadlib将dll函数模仿导出到指定文件夹。
生成之后总共是三个文件 .c .h .asm
编写新DLL
Visual Studio创建新项目
选择动态链接库
点击创建
将之前生成的三个文件复制到项目文件夹后手动拖入到解决方案,并在入口处引用头文件。
指针会去改变原本的函数地址进行链接,使用汇编的方式进行跳转,也就是krpt_jump.asm这个文件。
由于不需要用到跳转所以采用最笨的方法,去汇编文件内手动删除跳转。
汇编文件需要手动配置,具体怎么配置在文件最开始处已经标明了。
尝试生成,发现可以成功生成就可以了。
然后我们可以在源码中插入我们需要的恶意代码。 为了验证漏洞,我们让其在劫持成功的时候弹出消息提示窗口。
编译生成同名的“krpt.dll”DLL文件,与et.exe放在同一文件夹内,双击运行,可以看到弹窗成功
工具
参考资料
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
Loading...