初探 Cobalt Strike BOF
前言
本文参考了以下两篇文章:
https://cloud.tencent.com/developer/article/2428694
https://wbglil.gitbook.io/cobalt-strike/cobalt-strike-yuan-li-jie-shao/untitled-3
BOF 代码基础
官方 BOF 模板:https://github.com/Cobalt-Strike/bof-vs
我看网上好像有不同版本的 BOF 模板,调用 API 时是这种形式:KERNEL32$XXX
,在目前的官方模板中,如需调用 API,则需提前声明:DFR_LOCAL(KERNEL32, WinExec);
简单介绍下代码:
调用 API:
在 beacon 中输出:
解析命令行参数:
有了上面这些基础,BOF 的编写就相对简单了。稍微更正一下,替换 go 函数即可:
有几个注意的点:
-
参数传递注意编码,需要使用 WCHAR
,也就是 LPWSTR
宽字符,不然不能正确接收参数,猜测是编码问题。
-
尽量不要在栈上分配内存,会触发缓冲区溢出检查,导致链接一些 CRT 内置函数,BOF 没法执行。
-
调用一些函数时可能会阻塞,如 MessageBox,会影响 beacon 的运行。
再参考文章编写一个 cna 文件,用于 CS 加载:
放在同一目录下,加载执行,测试一下效果:
公开的常用 BOF
https://github.com/3as0n/cobaltstrike-bof-toolset
https://github.com/trustedsec/CS-Situational-Awareness-BOF