1.工具篇 1.1Cobalt Strike及其二开 Cobalt Strike 是一款基于java语言开发的渗透测试神器,常被业界人称为CS神器。(webshell管理、shellcode的生成、钓鱼网站生成、多人团队攻击侧服务器搭建,总之功能非常多)
官方网站:
1 https://www.cobaltstrike.com/
官方文档:
1 https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/welcome_main.htm#_Toc65482705
关于cs的二次开发,包括修改profile文件、修改默认的证书、
安装插件 CrossC2-GithubBot-2021-11-02.cna
魔改cs目的是修改其特征防溯源,或是替换模板让其生成的payload直接达到免杀效果,以及添加实用的插件功能。
主要内容包括:
采用默认http(s)的CS请求url为4位字符串(如aaa9),将这4位字符串作为传入,通过算法checksum8会得到92(93),蓝队可以以此判定为CS连接器为了
防止这一点,可以自定义字符串(如xiaodi),通过checksum8得到其值(比如是115),那么再替换CS源码中的92为115即可
profile文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ##基本语法 # this is a comment , # 是注释 # 设置全局变量 , 和其他无关是cs自身的一些机制 set global_option "value"; # 协议的配置 , 如: http-get , https-post等 # 代码块 protocol-transaction { set local_option "value"; client { # customize client indicators } server { # customize server indicators } }
内容基本上是关于set和一些协议上的配置。
下面会以 jquery-c2.4.5-jx.profile 文件为例来解释其中的各个配置项的作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 # Malleable C2 Profile # Version: CobaltStrike 4.5 # File: jquery-c2.4.5.profile # Description: # c2 profile attempting to mimic a jquery.js request # uses signed certificates # or self-signed certificates # Authors: @joevest, @andrewchiles, @001SPARTaN ### Global Option Block # 设置全局变量 sample_name , 值是当前文件名 set sample_name "jQuery CS 4.5 Profile"; # 设置心跳包的时间 , 单位毫秒 set sleeptime "1000"; # 45 Seconds 1000毫秒==1秒 # set sleeptime "<60000>"; # 1 Minute , 默认的 # 设置心跳包时间的波动范围 45 +- 45*37% set jitter "50"; # % jitter 1 +- 1*50% # 意味着每次HTTP服务器响应时,都会附加一个长度在0到100个字符之间的随机字符串。这样做的目的是为了增加服务器响应的大小的不可预测性,使得Cobalt Strike的通信模式更难以通过网络监控工具被识别和分析。 set data_jitter "100"; # 设置全局的UA头 set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"; ##https-certificate ssl证书配置 https-certificate { set C "US"; #国家 set CN "jquery.com"; set O "jQuery"; set OU "Certificate Authority";set validity "365"; set keystore "cobaltstrike.store"; # 证书文件 set password "1qazwsx"; # 证书密码 } ##SMB和TCP , smb会在横向渗透使用到 ### SMB Beacon set pipename "mojo.5688.8052.183894939787088877##"; ## smb管道的名字 set pipename_stager "mojo.5688.8052.35780273329370473##"; # smb stager管道的名字 set smb_frame_header "\x80"; ### TCP Beacon 监听端口 set tcp_port "42585"; set tcp_frame_header "\x80"; ##DNS beacon , 不经常使用 , 但是对于只有DNS协议出网的设备可以使用 dns-beacon { set dns_idle "74.125.196.113"; ## 第一次dns查询的地址 set dns_max_txt "252"; ## 最大查询次数 , 255以下 , 能被4整除 set dns_sleep "0"; ## sleep时间 set dns_ttl "5"; ## ttl值 set maxdns "255"; # 最大dns服务转接数量 set dns_stager_prepend ".resources.123456."; ## 使用dns协议的马,pe头追加的内容 set dns_stager_subhost ".feeds.123456."; ## 子域名的查询配置 # DNS subhosts override options, added in version 4.3 set beacon "a.bc."; set get_A "b.1a."; set get_AAAA "c.4a."; set get_TXT "d.tx."; set put_metadata "e.md."; set put_output "f.po."; set ns_response "zero"; }
算了,不水字数了,基本上协议都眼熟,看不懂度娘一下。
profile特征的修改参考以下项目:
1 2 3 4 https://github.com/threatexpress/malleable-c2 https://github.com/xx0hcd/Malleable-C2-Profiles https://github.com/Tylous/SourcePoint https://wbglil.gitbook.io/cobalt-strike/cobalt-strikekuo-zhan/malleable-c2
重写Stager和Beacon参考大牛
1 2 3 4 5 6 7 8 9 10 11 12 鸡哥的项目: https://bbs.pediy.com/thread-269115.htm https://github.com/mai1zhi2/SharpBeacon/tree/master WBGlIl大神的项目 https://xz.aliyun.com/t/9929 LiHua大佬的 https://github.com/NoOne-hub/Beacon.dll go项目 https://github.com/darkr4y/geacon/tree/4.0
最后一定要检查是否可用
1 2 3 4 chmod+x c2lint ./c2lint [/path/to/my.profile] # 如 ./c2lint bing_jx.profile # 进行各种协议 如 smb , http , https的请求模拟 , 判断是否可用 , 请求结束下面会有结果输出 (黄色警告,红色语法错误)
修改默认服务端口 1 2 3 4 5 6 vim teamserver ##只需要修改最后一行的-Dcobaltstrike.server_port ## ,可以是 80 , 443 , 3389 , 8080, 8443等常见端口 (1-65535) # start the team server. java -XX:ParallelGCThreads=4-Dcobaltstrike.server_port=8080-Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=Microsoft -server-XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer $*
修改ssl证书 1.购买域名,申请免费的ssl证书
2.修改teamserver证书密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ##查看默认证书 keytool -list-v-keystore cobaltstrike.store Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 输入密钥库口令: # 默认口令是 Microsoft ##生成伪造证书 # 原ssl证书文件备份 mv cobaltstrike.store cobaltstrike.store.bak # 生成证书 keytool -keystore cobaltstrike_new.store -storepass 1qazwsx -keypass 1qazwsx -genkey-keyalg RSA -alias qq.com -dname"CN=US,OU=qq.com,O=Software,L=Somewhere,ST=Cyberspace, C=CN" # ssl证书重命名 mv cobaltstrike_new.store cobaltstrike.store ##然后在teamserver中设置即可 -Djavax.net.ssl.keyStore=./cobaltstrike.store # 注意密码
虽然伪装的证书可以欺骗fofa这类搜索引擎 , 但是毕竟是伪造的 , 使用ssl证书查询工具是查询不到颁发
机构的 , 因为是我们自己生成的, 真正的证书是证书签发机构颁布的 , 腾讯云购买域名就可以免费申请
ssl证书, 不过要实名备案 , 推荐Cloudflare , letsencrypt或各国外云服务提供商不需要实名备案
CrossC2插件 cs默认是不支持上线linux主机的 , 但是可以通过安装CrossC2插件实现
因为一些原因,目前强制只支持HTTPS beacon。
下载地址
1 https://github.com/gloxec/CrossC2/releases
1.2sgn编码器 SGN是一个用于进攻性安全目的的多态二进制编码器,其核心是生成静态不可检测的二进制payloads。该项目基于线性反馈移位寄存器(LFSR)的工作原理,但相比原版,它提供了更多的改进和增强功能,如64位支持、更小的解码器、无明显循环条件的解码过程等。(对cs生成的shellcode进行加密)
github:
1 https://github.com/EgeBalci/sgn
1.3SkyShadow 从本机获取微软 DLL 列表,并快速生成指定文件夹下所有 EXE 的 Unique DLL Hijacking Payload,用于伪造DLL文件。
白加黑 简单来说就是通过白名单的exe运行来去加载恶意的dll达到shellcode加载的目的,那么就需要利用工具对exe加载的dll进行了解。
1 https://github.com/Librafeng/SkyShadow
1.4ZeroEye 用于扫描 EXE 文件的导入表,列出导入的DLL文件,并筛选出非系统DLL,符合条件的文件将被复制到特定的 binX64 或 binX86 文件夹,并生成 Infos.txt 文件记录DLL信息。是和skyshadow一样类型的工具,都是ZeroEye更偏自动化一点,而skyshadow更方便手动制作dll劫持。(后面有时间再补充白加黑的内容)
1 https://github.com/ImCoriander/ZeroEye
2.免杀手法(骚操作)