这是一个快速且粗糙的 COFF 加载器(又名 Beacon 对象文件)。目前可以运行未修改的 BOF,因此可以在没有 CS agent 运行的情况下用于测试。唯一的例外是与注入相关的 beacon 兼容函数只是空的。
主要目标是提供一个可用的示例,也许对某些人有用。
它由几个部分组成,如下所列。
这用于为 COFFLoader 代码生成参数,如果 BOF 需要参数,只需使用此工具添加预期类型的参数,并生成十六进制字符串以供使用。
用法示例如下:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>help
Documented commands (type help <topic>):
========================================
addString addWString addint addshort exit generate help reset
Beacon>addWString test
Beacon>addint 4
Beacon>generate
b'120000000a0000007400650073007400000004000000'
Beacon>reset
Beacon>addint 5
Beacon>generate
b'0400000005000000'
Beacon>exit
你可以通过查看源代码来了解每个 BOF 需要哪些参数。以 Net User BOF 为例,你可以查看 CS-Situational-Awareness-BOF Github 仓库中的 src/SA/netuser/entry.c 文件,然后查看 void go() 函数中的参数。
VOID go(IN PCHAR Buffer, IN ULONG Length)
{
datap parser;
wchar_t *username = NULL;
wchar_t *domain = NULL;
BeaconDataParse(&parser, Buffer, Length);
username = (wchar_t *)BeaconDataExtract(&parser, NULL);
domain = (wchar_t *)BeaconDataExtract(&parser, NULL);
domain = *domain == 0 ? NULL : domain;
netuserinfo(username, domain);
printoutput(TRUE);
};
我们可以看到,我们的 Net User BOF 需要一个 “username” 和 “domain”(我们可以通过运行 whoami BOF 来获取)。使用 beacon_generate.py 辅助脚本,我们可以这样生成参数:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>addWString Administrator
Beacon>addWString client2
Beacon>generate
b'340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000'
Beacon>exit
最后,将十六进制化的数值(仅数字)复制到你的执行命令中
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\netuser\netuser.x64.o 340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000
你可以在以下链接找到更详细的示例:
https://trustedsec.com/blog/situational-awareness-bofs-for-script-kiddies
下面是一个如何运行 BOF 的示例。
COFFLoader64.exe go test64.out
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\whoami\whoami.x64.o