/ 咖啡 /
https://github.com/hakaioffsec/coffee
Coffee 是原始 Cobalt Strike 的 beacon_inline_execute ( https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics_aggressor-scripts/as-resources_functions.htm#beacon_inline_execute )的自定义实现。它用 Rust 编写,支持 Cobalt Strike 兼容层的大部分功能。Coffee 的结构使得它也可以用作其他项目中的库。
原始博客文章可以在这里找到:https://labs.hakaioffsec.com/coffee-a-coff-loader-made-in-rust/
1
$ 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, bin
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
1.1
参数
BOF 的参数可以在分隔符后传递--。每个参数必须以参数类型作为前缀,后跟冒号 ( :)。支持以下类型:
str- 以空字符结尾的字符串
wstr- 宽空终止字符串
int- 有符号的 32 位整数
short- 有符号的 16 位整数
bin- 经过 base64 编码的二进制 blob
2
使用dir.x64.o来自https://github.com/trustedsec/CS-Situational-Awareness-BOF 存储库的 BOF 并将参数传递给 BOF:
coffee.exe --bof-path .\dir.x64.o -- wstr:"C:\\Windows\\System32"
使用来自 trustsec/CS-Remote-OPs-BOF ( https://github.com/trustedsec/CS-Remote-OPs-BOF )ntcreatethread.x64.o存储库的 BOF ,并传递 PID 和 shellcode 以作为 base64 编码的二进制数据执行。
coffee.exe --bof-path .\ntcreatethread.x64.o -- int:1337 bin:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY2FsYy5leGUA
3
cargo add coffee-ldr
Coffee 可以作为其他项目中的库使用。以下示例显示如何使用 Coffee 加载 BOF 并执行 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
4
从 https://rustup.rs/ ( https://rustup.rs/ )安装 Rust
克隆存储库
使用以下方式构建项目
cargo build --release