4 个版本

0.1.3 2024 年 4 月 21 日
0.1.2 2023 年 6 月 23 日
0.1.1 2023 年 6 月 23 日
0.1.0 2023 年 6 月 23 日

#2 in #strike

GPL-3.0-or-later

72KB
1.5K SLoC

咖啡

咖啡是 Cobalt Strike 原始 beacon_inline_execute 的自定义实现。它是用 Rust 编写的,支持 Cobalt Strike 兼容层的大部分功能。咖啡的结构使其可以作为库在其他项目中使用。

原始博客文章可以在以下位置找到: https://labs.hakaioffsec.com/coffee-a-coff-loader-made-in-rust/

用法

$ coffee.exe -h
Coffee: A COFF loader made in Rust

Usage: coffee.exe [OPTIONS] --bof-path <BOF_PATH> [-- <ARGS>...]

Arguments:
  [ARGS]...  Arguments to the BOF passed after the "--" delimiter, supported types are: str, wstr, int, short

Options:
  -b, --bof-path <BOF_PATH>      Path to the Beacon Object File (BOF)
  -e, --entrypoint <ENTRYPOINT>  The entrypoint name to execute in case of a custom entrypoint name [default: go]
  -v, --verbosity <VERBOSITY>    Verbosity level, 0 = ERROR, 1 = WARN, 2 = INFO, 3 = DEBUG, 4 = TRACE [default: 0]
  -h, --help                     Print help
  -V, --version                  Print version

参数

可以在 -- 分隔符之后传递 BOF 的参数。每个参数必须以参数类型开头,后面跟一个冒号 (:)。以下类型受支持

  • str - 以空字符终止的字符串
  • wstr - 宽以空字符终止的字符串
  • int - 有符号 32 位整数
  • short - 有符号 16 位整数

示例

使用 trustedsec/CS-Situational-Awareness-BOF 仓库中的 dir.x64.o BOF,并传递参数到 BOF

coffee.exe --bof-path .\dir.x64.o -- wstr:"C:\\Windows\\System32"

作为库使用

cargo add coffee-ldr

咖啡可以用作其他项目的库。以下示例展示了如何使用咖啡加载和执行 BOF

use coffee_ldr::loader::Coffee;

fn main() {
    let whoami_bof: [u8; 6771] = [
        0x64, 0x86, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x14, 0x00, 0x00, 0x33, 0x00, 0x00,
        ...
    ];

    let _ = Coffee::new(&whoami_bof).unwrap().execute(None, None, None);
}

上面的示例将执行作为字节数组传递的 BOF,并在控制台中显示输出。

详细文档可以在以下位置找到: https://docs.rs/coffee-ldr/latest/coffee_ldr/loader/struct.Coffee.html

从源代码构建

  1. https://rustup.rs/ 安装 Rust
  2. 克隆仓库
  3. 使用以下命令构建项目
cargo build --release

许可证

咖啡受 GNU GPLv3 许可证的许可。有关更多信息,请参阅 LICENSE

贡献

欢迎拉取请求。请首先打开一个问题来讨论您想要更改的内容。

参考

感谢那些关于 COFF 加载器撰写文章并帮助我理解格式的出色人士

依赖项

~155MB
~2.5M SLoC