busybox 是什么
busybox 把上百个常用命令编译进一个静态链接的二进制里,靠参数或软链接决定执行哪个子命令(busybox ps 等价于 ps)。它在应急排查里的价值不在功能多,而在不依赖目标主机的动态库、PATH 与命令文件本身:宿主机的 ps、find 被替换或删掉时,从只读介质拷一个 busybox 过来就能拿到一套可信视图。
基本信息
| 适用平台 | Linux 各发行版(常见静态编译版) |
|---|---|
| 调用方式 | ./busybox <子命令> |
| 常用子命令 | ps / netstat / find / ifconfig / vi / sh |
| 权限要求 | root(才能看到全部进程与连接) |
| 体积 | 单文件、静态链接,无 glibc 依赖 |
| 局限 | 字段少于原生命令,仅作交叉验证 |
典型使用场景
- 系统自带 ps、netstat 被替换或删除,需要可信工具获得进程与连接视图
- PATH 被指向假命令目录,用绝对路径绕开被劫持的命令解析
- 离线主机没有可用包管理器,从 U 盘拷单个文件即可上手
- 给救援介质(救援 U 盘、PXE 镜像)准备一套最小可用命令集
- 与原生命令交叉比对,两套输出不一致本身就是线索
绕过可疑环境调用
绕过可疑环境调用
chmod +x ./busybox # 从只读介质拷来先补执行位
./busybox --list | head -n 30 # 看编译进去的子命令清单
./busybox ps -ef | head -n 20 # 不依赖系统 ps 的进程列表
./busybox netstat -antp | grep ESTAB # 已建立连接,含 pid
./busybox find / -name 'ld.so.preload' 2>/dev/null # 用不依赖系统的 find
/path/to/busybox sh # 起干净 shell,再逐条排查与原生工具的取舍
| 对比项 | 系统原生命令 | busybox |
|---|---|---|
| 字段完整度 | 完整:含 lstart、wchan 等 | 精简:多为基础列 |
| 可信前提 | 依赖动态库与文件本身未被替换 | 静态单文件,可自带 |
| 适用阶段 | 环境正常时的日常与取证 | 环境不可信时的交叉验证 |
| 输出解析 | 脚本解析已成惯例 | 列名有差异,脚本要适配 |
busybox 的 ps 不带启动时间与等待通道,netstat 的进程信息也有限:靠它定位到可疑 PID 后,仍要回 /proc/<PID>/ 看 cmdline、exe、environ、lstart 补细节。
/tmp、/dev/shm 常被挂载为 noexec:拷进去会直接被拒执行。先看 mount 输出确认挂载选项,必要时换到 /var/tmp 或改用可执行介质。