Cobalt Strike 基础
1.基本配置
1.1 组成部分
- teamserver – teamserver – C2服务器
- cs客户端 – cobaltstrike.jar – 控制端
- beacon – 被控端
1.2 启动teamserver
其中teamserver必须运行在Linux Java环境下,ubuntu相关命令如下:
1 |
|
1.3 启动cs客户端
执行sh脚本启动
1 |
|
出现如下连接窗口:
输入teamserver启动时设置的相关参数即可连接,用户名可以随意设置,连接成功即可进入主界面。
2.功能介绍
2.1 基本界面
2.2 Pivot图
示例图如下:
相关字段介绍:
防火墙:Beacon Payload流量出口
红色边框加闪电:Beacon运行在管理员权限
绿色虚线:使用HTTP、HTTPS协议出网
黄色虚线:使用DNS协议出网
两个会话连接:表示呈现父子关系,子会话通过父会话传递和接受C2指令
橙黄色箭头:两个会话使用Windows命令管道、SSH连接
青色箭头:两个会话使用TCP Socket连接
红色箭头:两个使用Windows命令管道、SSH连接的会话断开
紫色箭头:两个使用TCP Socket连接的会话断开
2.3 监听器
监听器与Payload绑定,等待被控端回连。
2.3.1 HTTP & HTTPS Beacon
1 |
|
HTTP和HTTPS区别在于SSL证书配置,最基本的配置如下:
2.3.2 DNS Beacon
1 |
|
上线原理:将DNS解析服务器指定到C2服务器
域名配置中添加两条DNS解析记录,分别为A记录和NS记录,其中A记录指定C2服务器ip,NS子域名绑定A记录域名,示意图如下:
之后在cs的DNS Linstener中添加子域名,这样查询子域名便会上线C2。值得注意的是dns第一次上线不会立刻获取主机信息,需要执行命令或主动获取。
2.3.3 SMB Beacon
用于父子会话之间通信,SMB协议
1 |
|
SMB Beacon使用命名管道与一个父Beacon进行通信,在由这个父Beacon与C2服务端通信,相当于一个桥梁。因为Windows可以将命名管道通信封装在 SMB 协议中与远程主机进行通信,所以得名SMB Beacon。常用于派生会话或者横向移动。配置页面如下:
2.3.4 TCP Beacon
用于父子会话之间通信,TCP协议
1 |
|
与SMB Beacon类似,配置页面如下:
2.3.5 Foreign Listeners
用来将会话转到MSF服务器
1 |
|
配置页面如下:
2.3.6 Pivot Listeners
需要在会话右键菜单中找到(Pivoting -> Listener),用于父子会话之间建立反向端口转发,与SMB、TCP监听器类似,不过当执行unlink命令时会直接退出无法像另外两个一样重连。
1 |
|
页面配置如下:
2.4 会话右键功能
- Access:
- Dump Hashs:获取用户hash
- Elevate:反弹高权限会话
- Golden Ticket:黄金票据用于在普通用户权限和krbtgt hash的情况下获取管理员权限
- Make Token:制作令牌,访问Windows远程网络资源时有效
- One-liner Run:目标机的本地开启一个web服务
- Mimikatz:运行Mimikatz的logonpasswords命令
- Spawn As:使用其他用户权限生成一个会话,需要用户名和密码以及一个监听器
- Explore:
- Browser Pivot:使用IE代理登录
- Desktop (VNC) :远程桌面,需要插件支持
- File Browser:文件管理
- Net View:执行网络相关命令
- Port Scan:主机发现,端口扫描
- Process List:获取进程列表
- Screenshot:屏幕截图
- Pivoting:
- SOCKS Server:开启socks4代理,不建议使用
- Listener:监听一个目标主机端口并把流量转发到CS
2.5 会话命令
Beacon是异步有效负载,即命令不会立即执行,而是插入消息队列,在一定时机下依次执行,并将执行结果显示在Beacon控制台。
如果误输入可以使用clear清楚命令队列。默认情况下,Beacon每60秒检查一次命令队列,可以使用sleep命令修改间隔时间。常用命令如下:
2.5.1 信息收集
命令 | 参数 | 功能 |
---|---|---|
drivers | - | 列出目标机上的盘符信息 |
logonpasswords | - | 执行mimikatz命令获取密码 |
hashdump | - | 转储用户密码哈希 |
dcsync | [DOMAIN.FQDN] <[DOMAIN\user]> | 提取域控中全部或特定用户的密码哈希 |
portscan | [targets] [ports] [arplicmp Inone] [max connections] | 端口扫描 |
reg query | [x86/x64] [root/path] | 查询注册表键 |
reg queryv | [x86/x64] [root/path] [subkey] | 查询注册表子键 |
2.5.2 远控功能
命令 | 参数 | 功能 |
---|---|---|
clear | - | 清空命令队列 |
sleep | [time] | 设置命令调度时间,0表示开启交互模式 |
download | [filepath] | 下载目标机文件 |
upload | [filepath] | 上传文件到目标机 |
downloads | - | 列出正在下载的文件 |
cancel | [filename] | 取消全部正在下载的文件 |
argue | [command] [fake arguments] | [command] | 欺骗命令参数,假参数需要比真参数长 |
browserpivot | [pid] [x86/x64] | [stop] | 浏览器代理 |
checkin | - | 强制回连时发送主机信息 |
desktop | [pid] [x86/x64] | 将VNC服务注入到指定进程中运行 |
keylogger | [pid] [x86/x64] | 将键盘记录器注入到指定进程中运行 |
screenshot | - | 屏幕截图 |
ssh | [target:port] [user] [pass] | 使用ssh密码远程连接 |
ssh-key | [target:port] [user] [/path/to/key.pem] | 使用ssh密钥远程连接 |
setenv | [arg] | 设置环境变量 |
jobs | 查看后渗透任务列表(有些功能会在其他进程中运行) | |
jobkill | [jid] | 结束一个Beacon后台任务 |
blockdlls | [start] | [stop] | 阻止子进程加载非微软签名DLL,需要目标为Win10以上 |
kill | [pid] | 结束指定进程 |
ppid | [pid] | 伪造指定进程作为父进程 |
pth | [DOMAIN\user] [NTLM hash] | hash传递攻击 |
exit | - | 结束Beacon进程 |
2.5.3 横向渗透
命令 | 参数 | 功能 |
---|---|---|
connect | [target] [port] | 连接到一个TCP Beacon |
elevate | [exp] [listener] | 提权并生成一个高权限会话 |
inject | [pid] [x86/x64] [listener] | 在指定进程中派生会话 |
jump | [exp] [target] [listener] | 横向渗透在目标上执行payload生成会话 |
link | [pipe_name] | 连接指定管道名字的SMB会话 |
unlink | - | 断开与子Beacon的连接 |
mode | dns | dns6 | dns-txt | 使用DNS A | DNS AAAA | DNS TXT作为数据通道(仅限DNS Beacon有效) |
spawn | [x86/x64] [listener] | 默认使用rundll32.exe中派生会话 |
spawnto | [x86/x64] [path] | 设置spawn派生会话时使用的程序 |
spawnas | [DOMAIN\user] [password] [listener] | 以其他用户身份派生会话 |
spawnu | [pid] [listener] | 在指定进程中派生会话 |
2.5.4 代码执行
命令 | 参数 | 功能 |
---|---|---|
dllload | [pid] [dllpath] | 使用LoadLibrary进行DLL注入,目标机上必须存在被注入的DLL |
dllinject | [pid] [dllpath] | 反射式DLL注入,路径为本机 |
shinject | [pid] [x86/x64] [shellcode_raw_path] | shellcode注入 |
execute-assembly | [.netpath] [arguments] | 内存加载执行.NET程序 |
execute | [program] [arguments] | 执行程序无回显 |
run | [program] [arguments] | 执行程序有回显 |
runas | [DOMAIN\user] [password] [command] [arguments] | 以其他用户权限执行程序 |
runasadmin | [exp] [command] [args] | 提权后执行命令 |
runu | [pid] [command] [arguments] | 使用指定进程执行命令 |
shell | [command] | 使用cmd执行命令 |
inline-execute | [/path/to/file.o] [args] | 在Beacon会话中执行Beacon Object File (BOF) |
mimikatz | [<! | @>module::command] [args] | 执行mimikatz命令,!强制提升到System权限运行,@强制当前令牌运行 |
powershell | [cmd] | 使用powershell.exe执行命令 |
psinject | [pid] [arch] [commandLet] [arguments] | 在指定进程中执行PowerShell命令 |
powershell-import | [path] | 导入powershell脚本 |
powerpick | [commandlet] [arguments] | 不使用powershell.exe程序来执行powershell命令 |
remote-exec | [method] [target] [command] | 在远程主机上执行命令 |
2.5.5 权限提升
命令 | 参数 | 功能 |
---|---|---|
getprivs | - | 启用当前访问令牌所拥有的特权 |
getsystem | - | 尝试模拟一个SYSTEM账号的令牌获取System权限 |
getuid | - | 获取当前访问令牌 |
make_token | [user] [pass] | 创建令牌 |
rev2self | - | 恢复Beacon原始令牌 |
steal_token | [pid] | 从指定进程中窃取访问令牌 |
2.5.6 内网渗透
命令 | 参数 | 功能 |
---|---|---|
rportfwd | [bind port] [forward host] [forward port] | 开启反向端口转发 流量经过路径Beacon —-> cs teamserver —–> target host |
rportfwd stop | [bind port] | 停止指定端口转发 |
rportfwd_local | [bind port] [forward host] [forward port] | 开启反向端口转发 流量经过路径Beacon —-> cs client —–> target host |
rportfwd_local stop | [bind port] | 停止指定端口转发 |
socks | [stop] | [port] | 在指定端口开启SOCK4代理,不建议使用 |