专栏首页Gamma安全实验室Bypass cobaltstrike beacon config scan

Bypass cobaltstrike beacon config scan

前言

近日,360的团队将cobaltstrike stage uri的特征公开了,这着实令我有些感叹,做了我们想做但不敢做的事情。关于对抗方面,我目前看到的都是从stage uri着手,今天将从另一个角度给大家分享一下如何bypass beacon config scan。

beacon检测原理

stager uri的验证规则如下:

只要传入的uri经过checksum8计算,符合条件的话,就下载对应的stage。

而且这一点,在官方文档里其实早有提示:

而这个stage是经过了一系列异或加密的:

想要分析config需要对其进行解密,这里参考一个老外的脚本:

https://sysopfb.github.io/malware,/cobaltstrike/2020/03/24/beacon-in-azure.html

import sys,struct

filename = sys.argv[1]
data = open(filename, 'rb').read()
t = bytearray(data[0x45:])
(a,b) = struct.unpack_from('<II', t)
key = a
t2 = t[8:]
out = ""
for i in range(len(t2)/4):
    temp = struct.unpack_from('<I', t2[i*4:])[0]
    temp ^= key
    out += struct.pack('<I', temp)
    key ^= temp
open(filename+'.decoded', 'wb').write(out)

解密后的程序使用另一个老外的脚本可以解析出马子的配置文件:

https://github.com/Sentinel-One/CobaltStrikeParser

在代码里我们可以发现,cs 3.x版本的配置信息是通过异或0x69解密出的,4.x版本的配置信息是通过异或0x2e解密出的。

winhex手动异或一下:

至此,可以发现,从3.x到4.x,cs自解密的算法没变,自解密后再解密配置文件的算法就只是改了个密钥,而且是固定的(3.x 0x69,4.x 0x2e)。

燥起来

目前,大家用的cs应该都是4.x了吧,所以配置文件的异或密钥为0x2e,如果我们修改了这个密钥,脚本就不能直接获取到配置信息了。

这里以cs4.1为例,给大家讲解一下,如何修改这个密钥。

首先在/beacon/BeaconPayload.class里,我们可以看到对应的异或算法,将反编译出的代码copy出来,拷贝到BeaconPayload.java,修改0x2E为0x3E

编译:javac -encoding UTF-8 -classpath cobaltstrike.jar BeaconPayload.java

报错:

在161行str1前面加个String:

重新编译就好了:

当然,光改这么一个java文件是不行的,接下来的,才是本文的重点。

我们知道,cs在生成shellcode的时候,是要依赖一些模板dll的,而要想实现效果,我们就需要对dll进行反编译并修改,但这些dll是经过加密了的,所以我们还得解密一下。

关于解密,我们可以参考一个脚本:

https://github.com/ca3tie1/CrackSleeve/blob/master/CrackSleeve.java

这里我们改点代码,加密的时候用cs里的密钥就好了:

而密钥在破解版cs4.1在/common/Authorization.class中直接给出了,所以可以直接拿来用:

然后编译:javac -encoding UTF-8 -classpath cobaltstrike.jar CrackSleeve.java

接着decode dll:java -classpath cobaltstrike.jar;./ CrackSleeve decode

发现报错,不要紧,脚本是提取的cs4.0的代码,所以4.1报错也是很正常的。

对比一下代码,发现4.0处理资源的时候,Setup方法中是paramArrayOfByte(认证相关的知识请看文章《Cobaltstrike 4破解之 我自己给我自己颁发license》https://mp.weixin.qq.com/s/Pneu8R0zoG0ONyFXF9VLpg)

而4.1中是CommonUtils.readResource("resources/cobaltstrike.auth")

于是稍微改下脚本:

重新编译后解密文件:

不是我说,兄弟,有了ida,还要什么女朋友???

用ida打开beacon.dll:

搜索0x2E,找到xor的地方:

然后修改字节:

把2E改成3E:

最后别忘了应用:

除了beacon.dll,还有以下dll(代码看得不仔细,如有漏掉,请务必告知~):

beacon.x64.dll

dnsb.dll

dnsb.x64.dll

pivot.dll

pivot.x64.dll

extc2.dll

extc2.x64.dll

由于修改方式都一样,这里就不一一演示了 TaT

dll修改完成,我们还需要加密回去:

java -classpath cobaltstrike.jar;./ CrackSleeve encode

java文件和dll都改好了,现在将修改后的文件放进cs里,其中dll放进/sleeve里:

BeaconPayload.class放进/beacon目录里:

启动cs,确定常用的http和https监听器都能用:

然后使用grab_beacon_config来检测,在web log里,可以看到,脚本请求了stage的uri,但是没有分析出beacon的配置文件:

此刻,我们通过修改cs代码和dll的方式,bypass了beacon config的检测。

改完的文件我传到GitHub了,有兴趣的小伙伴可以自行下载(如有顾虑,可以自己修改):

https://github.com/qigpig/bypass-beacon-config-scan/

以上如有未修改到的地方,请及时与我反馈,共同进步!

最后,关注公众号,后期我们会分享更多有意思的内容,包括cobaltstrike其他方面的一些修改。

最后的最后,不是我说,兄弟,若有女朋友,还要什么ida???

参考链接

[1] https://www.anquanke.com/post/id/157782

[2] https://sysopfb.github.io/malware,/cobaltstrike/2020/03/24/beacon-in-azure.html

[3] https://github.com/Sentinel-One/CobaltStrikeParser

[4] https://mp.weixin.qq.com/s/Pneu8R0zoG0ONyFXF9VLpg

[5] https://github.com/ca3tie1/CrackSleeve/blob/master/CrackSleeve.java

本文分享自微信公众号 - Gamma安全实验室(HackerLearning)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用内存特征检测 Cobalt Strike

    Beacon 通常是反射加载到内存中,还可以配置各种内存中混淆选项以隐藏其有效负载。

    黑白天安全
  • 渗透测试神器Cobalt Strike

    Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,...

    C4rpeDime
  • Malleable-C2-Profiles配置

    在日常的渗透测试工作中,我们需要做很多的规避操作,因为我们所使用的C2工具等,可能早已被AV等防护软件所标记,所以我们需要订制我们的攻击工具。而这就引出了我们的...

    鸿鹄实验室
  • 内网渗透靶机-VulnStack 1

    靶机是红日团队开源的一个靶机,靠着这个环境学习到了很多啊哈哈哈!现在自己也是会搭建一些环境了!也是靠着这个靶机从0开始学内网,了解内网渗透,虽然很菜很菜很菜!靶...

    Gcow安全团队
  • 内网渗透靶机-VulnStack 1

    靶机是红日团队开源的一个靶机,靠着这个环境学习到了很多啊哈哈哈!现在自己也是会搭建一些环境了!也是靠着这个靶机从0开始学内网,了解内网渗透,虽然很菜很菜很菜!靶...

    黑白天安全
  • 红队攻防之隐匿真实Cobalt Strike IP

    点击新建云函数,选择创建方式—自定义创建,函数名称自定义或者默认都可以,运行环境选择python3.6,其他版本也行。

    FB客服
  • Cobalt Strike手册-环境搭建与基本功能

    Cobalt Strike 需要团队服务器才能使用,也就是teamserver。 需要文件 teamserver 与 cobaltstrike.jar 可以选择...

    Ms08067安全实验室
  • 域渗透不用进程窃取如何横向 Bypass Psexec AV 拿到域控?

    大家好,这里是 渗透攻击红队 的第 63 篇文章,本公众号会记录一些红队攻击的案例,不定时更新

    渗透攻击红队
  • 由浅入深的域渗透系列一(下)

    因为192.168.52.0/24段不能直接连接到192.168.33.3(kali地址),所以需要CS派生smb beacon。让内网的主机连接到win7上。

    重生信息安全
  • CobaltStrike二次开发

    首先我们将IEDA中的java-decompiler.jar拿出来,一般在/plugins/java-decompiler.jar/lib/里面。然后新建两个文...

    鸿鹄实验室
  • 红日内网渗透一

    我爱吃瓜瓜
  • 渗透测试常规操作记录(下)

    天钧
  • 记一次详细的内网渗透过程

    尝试各种命令但是发现回显太慢,未找到web路径,无法写web马、exe马,这里尝试使用hta文件。

    HACK学习
  • CobaltStrike 插件编写指南

    由于 Aggressor Script是由Sleep解析的,所以我们先要安装一下这个语言的解释器,这个语言是基于Java的脚本语言

    WgpSec
  • 【实战分享】从sql注入到内网漫游

    对于红队队员来说,打点之后最重要的就是横向的内网渗透了,但很多人都卡在了这一步,今天这篇文章就主要讲一讲cobaltstrike和msf的联动,内网渗透的一些小...

    用户6343818
  • 自动化渗透测试工具包:APT2

    此工具将执行NMap扫描,或从Nexpose,Nessus或NMap导入扫描的结果。processesd结果将用于根据可配置的安全级别和枚举的服务信息启...

    Ms08067安全实验室
  • 建议收藏 | CS学习笔记合集

    自2020年4月份至2020年10月份,笔者更新了自己在学习 Cobalt Strike 过程中的 28 篇笔记,并将笔记同步更新到了自己的公众号、博客、CSD...

    TeamsSix
  • 内网信息收集

    Naraku
  • 怎样一个金箍圈(Pipeline),让至尊宝(Openshift)完成了到孙悟空(DevOps)的蜕变

    但说出这句话,和实现Devops全工具链落地之间的差距,与造出原子弹和E=MC2公式的差距,实不逞多让。

    魏新宇

扫码关注云+社区

领取腾讯云代金券