Listeners-监听器
监听器面板
创建监听器
Payload有6种不同的类型
DNS Beacon
- 使用 DNS 协议(通常是 DNS A 记录查询)与 TeamServer 通信HTTP Beacon & HTTPS Beacon
- 使用 HTTP 或 HTTPS 协议与 TeamServer 通信,是最常用的 Beacon 类型SMB Beacon
- 使用 Windows 的 SMB(Server Message Block)协议进行通信,通常用于内网横向移动TCP Beacon
- 使用原始的 TCP 协议与 TeamServer 通信,通常用于特定场景下的直接连接External C2
- 是一种机制,允许 Beacon 通过第三方工具或自定义协议与 TeamServer 通信Foreign Listeners
- 不是一种独立的 Beacon 类型,而是一种配置方式,允许 TeamServer 监听来自其他工具(如 Metasploit)的 Payload 连接
CS 的 Beacon
核心组件之一,是一种轻量级的后门代理(Payload),用于在目标系统上执行命令、收集数据并与团队服务器(Team Server)通信。Beacon 是 Cobalt Strike 实现命令与控制(Command and Control, C2)功能的关键部分
- Beacon通过HTTP、HTTPS或DNS通信,还可以通过Windows命名管道和TCP套接字控制
- Beacon支持异步和交互式通信
- Beacon可进行重定义通信来伪装成其他恶意软件或混入合法流量
系统调用的函数
Beacon的payload已经实现使用系统调用而不是标准Windows API函数,目前Beacon支持的一组有限函数如下:
CloseHandle
CreateFile
CreateFileMapping
CreateThread
DuplicateHandle
GetThreadContext
MapViewOfFile
OpenProcess
OpenThread
ReadFile
ReadProcessMemory
ResumeThread
SetThreadContext
UnmapViewOfFile
VirtualAlloc
VirtualAllocEx
VirtualFree
VirtualProtect
VirtualProtectEx
VirtualQuery
WriteFile
WriteProcessMemory
WriteProcessMemory
CS4.11新增了如下的一些API
NtQueueApcThread
NtCreateProcess
NtOpenProcessToken
NtTestAlert
NtSuspendProcess
NtResumeProcess
NtQuerySystemInformation
NtQueryDirectoryFile
NtSetInformationProcess
NtSetInformationThread
NtQueryInformationProcess
NtQueryInformationThread
NtOpenSection
NtAdjustPrivilegesToken
NtDeviceloControlFile
NtWaitForMultipleObjects
当生成了stageless(无阶段)的Beacon可以选择使用哪一种系统调用
System Call Method |
描述 |
None |
使用标准Windows API函数 |
Direct |
使用Nt* 版本函数 |
Indirect |
跳转到函数Nt*版本的适当指令 |
可在profile
设置 stage.syscall_method
来控制初始的方法
以下是stage.syscall_method
设置的字段
- elevate
- inject
- jump
- spawn
- spawnas
- spawnu
- team server responding to a stageless payload request
- team server responding to an external c2 paylaod request
syscall-method [method]
命令用于修改方法,不带任何参数就会查询当前方法
Beacon的安全防护
设置Beacon时,CS的TeamServer会生成独有的公私钥对。公钥嵌入到Beacon的有效Payload
Beacon会加密每一个会话元数据,再发送给TeamServer,此元数据包含该Beacon生成的随机会话密钥。每个Beacon实现和数据通道都使用相同的方案
阶段Beacon - payload stager
阶段Beacon分为两部分:
- the payload stage(shellcode)
- the payload stager(shellcode下载执行器)
stager
是一个小的程序,通常是手动优化的程序集,它会下载payload stage
,将其注入内存,并将执行传递给它
可在profile中设置是否将其开启或关闭
host_stage
选项设置为 false。这将防止Cobalt Strike在其Web和DNS服务器上托管有效负载阶段。这样做有很大的OPSEC好处
通过stage,任何人都可以连接到您的服务器,请求有效负载,并分析其内容以从您的有效负载配置中查找信息。
/ |
Payload Stager |
Payload Stage |
角色 |
下载并执行shellcode的程序 |
shellcode |
体积 |
极小(仅含下载功能) |
较大(完整功能模块) |
检测重点 |
网络流量(下载行为) |
内存行为(反射加载/API调用) |
典型代表 |
Cobalt Strike的 |
Meterpreter的 |
DNS Beacon
payload使用DNS请求来发送beacon
数据通道
DNS Beacon可通过DNS TXT记录、DNS AAAA记录或DNS A记录下载任务
mode dns 是DNS A记录下载任务
mode dns6 是DNS AAAA记录通道
mode dns-txt 是DNS TXT记录数据通道(默认为DNS TXT记录数据通道)
基于http的DNS
可在C2的profile中设置DOH(DNS Over HTTP)(通过 HTTP/HTTPS 协议传输 DNS 查询的技术)
DNS监听器设置
参数选项介绍:
DNS Hosts
- 按钮[+]可添加一个或多个域名至beacon。这些域名将被用于DNS通信,需要为每个域名创建DNS A记录,指向TeamServer服务器IP。可以使用DNS NS记录将多个域或子域委托给TeamServer服务器的A记录(beacon主机列表在payload中的总长度不能超过255个字符,否则会被丢弃)Host Rotation Strategy
****- 配置beacon行为,用于从列表中选择用于出口的主机
round-robin
- 按照列表中提供的顺序依次使用每个主机(需要均匀分配流量到所有可用主机时)random
- 每次尝试连接时,从列表中随机选择一个主机(需要高度不可预测的连接模式时)failover-xx
- 尽可能长时间使用当前工作主机(需要稳定连接且能自动处理主机故障的情况)rotate-xx
- 每个主机使用指定的时间段(m=分钟,h=小时,d=天),然后切换到下一个主机(需要定期更换连接点以规避检测)
Max Retry Stategy
- 控制beacon在多次连接团队服务器失败后的行为
none
- beacon永远不会因为连接失败而退出exit-xxx
- 格式 exit-[max_attempts]-[increase_attempts]-[duration][m,h,d];max_attempts:最大连续失败尝试次数,超过此值beacon将退出,increase_attempts:触发增加休眠时间的连续失败次数阈值,duration:设置的新休眠时间长度(m=分钟,h=小时,d=天)[例子:exit-5-3-30m]
DNS Host(Stager)
- DNS Beacon的TXT记录暂存器(stager)配置,它通过DNS的TXT记录传输初始恶意代码片段,仅用于需要显式暂存器的特定功能,且要求团队服务器必须对使用的域名拥有完全控制权,能够自主设置DNS记录Profile
- CS配置为自定义的profileDNS Port(Blind)
- 设置端口重定向转发器(port bending redirector),转发器在标准DNS端口53接收连接,但实际将连接路由到团队服务器的其他端口DNS Resovler
- 允许 DNS Beacon 使用特定的 DNS 解析器进行出站通信,而不是使用目标服务器默认的 DNS 解析器Guardrails
- 可以基于特定条件(如域名、用户名、主机名等)限制 Beacon 的有效执行范围
如何设置域名
域名为 mircoswif.xyz
如下图设置A记录(绑定公网IP)和NS记录
设置完成后开启 DNS Beacon 的监听,确定53端口没有被其他应用占用,DNS Beacon设置如下图
使用nslookup进行测试,若返回的A记录解析结果为 0.0.0.0
,则表明DNS已正确设置,否则错误
Note:
- 确保DNS记录指向您网络接口的主IP地址,因为Cobalt Strike的DNS服务器始终会从该主地址发送响应
- 若处于NAT设备后方,必须在NS记录中使用公网IP地址,需设置防火墙将53端口的UDP流量转发至您的系统,Cobalt Strike内置DNS服务器组件用于控制Beacon通信
- 可通过"Malleable C2"功能自定义DNS Beacon的网络流量特征
通过DNS Beacon上线的机器会是下图的图标
checkin
后会获取信息
HTTP Beacon 和 HTTPS Beacon
beacon通过HTTP GET请求下载任务,通过 POST请求发送数据。这些都是默认设置可以在profile中进行修改的
HTTP(S)监听器设置
参数介绍:
HTTP(S) Hosts
- [+]添加一个或多个HTTP Beacon回连的主机,[-]移除选定的主机,[x]清空当前所有的主机配置,支持直接粘贴逗号分隔的主机列表(Beacon中的主机列表总长度不能超过255个字符,超过的会自动删除)Host Rotation Strategy
- 配置beacon行为,用于从列表中选择用于出口的主机
round-robin
- 按照列表中提供的顺序依次使用每个主机(需要均匀分配流量到所有可用主机时)random
- 每次尝试连接时,从列表中随机选择一个主机(需要高度不可预测的连接模式时)failover-xx
- 尽可能长时间使用当前工作主机(需要稳定连接且能自动处理主机故障的情况)rotate-xx
- 每个主机使用指定的时间段(m=分钟,h=小时,d=天),然后切换到下一个主机(需要定期更换连接点以规避检测)
Max Retry Stategy
- 控制beacon在多次连接团队服务器失败后的行为
none
- beacon永远不会因为连接失败而退出exit-xxx
- 语法格式 exit-[max_attempts]-[increase_attempts]-[duration][m,h,d];max_attempts:最大连续失败尝试次数,超过此值beacon将退出,increase_attempts:触发增加休眠时间的连续失败次数阈值,duration:设置的新休眠时间长度(m=分钟,h=小时,d=天)[例子:exit-5-3-30m]
HTTP Host(Stager)
- 用于控制 HTTP Beacon 的stager所使用的目标主机,当满足特定条件时才会生效Profile
- CS配置为自定义的profileHTTP Port(C2)
- 设置HTTP Beacon的回连端口HTTP Port(blind)
- 指定 HTTP Beacon payload web 服务器的监听端口,支持设置端口重定向转发器HTTP Host Header
- 允许用户自定义 HTTP 请求中的 Host 头字段值,这个选项可以配置域前置功能HTTP Proxy
- 为有效的payload设置代理Guardrails
- 可以基于特定条件(如域名、用户名、主机名等)限制 Beacon 的有效执行范围
重定向
可以隐藏TeamServer,在设置监听时,设置监听的ip为转发后的主机IP,将端口80上的所有连接转发到端口80上192.168.12.100的TeamServer的socket语法:
socat TCP4-LISTEN:80,fork TCP4:192.168.12.100:80
如下场景:
TeamServer
192.168.130.128重定向器
192.168.130.130
在 重定向器
中输入命令 socat TCP4-LISTEN:8880,fork TCP4:192.168.130.128:8899
创建Listener如下配置,要创建两个监听器
上线后的机器就会有内外部之分,而且在连接时会无法查到TeamServer的IP
SMB Beacon
Windows将命名管道通信封装在SMB协议中
link & unlink
在 link
或 unlink
的前提是必须先利用任何方式横向到其他机器,比如通过获取到账号密码或哈希横向到其他机器
smb beacon流程如下
- 创建listener smb beacon
- spwan smb在已有的beacon中派生smb beacon
- 横向到其他的机器,选择的session为smb beacon的session,listener也是smb beacon
这样就可以在pid为348的beacon控制台使用 link
或 unlink
来断开连接或重新连接
使用 link [host] [pipe(可选)]
将当前Beacon链接到正在等待连接的SMB Beacon。当前Beacon签入时,其链接的对等点也将签入,接入必须满足一下条件
- 具有SMB Beacon的主机必须接受端口445上的连接
- 只能连接由统一CS实例管理的Beacon
销毁Beacon连接用 unlink [ip address] [session PID(可选)]
,PID为Beacon关联的进程
当断开连接的时候,SMB Beacon不会消失,他会等待另一个Beacon的连接
TCP Beacon
TCP Beacon使用TCP套接字进行通信
TCP Beacon大多数操作与SMB Beacon类似
使用TCP Beacon生成的exe在运行后会开启端口
然后再用其他机器使用命令 connect
来连接
Connect & unlink
connect [ip address] [port]
unlink [ip address] [session PID]
知识星球
原文始发于微信公众号(CatalyzeSec):【cobalt strike手册0x04】Listeners和Beacon
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论