白加黑(dll劫持)

这篇具有很好参考价值的文章主要介绍了白加黑(dll劫持)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DLL劫持

DLL劫持已经是一个很古老成熟对技术了,以前就有看到有许多人用来做游戏外挂(2008年左右甚至更早以前),近期我了解到现在还有许多对人使用DLL劫持做权限维持,因为之前只是一直知道这个技术原理但是却没有实际使用过,并且最近看到有人开源了一份非常不错的检测工具,于是就打算动手做一下相关对分析研究。

DLL劫持简介

DLL全称dynamic-link library,即动态链接库,是一个包含可以由多个程序同时使用的代码和数据的库。比如,windows操作系统中的Comdlg32.dll 包含常见的对话框相关导出函数,当我们在程序中加载该DLL后,就能使用该DLL中的函数来实现“打开”对话框。

用大白话解释,每一个DLL都有一些特定的功能,包含该DLL即可使用这些功能。

白加黑(dll劫持),web安全,漏洞原理,网络安全,白加黑

而DLL劫持其实就是在不破坏目标DLL的功能的情况下,增加一些恶意代码,使程序执行恶意代码。有两种思路,第一种是编写恶意DLL做函数转发,大致流程如下所示

白加黑(dll劫持),web安全,漏洞原理,网络安全,白加黑

第二种思路是直接将恶意代码写入到正常DLL中。

白加黑(dll劫持),web安全,漏洞原理,网络安全,白加黑

另外,还有一类利用思路也归并到DLL劫持当中。

遗弃DLL劫持方式

这种方式个人感觉最方便,只需要一个免杀的DLL即可(当然免杀也不简单),所以优先讲这个。但在介绍利用函数转发方式的DLL劫持方法之前,必须要先介绍一下Windows对于指定DLL的搜索方式。

DLL搜索顺序

当在代码中使用LoadLibrary(“hello.dll”)函数来加载DLL时,操作系统便会开始搜索DLL。
在系统搜索DLL之前,它会检查以下内容:
1、如果已在内存中加载具有相同模块名称的DLL,则系统将使用加载的DLL,无论它在哪个目录中,系统不搜索DLL。
2、如果DLL位于KnownDLLs列表中,则系统将使用其已知DLL(以及已知DLL的相关DLL,如果有),系统不搜索DLL。

默认情况下启用安全DLL搜索模式。要禁用此功能则需要创建HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager \SafeDllSearchMode注册表值并将其设置为0。

默认开启的SafeDllSearchMode搜索顺序如下: 1、进程对应的应用程序所在目录 2、系统目录(使用GetSystemDirectory函数获取此目录的路径) 3、16位系统目录(c:\windows\system没有函数可以获取此目录的路径,但会搜索它) 4、Windows目录(使用GetWindowsDirectory函数获取此目录的路径) 5、当前工作目录(Current Directory) 6、PATH环境变量中列出的目录

白加黑(dll劫持),web安全,漏洞原理,网络安全,白加黑

禁用SafeDllSearchMode后的搜索顺序如下: 1、进程对应的应用程序所在目录 2、当前工作目录(Current Directory) 3、系统目录(使用GetSystemDirectory函数获取此目录的路径) 4、16位系统目录(c:\windows\system没有函数可以获取此目录的路径,但会搜索它) 5、Windows目录(使用GetWindowsDirectory函数获取此目录的路径) 6、PATH环境变量中列出的目录

注: KnownDLLs

注册表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs。
KnownDLLs注册表项下包含一系列常见的系统dll,如usp10.dll、lpk.dll、shell32.dll、user32.dll

如果创建注册表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
并指定具体dll名称,可以使KnownDLLs列表中同名的dll保护失效,修改后需要重启才能生效。

产生原因

程序或者服务尝试加载系统中不存在的DLL

白加黑(dll劫持),web安全,漏洞原理,网络安全,白加黑

那么怎么知道哪些不存在的DLL是程序或者服务会去尝试加载的呢?这里就必须要推荐一下国外大牛的开源工具–DLLSPY,利用该工具的静态检测方法就可以找到遗弃DLL,该工具用法十分简单,github上写得很清楚。

利用方法

由于程序或者服务会根据名称在系统中搜索指定DLL,那么利用方式十分简单,直接将恶意DLL文件修改为程序搜索或者服务尝试加载的DLL名称,然后将该恶意DLL放在任意的DLL搜索目录下即可。可以使用cobaltstrike生成的becaon.dll进行测试,当程序或者服务加载该DLL后即可得到Beacon(需关闭Defender)。

函数转发的DLL劫持方式

这种方式已经是很传统的方法了,说存在了十几年也不是太夸张的说法。这还可以理解成一种MITM Attack(中间人攻击)。

产生原因

程序没有对加载的DLL进行校验。

利用方法

先介绍怎么用DLLHijcker完成这件事 1、下载脚本安装了相关的依赖后,运行该脚本,参数为要劫持的目标DLL文件,然后会在当前目录下生成一个VS2019的项目。 2、打开该项目后修改Hijack函数的函数体,可以只是修改shellcode,也可以修改加载shellcode的方式(该加载方式来自于MSF,特征明显,无法绕过Defender),修改后编译该DLL文件。 3、将原始DLL文件移动到搜索顺序优先级低的文件夹底下。 4、将恶意DLL移动至目标DLL的文件下。

再介绍一下手工的利用方法,利用IDA查看DLL的导出表,记录每个导出函数的函数名以及参数类型,然后自己再新建一个DLL项目,编写相关的代码。
注意x86与x64的函数转发实现方式是不同的。手工的方式就不仔细叙述了,感兴趣的话可以利用DLLHijacker生成x86与x64的DLL文件,自己理解一下相关代码(其实代码逻辑很简单),有不懂的可以去看雪查看相关资料。

篡改正常DLL的劫持方式

这种方式最好的利用方式就是使用The Backdoor Factory(BDF),该工具最初于2014年发布,最后一次更新是在2017年。至于为什么最好等利用方式是这个呢,原因是我自己目前还没有花时间来完整手工复现一次…,这里立一个Flag,等以后手工复现完后再来更新这一小节。

产生原因

程序没有对加载的DLL进行校验。

利用方法

1、下载BDF,用-f指定要篡改的目标DLL,-s指定SHELLCODE。
2、将目标DLL修改为.bak后缀(保险措施)。
3、将篡改后的DLL文件移动至目标DLL目录下。

SUMMARY

其实还有另一种方法可以做DLL劫持,即在恶意DLL文件中篡改程序使用LoadLibrary的句柄返回,将原先要返回恶意DLL的句柄修改为返回原始DLL的句柄,这种方式是通过修改LDR_DATA_TABLE_ENTRY结构体中的BaseAddress来实现的,具体可以看一下看雪的帖子。我在实际复现的时候也遇到了很多问题,最后的解决方法也蛮奇怪的,将vs2017升级成vs2019后编译即可解决加载的程序一直崩溃的问题。等以后有时间的时候我再深入研究一下,该方法较传统的劫持是否存在什么优势。

另外,在做相关的分析研究的时候,踩了不少坑。
比如x86与x64的函数转发方式是不相同的,一开始没找到x64该怎么做劫持,后来问来问去总算是理解了其中的原因并找到可用的方法。然后在加载shellcode的时候又出现各种各样导致程序崩溃的bug,厚着脸请教大牛并用windbg一步一步调试,最后总算是解决了问题(虽然加载方式不能免杀)。
又比如利用函数转发的方式劫持某个程序的DLL时,发现该程序在加载了恶意DLL后直接崩溃,利用Process Monitor 定位问题,发现是程序不会再次搜索该DLL所在的目录(普通用户权限可修改的目录),只会按照系统搜索路径来搜索DLL,即使我在恶意DLL中用绝对路径去加载正常的DLL也不行,于是只能将原始DLL放到系统搜索目录下(这一步需要管理员权限)。

Win10虚拟机下的DLL搜索情况,注意到当前工作目录最后才搜索,与MSDN描述不太一样。文章来源地址https://www.toymoban.com/news/detail-851161.html

到了这里,关于白加黑(dll劫持)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 信息安全-网络安全漏洞防护技术原理与应用

    网络安全漏洞: 又称为脆弱性,简称漏洞。 漏洞 一般是 致使网络信息系统安全策略相冲突的缺陷 ,这种缺陷通常称为 安全隐患 安全漏洞的影响: 主要有机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控制性下降、真实性不保等 根据已经公开的漏洞信息,网络

    2024年02月11日
    浏览(36)
  • 【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解

    严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 【点击此处即可获取282G网络安全零基础入门学习资源】 信息搜集在

    2024年02月06日
    浏览(39)
  • 【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍

    严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 SQL 注入(SQL Injection) 是一种常见的网络攻击技术,它利用应用程序

    2024年02月06日
    浏览(36)
  • 网络安全kali web安全 Kali之msf简单的漏洞利用

    靶机的IP地址为:192.168.173.136 利用nmap工具扫描其开放端口、系统等 整理一下目标系统的相关信息 系统版本:Windows server 2003 开放的端口及服务: 从扫描出的端口发现,目标主机开启了135端口,服务为msrpc(远程过程调用服务),即Windows的RPC服务。 ​针对这个服务,我们就可

    2024年02月09日
    浏览(34)
  • 网络安全-kkFileViews任意文件读取漏洞原理解析

    在学习的过程中,了解到kkFileView存在任意文件读取、SSRF、文件上传漏洞。 为了更深刻的理解其原理,我从git拉取了项目,由于该漏洞在最新版本已经修复,所以这只是历史版本中存在的。 写这篇文章来提醒自己代码中容易出问题的地方。 来到kkFileView官网,发现支持Gitee,

    2024年04月11日
    浏览(28)
  • 【网络安全篇】php伪协议-漏洞及其原理

    🏆今日学习目标: 🍀学习php伪协议 ✅创作者:贤鱼 ⏰预计时间:35分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:网络安全 🍁贤鱼的个人社区,欢迎你的加入 贤鱼摆烂团 🍁如果有需要可以查看下面文章 25分钟了解php?php基础 举个例子 include(文件名) ; 作用是如果文件

    2024年02月03日
    浏览(37)
  • 【网络安全---XSS漏洞(1)】XSS漏洞原理,产生原因,以及XSS漏洞的分类。附带案例和payload让你快速学习XSS漏洞

    分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记 以pikachu靶场为例子进行讲解,pikachu靶场的搭建请参考以下博客; 【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)_网络安

    2024年02月08日
    浏览(34)
  • 网络安全-内网DNS劫持-ettercap

    什么是DNS呢 DNS就是你访问网站,比如百度,你知道百度的域名www.baidu.com,但是你并不知道他全国各地的他那个那个IP位于哪里 那么DNS就会这个去查找对应的IP以及域名给你解析让你正常的上网 这个里面的文件夹全部拉进去kali的桌面即可,准备好的劫持的环境 双击点开index

    2024年02月09日
    浏览(28)
  • 网络安全全栈培训笔记(WEB攻防-51-WEB攻防-通用漏洞&验证码识别&复用&调用&找回密码重定向&状态值)

    知识点: 1、找回密码逻辑机制-回显验证码指向 2、验证码验证安全机制-爆破复用识别 3、找回密码客户端回显Response状态值修改重定向 4、验证码技术验证码爆破,验证码复用,验证码识别等 详细点: 找回密码流程安全: 1、用回显状态判断-res前端判断不安全 2、用用户名重

    2024年01月16日
    浏览(49)
  • WEB漏洞原理之---【业务安全】

    1.1业务安全现状 1.1.1、业务逻辑漏洞 近年来,随着信息化技术的迅速发展和全球一体化进程的不断加快,计算机和⽹络已经成为与所有⼈都息息相关的⼯具和媒介,个⼈的⼯作、⽣活和娱乐,企业的管理,乃⾄国家的发展和改⾰都⽆处其外。信息和互联⽹带来的不仅仅是便利

    2024年02月05日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包