Ruby Net::FTP 模塊是一個FTP客戶端,在上傳和下載文件的過程中,打開本地文件時使用了open
函數。而在ruby中,open
函數是借用系統命令來打開文件,且沒用過濾shell字符,導致在用戶控制文件名的情況下,將可以注入任意命令。
啓動docker
service docker start
在Vulhub中加載CVE-2017-14015漏洞環境。
cd vulhub/ruby/CVE-2017-14015
docker-compose up -d
運行一個可以訪問到的FTP客戶端。可以使用python運行pyftpdlib,如果沒有對應環境安裝就好了。
#安裝pyftplid
pip install pyftpdlib
#在當前目錄下使用python生成一個ftp服務器,默認監聽在0.0.0.0:2121端口。
python -m pyftpdlib -p 2121 -i 0.0.0.0
然後即可開始利用漏洞。注入命令|touch${IFS}success.txt
(空格用${IFS}
代替),發送如下數據包即可。
FTP服務器出現訪問記錄
然後進入docker容器內,可見success.txt已被創建。