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)。

## 为什么要使用 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截图, 代理, 内存执行, 内网渗透, 命令与控制, 嗅探欺骗, 安全测试, 安全防御评估, 客户端加密, 容器安全, 嵌入式工具, 攻击性安全, 数据展示, 无文件攻击, 最小化环境, 权限维持, 横向移动, 欺骗防御, 红队, 编程规范