ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CobaltStrike 4.0实战:从Beacon上线到内网横向的完整链路

CobaltStrike 4.0实战:从Beacon上线到内网横向的完整链路 简介Cobalt Strike 4.0 是一款面向网络安全专业人员、红队与渗透测试者的商用模拟攻击与后渗透平台常见于企业安全评估、钓鱼演练和命令控制基础设施测试适合具备一定Web安全与渗透基础的从业人员学习研究。压缩包共五十四份文件约三十五兆字节内含主程序包、团队服务器组件、多种二进制数据、日志、PowerShell脚本、扩展脚本、动态库、插件以及中文用户手册目录覆盖了启动、扩展、数据存储与文档说明等模块。已有五百零五人浏览学习反映出该工具在安全领域的关注度较高。读者拿到这份资源后可以搭建命令控制服务器实践后门生成、监听器管理、网站克隆、信息收集和渗透测试报告生成等核心功能也能结合扩展脚本与手册深入理解红队攻击链与防御思路为提升企业内网安全防护水平提供实战参考。 CobaltStrike 4.0这套东西圈内人一般叫它CS严格来说它不是一个“漏洞利用工具”而是一个攻击后渗透平台。你可以把它理解成你已经拿下一台机器权限之后用来做权限维持、内网横向、批量控制、数据回传的“总指挥所”。红队用它做授权的攻防演练蓝队也用它来反推攻击链路。4.0版本虽然已经出了好几年但直到现在很多实战项目里的核心操作逻辑依然是围绕这个版本来搭的。这篇文章我不打算照着官方手册给你翻译一遍而是从我实际部署和使用的角度把从拿到压缩包到上线、再到内网横向思路的完整链路拆开讲清楚。包括哪些配置必须改、哪些操作会踩坑、哪些功能被很多人用错方向了一次性说透。1. 部署之前必须想明白的事这不是装个软件那么简单很多人第一次拿到这个压缩包第一反应是解压、点启动、然后连一下试试。如果你只是在自己虚拟机里学习那无所谓。但如果你准备在真实攻防项目里用有几个前置决策直接影响你这个队能不能打下去。1.1 服务端环境选择的逻辑CS的架构是C/S模式服务端teamserver跑在Linux上客户端GUI跑在Windows或者macOS上客户端通过TLS加密通道连接服务端。部署之前你优先要考虑的不是“哪个发行版好看”而是服务端放在哪里、怎么隐藏、怎么保证稳定。我自己常用的环境是Ubuntu 20.04内存 2GB 起带宽能跑满就行。云主机或者VPS都行但有两个硬性要求第一防火墙策略要极简默认只开50050客户端连接端口和你在C2配置里指定的监听端口第二不要把服务端放在你日常办公的同一个网络环境里这是纪律问题不是技术问题。1.2 客户端连接与团队协作方式CS 4.0的客户端是图形化界面启动之后会要求填服务端IP、端口默认50050、用户名和密码。密码是在启动teamserver时指定的这里有个关键点同一个团队协作时所有人连接的是同一个teamserver而不是各起各的服务端。这样做的最大好处是所有人都能看到同一个目标环境里的所有beacon会话、文件列表、命令执行记录日志也是统一的复盘的时候非常方便。如果你是自己一个人做测试也要习惯“服务端-客户端”分离的模式不要直接在服务器上开个VNC去操作效率低且不安全。1.3 启动参数里的门道启动teamserver的标准命令是./teamserver 你的IP 密码 可选的C2配置文件很多人忽略第三个参数——配置文件。默认启动虽然能用但特征非常明显流量层面很容易被设备识别。我在实际项目里第一步一定是先写一个自己的Malleable C2 Profile改掉默认的HTTP请求特征和返回内容特征然后再启动服务端。这一步不做后面做得再多都白搭。2. 生成木马与上线操作Beacon 的生命周期管理CS的核心模块是Beacon它是你植入目标机器后返回给C2服务器的“小跟班”。Beacon支持HTTP、HTTPS、DNS等多种通信方式4.0版本对DNS beacon的支持已经很成熟了。2.1 创建监听器选型直接影响存活率在CS客户端里“Listeners”是最先要配置的东西。新建监听器时你需要确定三件事通信协议HTTP/HTTPS/DNS、监听IP/端口、以及对应的Profile文件如果自定义了的话。我的建议是优先级从高到低分别是 HTTPS HTTP DNS。HTTPS流量有TLS加密即使被中间设备检测到也只能看到“某个IP的443端口互通”识别成本最高。HTTP配置简单但特征容易被规则抓到适合短期、低对抗场景。DNS为了隐蔽性极强但速度慢适合作为备用通道不适合主力。这里有一个非常容易踩的坑很多人创建HTTPS监听器时证书用的是默认自签名证书这在蓝队设备上一眼就能看出来。正规做法是给监听器指定一个可信的证书或者直接用云厂商的免费证书让流量看起来更“正常”。2.2 生成木马时的文件类型选择创建好监听器后在Attacks - Packages - Windows Executable 里可以生成Stageless或Staged的木马。这两者的区别要理解透Staged体积小先传一个小壳子过去运行时再去C2下载完整Payload。好处是初始投递体积小坏处是网络流量里明显多了一次“下载payload”的行为设备容易拦截。Stageless把完整的beacon直接打包进文件里体积大一些但运行时不需要再额外通信检出难度稍微低一点。实战中我更喜欢Stageless尤其是在目标环境有出网流量监控的情况下减少一次请求就少一分暴露风险。2.3 上线后第一时间要做的三件事当Beacon成功上线你会在客户端看到一个新的会话。这时候别急着拉命令先做三件事查看系统基本信息shell whoami、systeminfo确认当前权限级别和操作系统版本。确认出网情况与代理设置shell ipconfig /all看是否有内网代理、DNS后缀、是否有域环境痕迹。延迟与心跳调整默认sleep时间是60秒也就是说beacon每60秒来服务器“报到”一次。如果目标网络检测较严建议调整到600秒以上命令执行时再用sleep 5临时降下来执行完再调回去。sleep 600这个操作很多人不重视结果就是beacon因为频率太高直接被EDR拉黑删除。Beacon不是越快越好而是要“藏得住”。3. 视图与交互别只会输入命令这些面板才是生产力CS 4.0的界面很多人第一次打开会一头雾水顶部菜单各种视图眼花缭乱。其实它核心就几个面板理解清楚之后效率翻倍。3.1 Target 视图目标网络的“活地图”Target视图是自动绘制的只要你在内网里执行过扫描或者登陆过某台机器它就会自动记录IP、主机名、操作系统、开放端口这些信息。你后续做内网横向时所有目标都在这里排列得明明白白。我习惯的做法是每做一轮内网资产识别就回到Target视图过滤一遍看哪些主机已经被我们拿下了哪些是新的可尝试目标。这个视图配合Credentials记录就是自己的“情报库”。3.2 Credentials 视图密码重用的直接受害者Credentials视图里记录的是你通过各种方式获取到的明文密码、Hash、以及对应的主机和用户。很多人拿到密码后随便记在自己的记事本里等到要用的时候又得重新去翻项目结束一团乱。CS的好处是你在beacon里执行hashdump或者mimikatz拉出的凭据只要通过右键导出并“Add Credential”系统就会自动关联到Credentials视图。后续横向移动时直接选择目标主机 - Login - 选择刚才记录的凭据效率极高。3.3 Script Console自动化操作的入口很多教程会忽略这个面板。实际上在View - Script Console里你可以直接调用CS内置的Aggressor Script函数也可以自己写脚本批处理。比如批量执行命令、批量上传文件、批量重置sleep时间。举个例子你对内网20台机器都上线了beacon想给它们全部下发一条命令并只收集回显手动点20次就废了。写一段简单的脚本循环一行搞定foreach (session in allSessions()) { bshell(session, whoami); }用这个功能的前提是你能看懂宽容的Aggressor Script语法建议入门阶段先手动操作熟练之后再碰自动化。4. 可扩展脚本与自定义C2 Profile才是灵魂CS 4.0之所以在很多对抗演练中“经久不衰”除了本身功能扎实之外Malleable C2 Profile和Aggressor Script这两套机制功不可没。前者决定了你的流量长什么样后者决定了你的操作效率有多高。4.1 Malleable C2 Profile 的配置要点C2 Profile的本质是给你一个“改写C2通信流量特征”的接口。你可以设定HTTP请求的URL路径、User-Agent、Host头、返回内容的包装格式甚至可以指定每个请求的Jitter比例让流量尽可能像正常业务。这里我说一个很多新手会犯的错误配置文件里改了很多特征但因为使用了不规范的参数或者引用了不存在的函数导致teamserver直接启动失败。排查的方法是先不要启用Profile启动服务端在本地用官方提供的c2lint工具检查配置文件的语法和逻辑。./c2lint myprofile.profile跑完没有报错再用来启动teamserver。4.2 Aggressor Script 的实战价值Aggressor Script是CS的脚本语言基于Java/JavaScript语法。它几乎可以控制CS的每个操作面你可以重写右键菜单可以新增快捷按钮可以自动处理事件。举个例子你可以设定每次beacon上线时自动执行一段命令。这个逻辑很多手动党都是肌肉记忆去执行但一旦目标数量多了程序化执行是唯一可靠的方式on beacon_initial { bshell($1, powershell -ep bypass -f update.ps1); }写完脚本后在客户端里通过Script Manager加载即可。加载之后立刻所有人都能使用对团队协作的体验提升是巨大的。5. 内网横向利用已有凭据做批量控制当你拿到一台机器的System权限且目标网络是Windows域环境时内网横向就是下一步的核心工作。5.1 从本机凭据开始在beacon里执行hashdump这个命令会读取本机的SAM文件把本地用户的NTLM Hash导出来。如果当前权限足够高你就有机会用这些Hash做PTHPass The Hash直接登录其他机器。如果目标机器上还有缓存的域凭据用mimikatz来抓取输出的信息量会比hashdump大得多。这里需要提醒一点mimikatz的使用要谨慎尤其是EDR环境里这是高敏感操作。不要一上来就全量读取先根据当前上下文判断是否有必要。5.2 利用Beacon的Jump和Logins有了凭据后不需要手动用psexec去建立连接。在CS的Target视图里选中你要横向的目标主机右键 - Jump - 选择Psexec或WinRM填入凭据即可在该主机上派生出一个新的beacon会话。这里有一个非常有用的技巧横向移动时不要直接使用当前主机的beacon去执行在CS里选择Link Listener跑一个HTTPS的监听器这样新会话直接回连到你的服务器而不是从原有beacon里转手。这种方式能有效减少对已有主机的依赖增加整个C2链路的冗余。5.3 避免横向后的“连锁暴露”每次横向登录成功目标机器的事件日志里都会留下526、4624这类登录记录。如果你不做清理蓝队一旦查起来顺着日志就能把你整条横向链路翻出来。我常用的清理方式是横向完成之后在beacon里执行clearev把当前机器的Application、Security、Setup日志全部清掉。但要注意过早清理反而会引起注意一般等一个项目阶段完成确认不再需要该主机做溯源回退时再统一清理更稳妥。6. 常见报错与排查一次性解决90%的启动问题很多人在部署环节就被卡住最大的原因不是功能不会用而是报错信息看不明白。我把实际踩过的坑整理成表格按优先级排列现象大概率原因处理方式teamserver启动就闪退Java版本不对或者内存分配太小用OpenJDK 11启动前设置JAVA_HOME客户端连接超时安全组端口没放行或者服务端防火墙拦截确认TCP 50050端口可达Beacon上线后掉线监听器协议与目标出口不匹配换HTTPS或DNS并减少sleep频率C2配置加载报错C2 Profile语法问题用c2lint检查另存为UTF-8无BOMhashdump执行失败当前beacon权限不够先提权或使用getsystem命令以上几类问题覆盖了日常使用中绝大部分的故障场景。7. 最后说几点必须养成的习惯第一团队协作时所有人都要养成规范化命名的习惯。会话命名建议带上目标主机IP用途比如10.10.1.5-web-prod否则一旦上线数量超过10个光靠记忆根本理不清。第二配置文件、凭据数据、操作记录离开项目环境后要有销毁机制。CS项目不是娱乐工具里面保存的都是授权测试或演练过程中的敏感数据项目结束后该清理的要及时清理这是纪律。第三如果你打算在真实演练中把CS用到极致建议把它的日志系统对接自建的数据分析平台。CS本身会生成一个sqlite库里面记录了每一次操作、每一次凭据获取、每一次横向移动这些数据是复盘的宝贵资产。我自己在建这个环境时从部署到跑通第一个beacon真正顺畅起来差不多用了两三个晚上。一开始容易被各种小问题卡住但一旦把前面说的这些基础打牢后面做任何项目CS这套流程都稳得很。本文还有配套的精品资源点击获取
返回列表