逆向CS生成的exe马

前言

Cobalt Strike(以下简称CS)是红队在渗透攻击中的一款神器,使用稳定,功能全面。本文是对CS生成的exe文件进行分析,看看CS生成的木马有什么高明之处。

 

准备工作

工具准备:Cobalt Strike

ida

x32dbg

exeinfope

 

CS能生成的木马有很多种,如下图所示:

这里我不一一介绍,有兴趣的同学自行去研究。我们这里先选择Windows Executable

注:

Windows Executable     生成可执行的分段payload

Windows Executable(S) 生成可执行的不分段Payload

生成之后我们会得到一个exe文件,这是我们今天进行逆向的主角。

 

逆向分析

CS生成的exe其实是一个loder,也就是加载器,加载器加载里面的shellcode来运行主要功能,所以我们进行逆向分析的时候也分成两个步骤:外层loder分析和内层shellcode分析。

外层loder分析

我们先用exeinfope对文件进行简单了解

无壳。接下来扔进IDA进行静态分析。

main函数这里调用了两个函数之后调用了一个Sleep,跟进27F0发现没什么东西,我们直接看1840

pipe是关键字,调用sprintf函数,拼接一个管道名。接下来创建了一个线程,进入创建的线程1713里看看

带着两个参数进入1648,接着看

这就是一个标准的建立管道的一个过程,重点我们关注一下WriteFile那里,向管道写入,写的就是我们的传参,这应该就是加密之前的shellcode。

接下来返回到1840

返回时进入了17E2

先分配一个空间,然后进入1732

标准的从管道读,读的东西就是我们刚才写进的东西。再看158E

先开辟空间,然后将我们刚才读出来的东西与4个循环数进行异或(经过多次调试,发现这四个数每次都是不一样的),最后得到一串解密后的数据,我们有理由猜测,这解密后的数据就应该是执行的shellcode,最后开启线程执行shellcode。当然,光猜是不行的,我们要进行动态调试到内存里去抓抓看。接下来打开x32dbg进行动态调试。

我们跟进到40158E里

 

异或之后的数据存储到了ds:[edi+ecx],我们到内存里跟一下

 

我们可以这是一个非常典型的PE文件,也就是外层加载器加载了一个dll文件,这个dll文件应该是CS马实现功能的主要地方。

至此,我们外层的加载器分析告一段落。

 

内层shellcode分析

进入到StartAddress函数里,有一个jmp eax,会直接跳到我们刚才读出来的DLL,它里面的函数是这样的

第一个call不用太看,call ebx大概看了一下,开辟了一段空间,把这一段的数据写进去,然后下一个call eax转到另一个地方开始执行,这个地方就是我们dll的入口点了。

一点点往里跟踪,看看我们能不能找到有什么有用的信息

网络请求行为:

 

 

设置休眠:

 

这里跟了一下,发现有个sleep函数,应该是与默认心跳有关那里。

 

操作相关:

注意这里,我们有一个InternetReadFile,把返回值读到eax里,这个地方就是判断你输入了什么指令,对应这几种情况

程序的大体逻辑就是这样。

至此,我们已经对CS马的运行逻辑有了基本的了解。

 

不同生成方法对比

当然,我们只是分析了一种的情况,分段的马外层是一样的,但内层有区别,我们简单看一下,

首先看一下解密后的shellcode

很明显和之前不一样了

循环的在获取API

发起请求,用virtualAlloc开辟一段空间,然后不断的用InternetReadfile读取文件,最后得到的dll就和上面的差不多了。

 

 

经过分析我们发现,CS的马主要的一个加载方式是用加载器解密shellcode,然后运行dll,所有主要功能都在dll里面,理论上加载器我们可以随意更换的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Java 生成 cs 框架模板可以使用各种代码生成工具或者插件。其中,Mybatis-plus 是一个比较常用的 Java 框架,它提供了代码生成器,可以快速生成基于 Mybatis-plus 的 CRUD 代码,非常方便。 以下是使用 Mybatis-plus 代码生成生成 cs 框架模板的步骤: 1. 在项目中引入 Mybatis-plus 依赖,可以参考官方文档:https://baomidou.com/guide/ 2. 在项目中引入 Mybatis-plus 代码生成器依赖: ```xml <!-- Mybatis-plus 代码生成器 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis-plus.version}</version> </dependency> ``` 3. 配置代码生成器,在项目中新建一个代码生成器的配置类,可以参考以下示例: ```java @Configuration public class MybatisPlusGeneratorConfig { /** * 生成代码 */ @Bean public void generateCode() { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("author"); gc.setOpen(false); gc.setFileOverride(true); gc.setServiceName("%sService"); gc.setServiceImplName("%sServiceImpl"); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("password"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.example"); pc.setEntity("entity"); pc.setMapper("mapper"); pc.setService("service"); pc.setServiceImpl("service.impl"); pc.setController("controller"); mpg.setPackageInfo(pc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); // 公共父类 // strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController"); // 写于父类中的公共字段 // strategy.setSuperEntityColumns("id"); strategy.setInclude("user"); // 逆向工程要生成的表名,可以传入多个表名 strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); mpg.execute(); } } ``` 4. 运行代码生成器,即可在项目中生成对应的 cs 框架模板代码。 ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 其中,`generateCode()` 方法会在项目启动时自动执行,生成代码。生成的代码会根据配置,生成在 `com.example` 包下的 `entity`, `mapper`, `service`, `service.impl`, `controller` 等目录下,其中 `entity` 目录下是实体类,`mapper` 目录下是 Mybatis-plus 的 mapper 接口和 xml 文件,`service` 和 `service.impl` 目录下是服务类和服务实现类,`controller` 目录下是控制器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值