总字符数: 38.95K
代码: 34.06K, 文本: 2.08K
预计阅读时间: 2.62 小时
什么是特征
特征 : 人或事物可供识别的特殊的象征或标志,
cobalt strike
也有属于自己的特征 , 比如默认开放的端口号是50050 , 自带证书里面有cobalt strike
字符等
为什么要修改特征
因为cs服务器如果默认特征不进行修改的话 , 很容易被搜索引擎或者威胁情报标记成木马远控服务器 , 以及进行一些特征的修改就算ip地址暴露了 , 也不能直接肯定这个ip是木马远控 , 提高自身的隐藏性
如何修改特征
修改特征是针对cs服务端进行特征的修改 , 客户端不需要修改
牢记 : cs服务器需要的时候再开启 , 平常不需要的时候就关闭
修改默认端口
sudo vim teamserver
修改默认证书
推荐付费ssl证书
1.购买域名,申请免费的ssl证书
2.修改teamserver证书密码
查看默认证书
1 | # 默认密码是 Microsoft |
生成伪造证书
1 | sudo mv cobaltstrike.store cobaltstrike.store.bak |
然后在teamserver中修改以下两项即可
1 | -Djavax.net.ssl.keyStore=./cobaltstrike.store |
虽然伪装的证书可以欺骗fofa这类搜索引擎.但毕竟是自签名,使用ssl证书查询工具是查询不到颁发机构的.
真正的证书是由证书签发机构颁布的.可以通过云服务器商免费申请ssl证书,不过国内要实名备案.
推荐国外云服务提供商,他们不需要实名备案.
证书格式推荐jks
的证书,直接修改文件名.然后在teamserver
中配置就可以了.
Certbot免费申请SSL证书
安装Certbot
1 | sudo apt update && sudo apt install certbot |
添加A记录
添加需要申请域名的A记录,指向执行certbot脚本的服务器,
1 | root@kali:/opt/CS# certbot -d ****.today --manual --preferred-challenges dns certonly |
按照上边的提示添加一个name为_acme-challenge.****.today
, value为3aDdvZOMSeocA**********JoETHEQQFqw
的TXT解析记录,保存之后稍等一会儿再按回车,DNS解析需要点时间,大概需要一分钟就能生效.
回车之后,稍等片刻,如果申请成功会看到以下信息.
转换
pem、crt格式的证书需进行转换,先加一下密码.
1 | openssl rsa -in privkey.pem -aes256 -out privkey_with_password.pem |
crt格式—>store
1 | keytool -import -trustcacerts -alias mykey -file domain.crt -keystore domain.store |
然后在teamserver
及profile
对应位置修改证书路径及密码
配置Profile
cs中默认是没有profile
文件的 , 需要自己配置 , 而且官网称profile
文件为Malleablec2
,整个profile
文件的配置就是进行流量上的伪装, 把命令的下发和结果的回传进行包装 , 让他从流量上看起来更像是在访问网页.
全局变量
1 | # 设置全局变量sample_name , 值是当前文件名 |
SSL证书设置
1 | https-certificate { |
SMB
在通过 CS 进行内网渗透的过程中,出网的OA系统与我们的TeamServer服务器建立了HTTP Beacon
进程,而域控系统不出网它与OA系统建立SMB Beacon
的进程,这两个进程之间进行通信就涉及到了一个概念:命名管道
那么我们可以自定义修改什么东西呢?首先了解一下 SMB 头的结构:
1 | # SMB Beacon |
而有一些流量监测设备它会先取到 SMB 的长度值,然后根据长度向后进行匹配数据内容,并将匹配的数据内容与特征库中记录进行对比,如果匹配上了就会被识别出是一个SMB Beacon
的进程,然后就会被查杀.
对抗方法:set smb_frame_header="McZqJerrcYXxBoQNxrepOqPQ \x80";
我们在前面加上一些垃圾字符,使其无法正常匹配到关键信息.在 CS 里SMB Beacon
还会有一个管道名(pipename
),而它的值还是默认的,这部分值也有可能会被提取出来加入特征库,所以我们在使用的过程中必须对pipename
进行一个自定义.set pipename "McZqJerrcYXxBoQNxrepOqPQ-#####";
pipename和pipename_stager字符串不要一样
pipename_stager
:CS 提供一个功能:jump->psexec
使用的就是 SMB 协议,当我们的OA系统与域控系统连接时就是建立的SMB Beacon
进程,建立这样的一个进程会在域控系统上上传某个文件并运行,但是如果这样的文件大小太大,就容易被流量设备检测到并中断,所以这里就应用了一种思想“小马拉大马”,通过上传一个小文件再利用这个小文件上传大文件.这就是pipename_stager
.
TCP
因为现在在内网中SMB的查杀非常严格,所以在我们自定义不好的情况下,可以考虑TCP 建立这样的连接,也就是我们的承载协议变成了 TCP.
1 | # TCP Beacon监听端口 |
DNS-Beacon
1 | dns-beacon { |
SSH-Beacon
1 | set ssh_banner "OpenSSH_7.4 Debian (protocol 2.0)"; # SSH连接的banner信息 |
Http-Stager
Http-Stager块是用来自定义HTTP阶段化(staging)过程的配置,阶段化是Cobalt Strike中的一个重要概念,它指的是将第二阶段的有效载荷(即用于后渗透测试的代码)传输到已经受到攻击者控制的主机上的过程.
1 | # 用于指定是否启用通过HTTP、HTTPS或DNS进行阶段化(第二阶段)的有效载荷(payload)托管, |
Http-Config
不单单是http实际上也是https的全局响应头配置
1 | http-config { |
Http-Get
命令的下发相当于是teamserver(cs服务端)向受害者发送一个get请求
1 | http-get { |
Http-Post
结果的回传相当于受害者向teamserver发送一个post请求
1 | http-post { |
Stage
CS会把shellcode
写入到内存中去,并且创建线程执行这个shellcode
,而这个shellcode
又会申请一块新的内存,不会在原来的内存中进行操作.然后通过网络从TeamServer
服务器上下载一个真正的Beacon
,这个Beacon
是被加密的.图例中”被加密的Payload”,这部分内容就会被写入到第二块内存中去,同时这部分内存还保存有一个可以被识别的解密程序,然后根据这个解密程序它会进行自解密变成两部分,一部分是反射DLL,另一部分是这个反射DLL的Loader
.接着这个反射DLL又会申请一块新内存,并复制Beacon
到新内存中去.最后我们想要执行命令的那些操作功能都将在第三块内存中进行.
1 | stage { |
Post-Ex
我们在执行截屏时不是直接在 Beacon 中执行的,而是起了一个傀儡进程,在傀儡进程中执行,再用命名管道将数据回传回来。
1 | post-ex { |
Process-Inject
进程注入自定义的参数
1 | process-inject { |
Prepend
prepend.py
是一个Python脚本,它生成动态垃圾shellcode
,该shellcode
将附加在实际shellcode
的开头.
1 | python3 prepend.py |
复制输出并将其粘贴到配置文件中(在transform-x64
或transform-x86
块内)
1 | transform-x64 { |
Rich_Header
rich_header
生成动态shellcode
,负责编译器插入的元信息.Rich
标头是一个PE部分,用作Windows可执行文件生成环境的指纹.
1 | python3 rich_header.py |
检查profile文件
1 | chmod +x c2lint |
使用profile文件启动cs:./teamserver 83.***.***.145 123456 jquery-c2.4.5-jx.profile
CS配置linux上线
下载 CrossC2
cs默认是不支持上线linux主机的 , 但是可以通过安装CrossC2插件实现,但也只支持HTTPS beacon
将以上三个文件下载到cs安装目录下的script
目录中,并进行解压
安装插件
复制cs服务端目录下的.cobaltstrike.beacon_keys
到genCrossC2.Win.exe
所在的目录下
然后编辑CrossC2-GithubBot-2021-11-02.cna
文件,填入相关路径Windows下双斜杠
启动cs
,使用客户端加载cna
插件.选择Script Manager
,添加CrossC2.cna
如果成功安装,菜单栏会多出一项CrossC2
上线测试
将服务端的jquery-c2.4.5-jx.profile
文件保存到cs目录,然后新建一个https的监听
选择CrossC2
—>Create CrossC2 Listener
—>Create Reverse HTTPS Listener
1 | host beacon port # 可以更改,未被占用即可 |
生成的木马在CS目录下,上传到Linux服务器并后台运行