首页
论坛
课程
招聘
[原创]反射型注入之红蓝对抗案例
2020-7-13 11:41 1274

[原创]反射型注入之红蓝对抗案例

2020-7-13 11:41
1274

分享背景

这个基于反射DLL注入应用的样本来源于红蓝对抗,当时分析时觉得这技术挺有意思的,但是没有做过多的记录。看到有反射DLL注入的文章出现,遂有了这篇文章的诞生。

技术应用

对于反射DLL注入应用其实已经有很多了,但是最多的还是要归功于CobaltStrike和Metasploit两大著名的利用工具。CobaltStrike和Metasploit在渗透方面能力突出,堪比神器也不为过。今天分享的案例便是来源于CobaltStrike生成的后门。后门则是利用了反射DLL注入技术,从而实现DLL文件的不落地,不仅如此,这里面还用到了Dos头部分的空间,来实现定位反射DLL注入函数,最后通过DLLMain执行相关后门操作。

Bootstrap技术解析

接下来我们来看一看到底有什么不一样呢
首先是基于反射DLL注入技术并修改了Dos头信息的情况。
图片描述
接下来看看正常的Dos头情况。
图片描述
可以明显的发现Dos头信息完全不一样,就是因为这样的修改,可以让加载到内存的exe从Dos头开始执行,并且能够正常的完成反射式的加载过程。
首先的dec ebp 和pop edx 是16进制4D和5A对应的汇编代码,并没有什么特殊的含义。
接下来的E8 00000000 其中的00000000表示机器码的内容。
这里就要介绍一下关于call后地址如何计算的问题了,一个最简单的办法就是记得这个计算公式。
机器码内容=当前地址-目标地址+5;
当前地址=20002,所以目的地址=机器码内容-当初地址+5=20007;
所以call的地址为call 20007;
pop ebx 给ebx赋值为20007也就是当前esp的值
mov edi,ebx 将ebx赋值给edi
push edx 将edx入栈
inc ebp 恢复之前dec ebp的值
图片描述
这几步操作可谓是精妙,先来看一下初始时候ebx值的情况。
图片描述
当执行过inc ebp时,再来看一看ebx值的情况。
图片描述
通过定向修改ebx的值,从而是 偏移量固定,也就方便了之后通过pop ebx的地址来确定与ReflectiveLoader(x)函数的偏移量。所以说这几步构造精妙。

 

push ebp
mov ebp,esp
add ebx,0x8150 构造与ReflectiveLoader(x)函数的偏移量
call ebx 执行ReflectiveLoader(x)函数
图片描述
并且ReflectiveLoader(x)函数返回了DLLMain的地址。
接下来就是调用DLLMain函数了,构造DLLMain的三个参数。
push 0x0
push 0x4
push 0
call eax
其中第一个参数和第三个参数无关紧要,可以设置为0,但是第二个参数就相对比较重要了,表示了DLL调用的fdwReason,也就是关乎在DLL中进入到哪个功能执行。
这里举一个开发的例子,如下图所示。表示了DLL的调用原因。
图片描述
这里的ATTACH为我自定义的值,也可以使用原始的的值
图片描述
自此Dos头修改的代码就基本解答完成,如此精妙的代码,作为一个搬运工的基本素养,我将其从github中搬了回来,这段代码来源Metasploit的核心功能。
图片描述
相关Github地址
reflectivedllinject

举一个例子

接下来以Metasploit的reverse_tcp来看一看整个反射DLL的传输情况。
这段代码是标准的reverse_tcp原始代码,不经过任何加工的产物。
图片描述
这里调用VirtualAlloc为要传输的exe分配内存空间。
图片描述
这里的jnz是来判断当前文件是否传输完毕,最后通过ret指令返回到分配地址头部。
图片描述
可以看到Dos头部有明显的改动,这就是Metasploit内置的reflectivedllinject.rb完成的相关功能。
图片描述
当整个payload运行起来之后,我们来看一下Metasploit端的情况。
这里发送的957487字节就是刚才被修改过的Dos头的DLL文件。
图片描述
除了Metasploit,CobaltStrike也经常使用这种方式来完成无文件攻击。


[招聘] 欢迎你加入看雪团队!

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回