Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 渗透分析 › 「渗透分析」有关DLL劫持原理的解析

「渗透分析」有关DLL劫持原理的解析

Eswlnk的头像
Eswlnk
2022-08-20 16:09:54
「渗透分析」有关DLL劫持原理的解析-Eswlnk Blog
智能摘要 AI
DLL(动态链接库)是Windows操作系统的重要组成部分,提供多种功能并帮助模块化代码、重用资源。DLL通过入口点函数管理加载和卸载过程,支持导出函数以供其他程序调用。DLL劫持利用加载顺序漏洞,通过将恶意DLL放置在优先搜索路径中替换合法DLL,从而执行恶意代码。Windows不同版本调整了DLL加载路径以减少劫持风险,但问题依然存在。防范措施包括使用绝对路径加载DLL及验证数字签名。编写假DLL需获取原始DLL、导出函数并修改入口点函数。防范DLL劫持的最佳实践是确保安全的加载路径和严格的签名验证。

什么是DLL?

dll (Dynamic Link Library) 动态链接库,对于Windows,操作系统的很多功能都由 DLL 提供。 此外,当您在这些操作DLL为 Windows提供了许多的操作系统的特性。另外, DLL可以为你的 Windows应用程序添加许多的特性。比如,一个特定的程式可以包括很多不同的组件,而程式的各个组件都被包括在 DLL中,然后被分配。DLL可以帮助模块化代码,重用代码,有效地利用内存,并且降低硬盘的占用。这样,操作系统和程式就可以更快速地装入,更快速地工作,而且使用的硬盘也更小。

《微软》

DLL 结构

DLL 入口点

BOOL APIENTRY DllMain(
HANDLE hModule,// Handle to DLL module
DWORD ul_reason_for_call,// Reason for calling function
LPVOID lpReserved ) // Reserved
{
    switch ( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACHED: // A process is loading the DLL.
        break;
        case DLL_THREAD_ATTACHED: // A process is creating a new thread.
        break;
        case DLL_THREAD_DETACH: // A thread exits normally.
        break;
        case DLL_PROCESS_DETACH: // A process unloads the DLL.
        break;
    }
    return TRUE;
}

当入口点函数返回 FALSE 值时,如果使用加载时动态链接,应用程序将不会启动。 如果使用运行时动态链接,将不会加载单个 DLL。

导出 DLL 函数

通过 __declspec(dllexport) 来声明

DLL 劫持的原理

首先我们需要了解dll的加载方式,我们基本上都通过系统APILoadLibrary来加载dll文件,而其参数又有相对路径和绝对路径,在使用相对路径调用LoadLibrary系统会依次从以下6个位置去查找所需要的DLL文件:

Windows XP SP2之前

进程对应的应用程序所在目录;
当前目录(Current Directory);
系统目录(通过 GetSystemDirectory 获取);
16位系统目录;
Windows目录(通过 GetWindowsDirectory 获取);
PATH环境变量中的各个目录;

Windows xp sp2之后

进程对应的应用程序所在目录;
系统目录(即%windir%system32);
16位系统目录(即%windir%system);
Windows目录(即%windir%);
当前目录(运行的某个文件所在目录);
PATH环境变量中的各个目录;

Windows7以上

系统使用了 KnownDLLs 在注册表中的

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
「渗透分析」有关DLL劫持原理的解析-Eswlnk Blog

凡是此项里的DLL文件就会被系统禁止从可执行文件自身所在的目录下调用,而且只能从系统目录调用,这样就可以减少劫持的发生,但仍有可能被劫持。

劫持如何发生的呢?

当我们将一个程序假的和本应该在系统目录调用的dll同名的dll放在exe文件的根目录时,就会发生下面的情况:

原本

stateDiagram direction LR EXE–> B.dll:调用LoadLibrary(“B.dll”) state B.dll { direction LR 系统目录下的 }

劫持后

stateDiagram direction LR EXE–> B.dll*:调用LoadLibrary(“B.dll”) B.dll*–>B.dll:调用 state B.dll* { direction LR EXE文件根目录下的 } state B.dll { direction LR 系统目录下的 }

就可以在 B.dll* 中添加自己的代码,来实现自己的功能,下面我举一个例子

「渗透分析」有关DLL劫持原理的解析-Eswlnk Blog

他在自己的根目录检索了很多dll程序,其中排除上面注册表中的我们选择 dxgi.dll 作为我们的劫持目标

「渗透分析」有关DLL劫持原理的解析-Eswlnk Blog

将我们自己的dxgi.dll放入和exe文件同级目录,运行exe文件,我们可以看见

「渗透分析」有关DLL劫持原理的解析-Eswlnk Blog

我写的一个注入窗口直接弹出来了,劫持成功~ 我们已经进入了软件的内部,下面就交给你们了

如何编写这个假的DLL呢?

首先我们先获取到原始的dll文件

「渗透分析」有关DLL劫持原理的解析-Eswlnk Blog
火绒剑

将该dll导出到一个文件夹中,使用一个开源项目

通过他,我们可以很方便的生成相关的fake dll文件

python .\DLL_Hijacker.py .\dxgi.dll

修改其中的 DLLMain 函数

// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		DisableThreadLibraryCalls(hModule);
		DWORD dwThreadID;
		AllocConsole(); // 打开命令窗口
		freopen("CONOUT$", "w+t", stdout);
		freopen("CONIN$", "r+t", stdin);
		SetConsoleTitle("Enjoy https://mcenjoy.cn");
		CreateThread(0, 0, ThreadProc, NULL, 0, &dwThreadID); // 启动自己的进程 这个我就不给了
		printf("注入成功\n");
		return Load();
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		Free();
	}

	return TRUE;
}

到这里我基本上就介绍完成了,上面的软件大部分都可以查到,我就不贴了

如何防止这种劫持呢?

我认为程序在导入时尽量使用绝对路径,或者对dll文件进行数字签名的校验,这都可以避免劫持的发生

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
directiondlldll劫持Dll文件dll注入劫持
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「渗透分析」冒泡V5图标解密逻辑获取过程
上一篇
「紧急通知」流行企业财务软件0day漏洞大规模勒索利用通告
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「漏洞资讯」CVE-2025-12914:宝塔面板曝出注入漏洞
  • 「渗透分析」如何防范JS注入?nbcio-boot代码审计攻略大公开
  • 「漏洞资讯」多用户管理系统API接口调用存在前台SQL注入漏洞(0day)
  • 「漏洞资讯」1Panel面板前台RCE漏洞(CVE-2024-39911)
  • 「高危漏洞」xz 和 liblzma 5.6.0~5.6.1 被植入后门,威胁所有 x64 架构 Linux 和 macOS 用户
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

「渗透分析」冒泡V5图标解密逻辑获取过程
2022-08-13 8:58:52
关于Log4Shell的攻击进化讨论
2022-02-14 1:36:35
深入浅出”P牛”版CC1链
2022-03-27 22:32:25

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.789 秒   |  SQL查询 38 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈