首页 > 其他分享 >cobalt strike stage payload 生成分析

cobalt strike stage payload 生成分析

时间:2022-11-09 12:00:13浏览次数:54  
标签:var4 var3 var2 CommonUtils cobalt replaceAt strike payload

前言:cobalt strike stage payload 生成分析笔记,这里主要学习cs如何进行构造payload

分阶段stage payload生成

这里的话主要分析就是客户端中的aggressor.dialogs.WindowsExecutableStageDialog#dialogAction

如上图所示点击generate,这个部分主要就是在窗口上进行选择相关的选项,然后进行生成的入口点

获取相关的payload的系统位数和对应的listener,然后调用getPayloadStager

      boolean var3 = DialogUtils.bool(var2, "x64");
      String var4 = DialogUtils.string(var2, "listener");
      this.stager = ListenerUtils.getListener(this.client, var4).getPayloadStager(var3 ? "x64" : "x86");

getPayloadStager中先调用了getPayload,获取通信的类型,我这里选择的是https

接着就是走到stagers.Stagers#shellcode方法中,这里会通过stagers.Stagers#resolve方法,该方法会根据对应的listener和系统位数获得一个GenericStager对象来进行使用

接着就是通过stagers.GenericStager#generate

  • 首先通过CommonUtils.resource(this.getStagerFile());拿到对应的stage文件的样本,我这里生成的是resources/httpsstager.bin
   public String getStagerFile() {
      return "resources/httpsstager.bin";
   }

如果你将resources/httpsstager.bin文件拖入到hex编辑器中,你会发现展示如下图所示

  • CommonUtils.readAll(var1); 得到对应的字节流

  • CommonUtils.bString(var2); 对上面读取的字节流进行ISO8859-1字符编码转换

  • var3 = var3 + this.getListener().getStagerHost() + '\u0000'; 在末尾继续拼接通信的Host字段

public byte[] generate() {
      try {
         InputStream var1 = CommonUtils.resource(this.getStagerFile());
         byte[] var2 = CommonUtils.readAll(var1);
         String var3 = CommonUtils.bString(var2);
         var1.close();
         var3 = var3 + this.getListener().getStagerHost() + '\u0000';
         Packer var4 = new Packer();
         var4.little();
         var4.addShort(this.getListener().getPort());
         AssertUtils.TestPatchS(var2, 4444, this.getPortOffset());
         var3 = CommonUtils.replaceAt(var3, CommonUtils.bString(var4.getBytes()), this.getPortOffset());
         var4 = new Packer();
         var4.little();
         var4.addInt(1453503984);
         AssertUtils.TestPatchI(var2, 1453503984, this.getExitOffset());
         var3 = CommonUtils.replaceAt(var3, CommonUtils.bString(var4.getBytes()), this.getExitOffset());
         var4 = new Packer();
         var4.little();
         var4.addShort(this.getStagePreamble());
         AssertUtils.TestPatchS(var2, 5555, this.getSkipOffset());
         var3 = CommonUtils.replaceAt(var3, CommonUtils.bString(var4.getBytes()), this.getSkipOffset());
         var4 = new Packer();
         var4.little();
         var4.addInt(this.getConnectionFlags());
         AssertUtils.TestPatchI(var2, this.isSSL() ? -2069876224 : -2074082816, this.getFlagsOffset());
         var3 = CommonUtils.replaceAt(var3, CommonUtils.bString(var4.getBytes()), this.getFlagsOffset());
         String var5;
         if (CommonUtils.isin(CommonUtils.repeat("X", 303), var3)) {
            var5 = this.getConfig().pad(this.getHeaders() + '\u0000', 303);
            var3 = CommonUtils.replaceAt(var3, var5, var3.indexOf(CommonUtils.repeat("X", 127)));
         }

         int var6 = var3.indexOf(CommonUtils.repeat("Y", 79), 0);
         var5 = this.getConfig().pad(this.getURI() + '\u0000', 79);
         var3 = CommonUtils.replaceAt(var3, var5, var6);
         return CommonUtils.toBytes(var3 + this.getConfig().getWatermark());
      } catch (IOException var7) {
         MudgeSanity.logException("HttpStagerGeneric: " + this.getStagerFile(), var7, false);
         return new byte[0];
      }
   }

标签:var4,var3,var2,CommonUtils,cobalt,replaceAt,strike,payload
From: https://www.cnblogs.com/zpchcbd/p/16870856.html

相关文章

  • This class is not trusted to be serialized as ObjectMessage payload.ActiveMQ序列
    引子ObjectMessage引入的生产者和消费者之间的类路径耦合,ActiveMQ支持他们作为JMS规范的一部分。ObjectMessage对象依赖marshal/unmarshal进行java序列化,这个过程是......
  • TopCoder14563 DerangementsStrikeBack
    使用类似传统的错排公式\(D(n)=(n-1)\times(D(n-1)+D(n-2))\)的推导过程。首先,\(D_i\)整体除了一个\(n!\),代表后\(n\)个球整体相同。局面设定为求\(......
  • CF 883D(Packmen Strike Back-吃豆人)
    一条序列上有n个空位,上面要么是吃豆人,要么是豆,要么是空位。现在给每个吃豆人指定一个方向,游戏开始后每个吃豆人同时向前移动直到遇到边界后不动。问吃豆人最多能吃几个豆子,......
  • NS-Atmosphere payload Programmer
    NS-Atmosphere payloadProgrammer通过该软件将任意payload烧写到NS-Atmosphere注入器中,兼容windows,ubuntu,苹果MACOS官网跑路了...备份下... 阿里云盘......
  • 通过命名管道检测Cobalt Strike——todo,待实际复现测试
    CobaltStrike命名管道检测CobaltStrike使用的命名管道的创建已知的误报未知参考https://twitter.com/d4rksystem/status/1357010969264873472https://labs.f-......
  • msfvenom各平台payload生成
    二进制windowsmsfvenom-pwindows/meterpreter/reverse_tcpLHOST=10.211.55.2LPORT=3333-ax86--platformWindows-fexe>shell.exemsfvenom-pwindows/x64/meterp......