动态链接库(DLL)的方式以及Windows API指示使用它们的方式都可以用作任意代码执行的接口,并协助恶意行为者实现其目标。

动态链接库是Microsoft实施共享库的产品。

这些库通常具有文件扩展名DLL,并且它们也是PE文件,与exe文件完全一样。

DLL可以包含PE文件可以包含的任何类型的内容,这些内容可能与代码,资源或数据的任何组合不同。

DLL主要用于在系统上的应用程序和进程之间共享此内容,以便在为Windows创建应用程序时为程序员提供高度的灵活性。

DLL以相同的访问权限在调用过程的内存中执行。这意味着,如果DLL包含任何异常,则不会为调用EXE提供任何保护。恶意攻击者可以通过使用诸如DLL劫持或DLL代理之类的方法来执行其恶意代码来利用这一事实。

DLL搜索顺序简介

在整个日常工作中,我们将大量流程加载到我们的系统中。使用Windows操作系统时,进程加载算法的关键步骤包括将动态链接库(DLL)加载到内存中,以利用其功能并满足其进程与DLL之间的依赖关系。每当启动进程时,都会发生此操作。

Windows操作系统可能包含同一DLL的大量版本。由于一个系统可能承载可能需要同一个DLL的许多进程这一事实,因此应采用一种系统来确保从正确的路径加载所需的DLL,同时确保已找到该DLL的最相关版本。

应用程序制造商通过使用LoadLibraryExA或LoadLibraryA函数来使用加载特定库的操作。这些函数接收一个路径参数,该参数导致所请求的DLL,并向调用过程返回模块的句柄。

1.当前目录

2.启动过程的目录

3.C:\ Windows \ System32

4.C:\ Windows \ System

5.C:\ Windows

6.“ PATH”的SYSTEM环境变量中包含的目录

7.USER环境变量“ PATH”中包含的目录

DLL攻击

DLL包含要由加载过程执行的代码,这会造成一种情况,即可以利用丢失的DLL或以不安全的方法实现的DLL来诱骗正在运行的系统执行恶意有效负载,在这种情况下,它利用本机DLL搜索顺序。恶意行为者可能会使用此技术来加载自己的DLL,该DLL可能包含任何类型的代码。

攻击利用过程

当我们确定某个进程按某个搜索顺序搜索DLL,并且缺少DLL 或者错误实现的DLL的进程之后,才能够进行下一步攻击

第一步:确定DLL

首先,我们从Sysinternals设置ProcMon来筛选未找到以DLL结尾的路径的任何操作:

ProcMon下载:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

我们可以看到“ 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,NULL);      break;    case DLL_THREAD_ATTACH:    case DLL_THREAD_ATTACH:    case Dll_PROCESS_ATTACH:     break;}return TRUE;          })

我们把这个DLL命名为Riched32.dll放进Bginfo64.exe的DLL文件夹中。

然后重新打开进程“ Bginfo64.exe。

出现该消息框,并且我们可以观察到该进程加载了DLL:

那如果我们的DLL中包含恶意代码呢。是不是可以继承Bginfo64.exe执行命令??

最后一步:拿一个shell

确定了进程和易受攻击的路径之后,所缺少的就是创建我们希望执行的DLL有效负载。

我们可以使用一个“ DLLicious”的工具(https://github.com/J3wker/DLLicous-MaliciousDLL)来快速编译包含的shell的DLL

用法

用法非常简单,只需使用Python3或“。\ DLLicous.py”运行脚本

我们可以使用

1.用C语言将反向Shell编写DLL

2.Base64nc.exe 对NC二进制文件进行编码和解码,然后将其写入
DLL的工作目录中,然后从该目录中发起攻击。另一个新功能是:nc.exe在DLL中也包含base64代码,而不是从Web下载或从SMB服务器复制它。

通过使用PowerShell和DLL代码中包含的NetCat的反向Shell

并尝试与kali上的侦听器联系,然后使用PowerShell打开shell

我们可以看到执行劫持的进程后,将加载DLL并打开shell:

https://www.cynet.com/attack-techniques-hands-on/dlls-and-ways-they-can-hurt-us/

https://github.com/J3wker/DLLicous-MaliciousDLL

https://docs.microsoft.com/en-us/sysinternals/downloads/procmonhttps://docs.microsoft.com/en-us/sysinternals/downloads/procmon

渗透测试 红队攻防 免杀 权限维持 等等技术

及时分享最新漏洞复现以及EXP 国内外最新技术分享!!!

进来一起学习吧

依赖dll_DLL攻击漫谈相关推荐

  1. 什么鬼?我能通过依赖混淆攻击在 Halo 游戏服务器中执行命令,微软不 care?!...

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 研究员可以利用依赖混淆攻击在 Halo Microsoft 服务器中执行命令,但微软安全响应中心 (MSRC) 表示并非问题. 神秘依赖关 ...

  2. 依赖混淆 exploit 已被滥用于攻击亚马逊等多家大厂

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 研究人员发现恶意程序包正在被用于攻击亚马逊.Lyft.Slack 和 Zillow 等企业的 npm 代码公开库,提取敏感信息. 这些 ...

  3. 攻击者“完全自动化”发动NPM供应链攻击

     聚焦源代码安全,网罗国内外最新资讯! 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为 ...

  4. 200多个恶意NPM程序包针对Azure 开发人员,发动供应链攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

  5. 揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司

     聚焦源代码安全,网罗国内外最新资讯! 作者:万佳 最近,一名安全研究员利用一种新颖的软件供应链攻击成功入侵了 35 家大型科技公司的内部系统,这些公司包括微软.苹果.PayPal.特斯拉.Uber. ...

  6. 找到恶意软件包:Go 语言生态系统中的供应链攻击是怎样的?

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 近期发生的严重的 SolarWinds 攻击事件和新型 "依赖混淆"攻击,让供应链攻击成为讨论焦点:攻陷供应链中不 ...

  7. 我是怎样入侵苹果,微软公司的——新型供应链攻击的故事

    自从我开始学习编程以来,我一直感到好奇的是,我们居然对我们放在命令行工具中这样一个简单命令如此信任: 某些编程语言(例如 Python)带有一种简单的或多或少正式的方法来为项目安装依赖项. 这些安装程 ...

  8. 工业物联网中的操作技术攻击检测系统

    工业物联网中的操作技术攻击检测系统 原文 System for Operational Technology Attack Det 申明 版权归原文作者及出版单位所有,如有侵权请联系删除. 摘要 ​ ...

  9. java docx word api_javadoc生成word接口文档

    PHP 5.4 on CentOS/RHEL 6.4 and 5.9 via Yum PHP 5.4 on CentOS/RHEL 6.4 and 5.9 via Yum PHP 5.4.16 has ...

最新文章

  1. mybatis和ibatis的一点区别
  2. GDI中的坐标映射问题
  3. python二进制、字符编码及文件操作
  4. python安装各种插件
  5. 华为AppCube入选Forrester《中国低代码平台市场分析报告》
  6. Telephone Calls
  7. Jmeter MD5加密及其运用
  8. 2. SpringBoot +Mybaits
  9. [原]C++头文件的包含顺序研究
  10. 如何用python控制设备实现自动_带你用 Python 实现自动化群控设备
  11. java线程协作_java线程系列之三(线程协作)
  12. python基础语法入门大全_python 基础语法——快速入门
  13. SQL Sever — 查询前10%的数据、查询并参与计算显示出数据、查询前10行数据、多重升序降序查询、去掉重复值、替换列名显示
  14. 百亿流量系统,是如何从0开始搭建的?
  15. python爬取微博评论点赞数_python爬取点赞评论数
  16. mysql教学版_MySQL 8从零开始学(视频教学版)
  17. uni-app解决接口跨域问题
  18. 微软全球副总裁李开复给中国青年的一封信
  19. 我们跟30家PoS团队聊了聊,Staking最硬核的干货都在这儿了
  20. 动态调整打印机纸张大小

热门文章

  1. 阿里云技术白皮书_2019年云计算发展白皮书发布 阿里云保持优势成亚太最大云服务商...
  2. python编写学生选课系统程序_python面向对象编程小程序- 选课系统
  3. 怎样实现linux的网络通信协议是,一种基于Linux系统的TCP/IP协议栈的实现
  4. dpm码识别_如何读取直接零件打标码(DPM)
  5. Python十行代码带你穿越管世界
  6. Linux网络:Virtual Routing and Forwarding (VRF)
  7. TCP/IP网络协议栈:ARP协议详解
  8. Java实现查看SEGY(.su格式)数据道头字信息的GUI图形用户界面
  9. java query object_java queryforobject
  10. 让OpenShift Serivce Mesh自动对服务注入sidecar