动态链接库(dll)可以作为执行任意代码的接口,并帮助恶意行为者实现其目标。dll是microsoft共享库的实现方式,通常以dll为文件扩展名,并且它们也是pe文件,与exe文件结构相同。
DLL可以包含PE文件支持的任何类型的内容,这些内容可能包括代码、资源或数据的任意组合。DLL的主要用途是在系统上的应用程序和进程之间共享这些内容,为Windows应用程序开发者提供高度的灵活性。
DLL在调用进程的内存中以相同的访问权限执行。这意味着,如果DLL包含任何异常,调用EXE不会得到任何保护。恶意攻击者可以通过DLL劫持或DLL代理等方法利用这一特性来执行恶意代码。
DLL搜索顺序简介
在日常工作中,我们会加载大量进程到系统中。使用Windows操作系统时,进程加载算法的一个关键步骤是将动态链接库(DLL)加载到内存中,以利用其功能并满足进程与DLL之间的依赖关系。每当启动进程时,都会发生此操作。
Windows操作系统可能包含同一DLL的多个版本。由于一个系统可能承载许多需要同一个DLL的进程,因此需要一种系统来确保从正确的路径加载所需的DLL,并确保加载的是最相关的版本。
应用程序开发者通过使用LoadLibraryExA或LoadLibraryA函数来加载特定库。这些函数接收一个路径参数,该参数指向所请求的DLL,并向调用进程返回模块的句柄。
当前目录启动进程的目录C: Windows System32C: Windows SystemC: WindowsSYSTEM环境变量“PATH”中包含的目录USER环境变量“PATH”中包含的目录
DLL攻击
DLL包含要由加载进程执行的代码,这可能会导致利用缺失的DLL或不安全实现的DLL来诱导系统执行恶意负载的情况,利用本机DLL搜索顺序。恶意行为者可能使用此技术来加载自己的DLL,该DLL可能包含任何类型的代码。
攻击利用过程
确定某个进程按特定搜索顺序搜索DLL,并且缺少DLL或错误实现的DLL之后,才能够进行下一步攻击。
第一步:确定DLL
首先,我们使用Sysinternals的ProcMon来筛选未找到以DLL结尾的路径的任何操作:
ProcMon下载:https://www.php.cn/link/b5146481a245e50255f5b24319c2711a
可以看到“Bginfo64.exe”找不到的对应DLL。

第二步:查找DLL和利用
在查找这些DLL时,我们得出Riched32.DLL是非本地DLL,因此,注册表中没有该DLL的默认搜索路径。但是如果我们正确配置它,系统最终也会加载它。
现在所需要做的就是在请求的路径中创建该DLL:

我们在请求路径中创建该DLL(Riched32.dll),为了方便演示,我们的DLL执行后,会弹出“hello HBT黑白天”的消息框来证明我们的DLL可以执行命令。
#define WIN32_LEAN_AND_MEAN#includeextern "C" __declspec(dllexport) DWORD WINAPI MessageBOXThread(LPVOID lpParam) { MessageBox(NULL, "hello hbt 黑白天", "hello hbt 黑白天", NULL); return 0;}extern "C" __declspec(dllexport) BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CreateThread(NULL, NULL, MessageBOXThread, NULL, NULL, NULL); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}
我们将这个DLL命名为Riched32.dll并放入Bginfo64.exe的DLL文件夹中。
然后重新打开进程“Bginfo64.exe”。

啵啵动漫
一键生成动漫视频,小白也能轻松做动漫。
298 查看详情
出现该消息框,并且我们可以观察到该进程加载了DLL:

如果我们的DLL中包含恶意代码,是不是可以继承Bginfo64.exe执行命令?
最后一步:拿一个shell
确定了进程和易受攻击的路径之后,所缺少的就是创建我们希望执行的DLL有效负载。
我们可以使用“DLLicious”工具(https://www.php.cn/link/e3423656a3520cb9a9825048b5cb59aa。
用法
用法非常简单,只需使用Python3或“.DLLicous.py”运行脚本。
我们可以:
用C语言将反向Shell编写DLL。使用Base64nc.exe对NC二进制文件进行编码和解码,然后将其写入DLL的工作目录中,然后从该目录中发起攻击。另一个新功能是:nc.exe在DLL中也包含base64代码,而不是从Web下载或从SMB服务器复制它。

通过使用PowerShell和DLL代码中包含的NetCat的反向Shell,并尝试与kali上的侦听器联系,然后使用PowerShell打开shell。
我们可以看到执行劫持的进程后,将加载DLL并打开shell:

https://www.php.cn/link/1721075016476163d0405fdfe93667c1
https://www.php.cn/link/6ef43ab936ea0c3ff156b0e099c783ba
https://www.php.cn/link/b5146481a245e50255f5b24319c2711a
渗透测试、红队攻防、免杀、权限维持等技术,以及及时分享最新漏洞复现及EXP,国内外最新技术分享!
进来一起学习吧。
以上就是DLL攻击漫谈的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/219880.html
微信扫一扫
支付宝扫一扫