Cobalt Strike折腾踩坑填坑记录

本文记录了作者在使用Cobalt Strike进行渗透测试时遇到的问题及解决方案,包括基础原理、破戒方法、利用CDN和反代隐藏Teamserver、DNS上线的挑战与解决策略,以及在实践中对Cobalt Strike更深入的理解。
摘要由CSDN通过智能技术生成

0X00 背景

最近在做渗透测试相关的工作,因工作需要准备用Cobalt Strike,老早都知道这款神器,早几年也看过官方的视频教程,但英文水平太渣当时很多都没听懂,出于各种原因后来也没怎么深入了解,所以一直都是处在大概了解的层面上。直到现在有需求了才开始研究,过程中体会也是蛮深,技术这东西真的不能只停留在知道和了解这个层面,就像学一门语言一样需要多动手去实践才能熟练运用的。当然在深入研究某一门技术的过程中难免遇到各种各样的问题,一步一步解决这些问题才是真正学习的过程。对Cobalt strike的学习和研究中我也同样遇到很多的问题,辛得一些素不相识的师傅无私帮助,才解决掉所有的问题,这里把过程中一些问题和解决办法记录下来,以便以后查阅,同时也希望对刚接触Cobatl strike的朋友有所帮助。

0x01 基础原理

基础使用和原理网上有大把的文章和教程,我这里只阐述我个人理解的几个基本点,先说stagestager,在传统的远程控制类软件我们都是直接生成一个完整功能的客户端(其中包含了各种远控所需功能代码),比如灰鸽子(…这里年龄已暴露。。),然后将客户端以各种方式上传至目标机器然后运行,运行后目标机器与我们控制端点对点的通讯。而Cobalt strike把这部分拆解为两部(stagestager),stager 是一个小程序,通常是手工优化的汇编指令,用于下载 stage、把它注入内存中运行。stage则就是包含了很多功能的代码块,用于接受和执行我们控制端的任务并返回结果。stager 通过各种方式(如http、dns、tcp等)下载stage并注入内存运行这个过程称为Payload Staging。同样Cobalt strike也提供了类似传统远控上线的方式,把功能打包好直接运行后便可以与teamserver通讯,这个称为Payload Stageless,生成Stageless的客户端可以在 Attack->Package->Windows Executeable(s)下生成。这部分我也是在研究dns上线时候才算分清楚,这里需要感谢B0y1n4o4师傅的帮助

0x02 关于破戒

目前网上公布版本大多为官方试用版破戒而来且最高版为3.14(5月4号)版,我托朋找了一份3.14官方原版的来,原版的本身没有试用版那么多限制,破戒也相对容易,只需绕过license认证即可,这里在文件common/Authorization.class的构造函数中。

public Authorization() {
   
    String str = CommonUtils.canonicalize("cobaltstrike.auth");
    if (!(new File(str)).exists())
      try {
   
        File file = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
        if (file.getName().toLowerCase().endsWith(".jar"))
          file = file.getParentFile(); 
        str = (new File(file, "cobaltstrike.auth")).getAbsolutePath();
      } catch (Exception exception) {
   
        MudgeSanity.logException("trouble locating auth file", exception, false);
      }  
    byte[] arrayOfByte1 = CommonUtils.readFile(str);
    if (arrayOfByte1.length == 0) {
   
      this.error = "Could not read " + str;
      return;
    } 
    AuthCrypto authCrypto = new AuthCrypto();
    byte[] arrayOfByte2 = authCrypto.decrypt(arrayOfByte1);
    if (arrayOfByte2.length == 0) {
   
      this.error = authCrypto.error();
      return;
    } 
    String[] arrayOfString = CommonUtils.toArray(CommonUtils
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值