*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。
1、自说自话
目前我能想到的反制红队的办法是dll劫持,但是dll劫持是会有一定的限制的,有一种dll劫持是劫持系统dll,而且需要软件未指定绝对路径,还有一种dll劫持是将软件本来就存在的dll替换成我们的上线木马dll文件,然后在我们的上线木马dll文件中跳回原本的dll。在后来跟团队的战友们讨论的时候发现,可以在汇编中插入我们的dll,然后让程序调用。
这里面又想到了多种方法,一种是用od单步走到第一个jmp命令,然后记录下来,让其更改jmp跳转至我们修改的位置,之后我们在修改的地方执行完dll之后再跳转回原本程序设定好的jmp位置,另外一种就是修改程序领空为我们调用木马dll后,跳转回程序入口点,这个方法还需要更改程序的入口点为我们木马dll的起始点。理论可行,实践开始。
2、免杀dll制作
cs首先生成shellcode。
这里我用的shellcode生成dll免杀是用的k-fire大佬写的一款工具,当然也可以用其他工具写免杀dll。
下载地址:https://github.com/k-fire/shellcode-To-DLL
根据生成的shellcode,我们将其\x替换为空复制进工具中
点击生成后会出现一个shellcode.dll,这个dll的正常运行方式是用同文件下的call_dll.exe
命令:call_dll.exe shellcode.dll
3、将dll执行嵌入进exe中
这里我用的exe是我网上随便下的一个绝地求生外挂,如果是钓鱼红队的话建议用一些比较小众的程序通过更改名称来诱惑红队下载使用,这样可以防止红队去网上下一个没有病毒的程序运行。
将外挂程序拖入x32dbg。
选择开启后程序会自动进入起始点。
记住这个起始点,后面还需要用到。这里找到起始点后,我们往底下滑,找到类似于这种情况的地方。
选择二进制,编辑。
这个时候就会变成这样。
这个时候我们再向底下过几个位置输入以下汇编代码。
Push 0 Push 0x546ED8
这个位置也就是一开始写调用call_dll.exe shellcode.dll最初点。
Call WinExec
Jmp 0x545AF0(ps:这里就是一开始记录的程序入口点)
修改完后进行补丁操作
选择的位置要与原本的位置在同一文件夹下,并且我们需要将运行上线dll文件的东西一起拉进这个文件夹。
然后用lordpe将123.exe的程序入口进行更改。
这个入口点的位置需要更改为图中所指位置
修改完成后进行保存,然后运行123.exe。在kali的cs上就会出现回连。程序也能正常的执行。
我们将修改完成后的文件上传至云沙箱查查毒。
4、总结
目前来说这种方法还会出现一些错误,在程序不同的情况下,会出现木马运行成功,但是程序崩溃,也有可能出现打补丁时0/41的情况,这个可能是修改的是系统领空。还需要继续研究根本原因是啥,但是在某一些软件上是可以成功修改的。