首页 > 其他分享 >红队开发学习----魔改cobaltstrike学习(持续更新)

红队开发学习----魔改cobaltstrike学习(持续更新)

时间:2023-11-29 20:14:42浏览次数:45  
标签:java 魔改 jar return uri ---- cobaltstrike 20 红队

目录

环境和工具准备

1.jdku8环境 这里用的是jdk8u321,版本太低的java可能启动不了
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html#license-lightbox
2.linux的ij idea
3.cs4.4源码
4.反编译工具Luyten
5.破解工具CSAgent.zip
6.破解cs的dll

反编译CobaltStrike_4.4_000.jar

java -jar luyten-0.5.4.jar


save all到一个新创建的目录

Idea项目

idea创建一个java项目


创建两个目录decompiled和lib

然后把反编译的decompiled-CobaltStrike_4.4_000.zip解压缩到decompiled目录,类似

unzip decompiled-CobaltStrike_4.4_000.zip -d /root/IdeaProjects/MyCobaltStrike/decompiled

改一下名

mv CobaltStrike_4.4_000.jar cobaltstrike.jar

然后将cobaltstrike.jar拷贝到lib目录

cp cobaltstrike.jar /root/IdeaProjects/MyCobaltStrike/lib

添加到Modules

添加Artifacts

HelloWorld测试代码

将decompiled/aggressor/Aggressor.java文件复制至src/aggressor/Aggressor.java

添加一段

JOptionPane.showMessageDialog(null, "Hello world");


在Modify options选择Add VM options
然后添加

-XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx2048M



最后运行

去除凭证读取

将decompiled/common/中的Authorization,Helper,Starter,Starter2复制到src/common目录下,将decompiled/beacon/BeaconData.java复制到src/beacon目录下
进入到Authorization.java
删除或注释掉

        String s = CommonUtils.canonicalize("cobaltstrike.auth");
        if (!new File(s).exists()) {
            try {
                File parentFile = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
                if (parentFile.getName().toLowerCase().endsWith(".jar")) {
                    parentFile = parentFile.getParentFile();
                }
                s = new File(parentFile, "cobaltstrike.auth").getAbsolutePath();
            }
            catch (Exception ex) {
                MudgeSanity.logException("trouble locating auth file", ex, false);
            }
        }
        final byte[] file = CommonUtils.readFile(s);
        if (file.length == 0) {
            this.error = "Could not read " + s;
            return;
        }

final byte[] decrypt = authCrypto.decrypt(file);更换为如下

        final byte[] decrypt = {1, -55, -61, 127,   //证书时间限制29999999(永久)
                0, 0, 0, 1,     //watermark(水印)
                44,     //版本
                16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
                16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
                16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
                16, 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103,
                16, 94, -104, 25, 74, 1, -58, -76, -113, -91, -126, -90, -87, -4, -69, -110, -42};


Helper.java中startHelper注释得恒返回true

Start.java中initializeStarter注释掉全部,只留下方法头

Start2.java中initialize同理

将beacon/BeaconData.java里面的this.shouldPad = shouldPad;改为this.shouldPad = false;

修复两处报错

protected List<byte[]> getQueue(final String s) {
    synchronized (this) {
        if (this.queues.containsKey(s)) {
            return (List<byte[]>) this.queues.get(s);
        }
        final LinkedList<byte[]> list = new LinkedList<>();
        this.queues.put(s, list);
        return list;
    }
}
public int getMode(final String s) {
    synchronized (this) {
        final Object modeObj = this.modes.get(s);
        if (modeObj instanceof String) {
            String s2 = (String) modeObj;
            if ("dns-txt".equals(s2)) {
                return 2;
            }
            if ("dns6".equals(s2)) {
                return 3;
            }
            if ("dns".equals(s2)) {
                return 1;
            }
        }
        return 2;
    }
}

这下可以删掉或注释掉HelloWorld的测试代码

此时运行可以弹出登录框

生成jar包,build artifacts



将MyCobaltStrike.jar改名为cobaltstrike.jar
将CSAgent.zip上传到服务端(这里仍然是kali),解压
将cobaltstrike.jar上传到CSAgent目录,服务端启动

./teamserver ip password


然后回到idea 客户端连接

teamserver端配置修改

teamserver默认配置

端口

将-Dcobaltstrike.server_port修改为其他端口即可

证书

查看证书中的信息,口令:Microsoft

keytool -list -v -keystore cobaltstrike.store


生成新证书

rm -rf cobaltstrike.store
keytool -keystore cobaltstrike.store -storepass strongpass -keypass strongpass -genkey -keyalg RSA -alias Google -dname "CN=(CN), OU=(SHANGHAI), O=(SHANGHAI), L=(DONGCHENG), ST=(SHANGHAI), C=(CN)" -validity 36500

teamserver修改最后的部分

java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=1234 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=strongpass -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar -javaagent:CSAgent.jar=CSAgent.properties -Duser.language=en server.TeamServer $*

profile配置

JA3|JA3S/JARM 指纹修改

其中一种方法

vim java_home/jre/lib/security/java.security

添加TLSv1.3

源码层面修改

stager导致配置泄漏

修改xor密钥(未进行,没研究明白,怕改崩了)

修改stager下载路径的长度

修改src/common/CommonUtils.java里面
修改4为其他数值(例如6)

public static String MSFURI() {
        return MSFURI(4);
    }

添加string = "/" + pick(array)...中的pick(array)至六个(如果前面修改的数值为6)

    public static String MSFURI_X64() {
        final String[] array = toArray("a, b, c, d, e, f, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9");
        String string;
        do {
            string = "/" + pick(array) + pick(array) + pick(array) + pick(array);
        } while (checksum8(string) != 93L);
        return string;
    }

将decompiled/cloudstrike/WebServer.java复制到src/cloudstrike里面
可以这么修改(如果前面修改的数值为6)

   public static boolean isStager(final String uri) {
        return checksum8(uri) == 92L && uri.matches("/[A-Za-z0-9]{6}");
    }
    
    public static boolean isStagerX64(final String uri) {
        return checksum8(uri) == 93L && uri.matches("/[A-Za-z0-9]{6}");
    }
    
    public static boolean isStagerStrict(final String uri) {
        return isStager(uri) && uri.length() == 7;
    }
    
    public static boolean isStagerX64Strict(final String uri) {
        return isStagerX64(uri) && uri.length() == 7;
    }

修复一个漏洞

WebServer.java在_serve方法开头添加

if (!uri.startsWith("/")) {
            return this.processResponse(uri, method, header, param, false, null, new Response("400 Bad Request", "text/plain", ""));
        }

参考文章

https://pingmaoer.github.io/2020/06/24/CobaltStrike二次开发环境准备/
https://ucasers.cn/对cobaltstrike4.4的简单魔改/
https://blog.csdn.net/SHELLCODE_8BIT/article/details/121597311
https://blog.csdn.net/l1593572468/article/details/124039120
https://hosch3n.github.io/2020/12/16/检测与隐藏Cobaltstrike服务器/#CDN

标签:java,魔改,jar,return,uri,----,cobaltstrike,20,红队
From: https://www.cnblogs.com/thebeastofwar/p/17839287.html

相关文章

  • b站听歌
    1.打开剪影开始创作、素材库透明背景,选择自己喜欢的音乐。添加歌手照片,画中画,可以改成园型的,蒙版拉到后面。添加歌名文字,拉倒后面。增加歌手名字。识别歌词。增加贴纸,选择音符。......
  • MPR图,MIP图,MiNP图区别
    1、多平面重建(MPR)是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行冠状、矢状位、任意角度斜位图像重组。优点:(1)能任意产生新的断层图像,而无需重复扫描。(2)原图像的密度值被忠实保持到了结果图像上。(3)曲面重组能在一幅图像里展开显示......
  • Codeforces Round 829 (Div. 1)A1. Make Nonzero Sum (easy version)(思维找规律)
    先考虑无解的情况:当n为奇数时无解相邻的两个元素一定可以变成0\[a[i]!=a[i+1]时,分成[i,i],和[i+1,i+1]\]\[a[i]=a[i+1]时,分成[i,i+1]\]这两种情况对答案的贡献都是0,当n为奇数时我们总会有一个没办法凑成0.#include<bits/stdc++.h>#definelsp<<1#......
  • DASCTF 2023 & 0X401七月暑期挑战赛-web复现
    别问为什么不复现十一月的那个比赛,因为不会wwwww。EzFlask进去就有源码了,先cv到编辑规范看一下:importuuidfromflaskimportFlask,request,session,jsonfromsecretimportblack_listapp=Flask(__name__)app.secret_key=str(uuid.uuid4())defcheck(data):......
  • nginx 报 accept4() failed (24: Too many open files)
    nginx报accept4()failed(24:Toomanyopenfiles)ulimit-aulimit-n204800vim/etc/security/limits.conf<domain><type><item><value>*softnofile204800*hardnofile204......
  • Java——lambda表达式
    一、概述简化代码开发,可以实现函数式的编程。利用函数式的编程可以避免面向对象过程中一些的繁琐的问题lambda是一把双刃剑二、使用场景1.能够使用lambda表达式的一个重要依据是必须有相应的函数接口。所谓函数接口,是指内部有且仅有一个抽象方法的接口。2.la......
  • 冒泡排序
    一、冒泡排序介绍冒泡排序一般来说是我们最早接触到的排序算法,它的核心思想就是“比较大小,交换数字”,时间复杂度为O(n2)。它的实现过程也非常的简单,只需要掌握循环以及判断语句的使用就可以实现。二、实现以及详解先展示一下代码://定义一个arr数组并赋值intarr[9]......
  • if语句
    console.log()是JavaScript中用于在控制台输出信息的常用方法   说明()里面是条件,当这个条件为真的时候,才会执行否则执行代码2说明:()里面是条件,当这个条件为真的时候,才会执行()里面的代码如果条件不为真,不会执行()  ......
  • .net core中实现服务自动发现
    .netcore中自带了依赖注入框架,asp.netcore或worker框架下可以直接使用,控制台程序可以通过加入Microsoft.Extensions.DependencyInjection程序包来支持。自带的di框架功能还行,但是一个不方便的地方是没有提供服务自动发现、注册的接口,稍微大的程序都是需要通过反射自己写一个发......
  • Web_XCTF_WriteUp | baby_web
    题目提示:想想初始页面是哪个题目:分析看到提示首先想到的是把/1.php删掉:但还是回到这里。打开F12再跑了一遍,拦截到三个包:检查每个包,在302状态码包里找到flag:Flagflag{very_baby_web}参考HTTP状态码-菜鸟教程......