-
-
[原创]反射型注入之红蓝对抗案例
-
发表于: 2020-7-13 11:41 4497
-
这个基于反射DLL注入应用的样本来源于红蓝对抗,当时分析时觉得这技术挺有意思的,但是没有做过多的记录。看到有反射DLL注入的文章出现,遂有了这篇文章的诞生。
对于反射DLL注入应用其实已经有很多了,但是最多的还是要归功于CobaltStrike和Metasploit两大著名的利用工具。CobaltStrike和Metasploit在渗透方面能力突出,堪比神器也不为过。今天分享的案例便是来源于CobaltStrike生成的后门。后门则是利用了反射DLL注入技术,从而实现DLL文件的不落地,不仅如此,这里面还用到了Dos头部分的空间,来实现定位反射DLL注入函数,最后通过DLLMain执行相关后门操作。
接下来我们来看一看到底有什么不一样呢
首先是基于反射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)函数的偏移量。所以说这几步构造精妙。
赞赏
- [原创]Rundll32的故事 15717
- [分享]关于DLL服务调试方法的尝试 9345
- [原创]流氓广告的分析与研究(原图丢失,请下载附件pdf食用更佳) 8435