cmprmsd/BusyBOF

GitHub: cmprmsd/BusyBOF

BusyBOF 是一组用于后渗透的 Busybox 风格信标对象文件,解决在无工具环境中执行命令的问题。

Stars: 43 | Forks: 4

# BusyBOF Busybox 风格信标对象文件,用于 \*nix 后渗透操作。在仅存在代理/植入物的精简环境中重新实现了常用 Unix 工具。 基于 [nix_bof_template](https://github.com/outflanknl/nix_bof_template)(作者 Outflank)。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d5e4d10336234740.png) ## 为什么要使用 BusyBOF? 现代容器环境不附带任何实用程序。没有 `ls`、`cat`、`grep`。**BusyBOF** 为操作者提供了一套完整的内存级 Unix 工具集,可通过任意 ELF BOF 加载器运行——不会向磁盘释放二进制文件,无依赖,无需软件包管理器。 ``` [target]> bf-ls --args "-laF /etc" drwxr-xr-x 1 root root 4096 Apr 05 08:12 /etc/ -rw-r--r-- 1 root root 223 Apr 05 08:12 /etc/hosts -rw-r--r-- 1 root root 13 Apr 05 08:12 /etc/hostname ... [target]> bf-ps PID PPID USER STATE RSS COMMAND 1 0 root S 5120 /agent ``` ## 管道链 BOF 支持类 Unix 风格的管道链。一个 BOF 的输出会作为下一个 BOF 的输入——所有操作均在代理本地单条命令内完成: ``` bf-env | bf-grep SHELL bf-find --args "/etc -name *.conf" | bf-grep password bf-tree --args "/var/log -F" | bf-du bf-ls --args "-F /tmp" | bf-basename bf-find --args "/app -name *.log" | bf-chmod --mode 644 bf-tree --args "/tmp -dF" | bf-rmdir ``` 管道适用于两类 BOF: **文本处理器**(grep、sort、head、tail、wc、awk、sed、cut、uniq、tr)接收前一个输出作为文件并处理其内容——无需代码修改。 **路径处理器** 使用 `bof_pipe_input()` 通过 `BOF_PIPE` 环境变量检测管道上下文,并逐行迭代: | BOF | 管道行为 | |-----|---------------| | bf-basename | 输出每个管道路径的基名 | | bf-dirname | 输出每个管道路径的目录名 | | bf-du | 对每个管道路径运行 du | | bf-stat | 对每个管道路径执行 stat | | bf-chmod | 对每个管道路径应用 `--mode` | | bf-chown | 对每个管道路径应用 `--owner` | | bf-rm | 删除每个管道路径(支持 `-rf` 标志) | | bf-rmdir | 删除每个管道目录 | | bf-mkdir | 创建每个管道目录(支持 `-p`) | | bf-touch | 触碰每个管道路径 | | bf-nl | 为每行管道内容编号 | | bf-rev | 反转每行管道内容 | 如需为自己的 BOF 或 C2 框架添加管道支持,请参阅 [PIPE.md](PIPE.md) 获取完整集成指南。 ## 构建 ``` make # build all BOFs → build/ make bf-ls # build single BOF make list # show available tools make clean # remove artifacts ``` 需要:`gcc`(交叉编译时请使用 `x86_64-linux-gnu-gcc`)。 ## 使用 在 C2 框架中加载 `build/` 目录下的任意 `.o` 文件作为 BOF: ``` bof build/bf-ls/ls.o -la /tmp bof build/bf-cat/cat.o /etc/passwd bof build/bf-netstat/netstat.o -tlnp bof build/bf-grep/grep.o -in "password" /etc/shadow ``` 使用 Sliver 风格的 `extension.json` 清单并搭配支持参数打包的控制器: ``` bf-ls --args "-laF /etc" bf-grep --pattern password --file /etc/shadow bf-awk --expression '{print $1}' --file /etc/passwd --delimiter : bf-base64 --file /etc/hostname --mode decode ``` ## 已实现的工具(64 个) | 类别 | 工具 | |------|------| | **文件与目录** | `cat` `cp` `diff` `find` `ln` `ls` `mkdir` `mv` `rm` `rmdir` `stat` `tar` `touch` `tree` | | **权限** | `chmod` `chown` | | **文本处理** | `awk` `cut` `grep` `head` `nl` `paste` `rev` `sed` `sort` `tail` `tr` `uniq` `wc` | | **系统信息** | `date` `df` `dmesg` `du` `env` `free` `groups` `hostname` `id` `kill` `lsmod` `mount` `ps` `pwd` `sysctl` `uname` `uptime` `whoami` | | **网络** | `arp` `ifconfig` `netstat` `nslookup` `ping` `route` `traceroute` `wget` | | **数据与编码** | `base64` `md5sum` `od` `sha256sum` `strings` `xxd` | | **路径** | `basename` `dirname` | | **其他** | `logger` | ## 扩展清单 每个 BOF 包含一个 `extension.json` 清单,用于控制器集成: ``` { "name": "bf-grep", "commands": [{ "command_name": "bf-grep", "help": "search files for pattern matches", "entrypoint": "go", "files": [{"os": "linux", "arch": "amd64", "path": "grep.o"}], "arguments": [ {"name": "args", "type": "string", "desc": "[-inv] "} ] }] } ``` 参数类型:`string`、`int`、`short`、`file`(触发本地文件补全)、`wstring`。包含 `"choices"` 的参数会在控制器中触发选项补全。 ## 注意事项 - 所有哈希实现(MD5、SHA-256)均为纯 C 编写,无外部依赖 - `sed` 仅支持 `s/old/new/[g]` 替换 - `awk` 支持以可配置分隔符提取 `{print $N}` 字段 - `wget` 仅支持 HTTP(无 TLS 支持,除非依赖外部库) - `ping`/`traceroute` 需要 CAP_NET_RAW 权限或 root - `tree -F` 输出纯净路径(无树状艺术字符),适合用于管道 - `arp` 通过 `/etc/hosts` 解析主机名(在 Docker/K8s 中非常有用,Docker 会填充该文件) ## 后续开发 此项目仅为教育用途的概念验证。请参考 [todo.md](todo.md) 获取可集成到本集合的额外工具列表。
标签:BOF, Busybox, CTF学习, C 语言, Docker, ELF, Raspberry Pi, Unix 工具, Web截图, 代理, 内存执行, 内网渗透, 命令与控制, 嗅探欺骗, 安全测试, 安全防御评估, 客户端加密, 容器安全, 嵌入式工具, 攻击性安全, 数据展示, 无文件攻击, 最小化环境, 权限维持, 横向移动, 欺骗防御, 红队, 编程规范