Ryan Stephenson (RCStep)
在 Cobalt Strike 顶部菜单栏添加 外壳代码 - 外壳代码生成器

CSSG 是 aggressor、.NET 和 python 脚本,用于更轻松地生成和格式化信标外壳代码
生成带有暴露退出方法、额外格式化、加密、编码、压缩、多行输出等的无阶段信标外壳代码
外壳代码转换按照菜单中列出的顺序从上到下执行
要求: RC4/AES 加密选项使用 /assets 文件夹中的 python 脚本或 .NET 程序集 基于 Python 的加密依赖于已安装的 pycryptodome 包来执行 RC4/AES 加密
根据你的 Python 环境使用 pip 安装 pycryptodome:
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
你可以在 pip 安装后使用如下命令检查 pycryptodome 是否存在:
python -m pip list | grep crypto
生成器将使用你的客户端主机的默认 "python" 命令来启动 RC4/AES 加密脚本
你的客户端主机需要能够执行原生 .NET Framework 程序集,以支持 RC4/AES .exe 后端选项
外壳代码生成器的选项包括:
监听器: 使用 "..." 按钮选择一个有效的监听器。外壳代码将根据这个监听器选择生成
投递方式: 无阶段(有阶段模式不支持外壳代码生成器)
退出方法: process - 当信标关闭时,退出信标所在的整个进程 thread - 当信标关闭时,仅退出信标运行的线程
信标系统调用方法: none direct indirect
信标 HTTP 库: wininet winhttp
本地指针复选框: 如果你打算从现有的信标中执行外壳代码,可以使用此选项 生成一个信标外壳代码载荷,该载荷从相同架构的父信标继承关键函数指针
现有会话: 父信标会话,外壳代码将从中拉取会话元数据 外壳代码应在此信标会话内运行
x86 复选框: 选中以生成 x86 外壳代码,默认生成 x64
或使用外壳代码文件: 使用外部生成的原始外壳代码文件,代替生成信标外壳代码 这允许你使用其他导出的信标文件或其他工具(Donut、msfvenom 等)的输出
格式化:
raw - 原始二进制外壳代码输出,不应用格式化
hex - 十六进制格式的外壳代码输出
0x90,0x90,0x90 - 格式化为 C# 风格字节数组的外壳代码
0x90uy;0x90uy;0x90uy - 格式化为 F# 风格字节数组的外壳代码
\x90\x90\x90 - 格式化为 C\C++ 风格字节数组的外壳代码
UUID - 使用 python 脚本将外壳代码转换为 UUID 字符串(用 \x90 填充为 16 字节块)
b64 - 在生成过程早期(任何加密之前)将外壳代码进行 base64 编码的选项
XOR 加密外壳代码复选框: 选中以对外壳代码进行 XOR 加密(一次只能选择一种加密类型)
XOR 密钥: 随机生成且可编辑的 XOR 密钥字符,用于加密 多个字符将导致多轮 XOR 加密(例如 ABCDE)
RC4 加密外壳代码复选框: 选中以对外壳代码进行 RC4 加密(一次只能选择一种加密类型) 使用 python 脚本或 .NET Framework 程序集执行 RC4 加密
AES 加密外壳代码复选框: 选中以对外壳代码进行 AES 加密(一次只能选择一种加密类型) 使用 python 脚本或 .NET Framework 程序集执行 AES 分组密码 AES-CBC 加密 外壳代码用 \0 值填充以达到块大小要求 加密后的外壳代码数据前会追加一个随机生成的 IV
RC4/AES 后端复选框: 选中以使用 .NET exe 程序集加密你的外壳代码文件 未选中则使用 python 脚本加密你的外壳代码文件 AES 接受的加密密钥字节长度为 16、24 和 32 使用 .NET 时 RC4 密钥字节长度可以是任意值,使用 python 时至少为 5 字节
RC4/AES 后端工具: 在 assets 目录中有一个 python 脚本和一个编译好的 .NET 程序集 也有 Encryptor 程序集的源码文件夹,供你自己编译,如果你不信任我的话(我也不会信任) 这两个工具都可以加密和解密 RC4/AES 外壳代码/文件
encrypt_file.py 用法:
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Encryptor.exe 用法:
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
RC4 或 AES 密钥 随机生成且可编辑的 RC4/AES 密钥,用于加密 生成 32 字节的 AES 密钥,推荐用于 256 位 AES 加密强度 AES 加密密钥可接受的字节长度为 16、24 和 32 如果使用 .NET,RC4 密钥长度最小为 1 字节;如果使用 python,最小为 5 字节
编码/压缩: none - 不对外壳代码进行额外的编码或压缩 b64 - 对外壳代码进行 base64 编码 gzip then b64 - 先 gzip 压缩,再 base64 编码 gzip - 对外壳代码进行 gzip 压缩 b64 then gzip - 先 base64 编码,再 gzip 压缩 b64 then 7xgzip - 先 base64 编码,再 gzip 压缩 7 次
多行输出: 可用于非原始/二进制输出格式 none - 无多行格式化,外壳代码为单长字符串 quoted - 外壳代码被分成多行,每行用引号包围 chunks.push_back - 外壳代码被分成多行,每行用 chunks.push_back(" 和 "); 包围
多行长度: 如果选择了多行输出选项,每行中的外壳代码字符数
生成按钮: 选择外壳代码输出的目录 默认文件名为 beacon,但可以更改 任何使用的加密密钥将显示在弹出窗口中,并写入 Cobalt Strike 脚本控制台 原始信标外壳代码和最终格式化信标外壳代码的字节大小将显示在弹出窗口中,并写入脚本控制台 用于生成/构建外壳代码的文件位置均在 scripts/shellcode_generator.cna 文件中设置
灵感来自众多信息安全贡献者的工作