Apache-Solr-RCE深入利用

 

0x01 Solr描述

Solr是建立在Apache Lucene ™之上的流行,快速,开放源代码的企业搜索平台。

其中5.x-8.3.1版本存在velocity模板注入RCE

Solr存在挺多CVE漏洞的,不过velocity模板注入是影响版本范围最广的一个漏洞。网上分析、复现的文章挺多的,这里就不再重复了。

 

0x02 起因

以下全为补图

某次项目,刚好遇到存在漏洞Solr应用,熟练的拿出平时复现用的脚本。

成功返回whomai命令结果,拿捏。

随后开始进一步的信息收集,先遍历一下目录,看看都有什么文件。

直接500报错了,刚开始还以为是意外,随即多试了几下,发现事情并没有那么简单。

接连又试了几个命令,netstat -ano | findstr “3389”,看看3389是否开启。同样结局。

就这样了吗?怎么可能。

 

0x03 响应500原因分析

随后在本地搭建了同样版本的环境,开始测试。

执行whoami命令,正常值返回

执行dir报错

查看了一些调试信息,抱错:“系统找不到指定的文件”

打开全盘搜索工具搜了一下,果然没有dir.exe

PsE:\Program Files\Git\usr\bin\未加入系统环境变量。

 

0x04 解决之道

通过网络搜索,最终搞明白。DOS命令分为:

内部命令DOS启动时随command.com装入内存,可随时执行。

外部命令的执行需要进入保存命令的目录下面,或者设置全局环境变量。

刚好dir属于内部命令,然而javagetRuntime().exec(‘dir’)执行的是系统变量里边的文件,自然就找不到dir命令了。

Windows系统的命令一般都是通过cmd.exe来执行,所以,我们可以在前面加上cmd.exe /c

0x05 超时导致无回显

刚准备继续,又啪啪打*了。

cmd.exe /c netstat -ano

执行类似命令cmd.exe /c netstat -n可以正常执行。那么就很明朗了,肯定是参数ao搞得鬼。

经过本地尝试,单独使用参数ao,都会等待较长时间。

参数-a

参数-o

猜测可能是时间超时导致无回显。

 

0x06 突破超时无回显

一般命令执行无回显的情况下,可以直接执反弹shell或者数据外带。不管怎么样,都需要目标机能正常出网为前提。那么,可以不出网回显吗?

答案是肯定的。

直接通过>符号,把结果导入一个文件中即可。

虽然响应报错了,但是命令已经执行成功了

netstat –ano命令执行结果

这是在本地,可以直接打开,做项目的时候怎么查看文件那?

默认写入文件的目录在web是不能直接访问的。

默认上传文件目录:

solr-7.5.0\solr\server\

默认Solr的web目录:

solr-7.5.0\solr\server\solr-webapp\webapp\

写入文件时,只需要向后两个目录就好了。

重新构造命令:cmd.exe /c netstat -ano > ./solr-webapp/webapp/feizhoumoli2.txt

web查看执行结果

很多人喜欢反弹shell,可以直接把nc上传致solr目录,直接执行即可。

ps:

       文档中用的是自己编译的版本,solr的web目录和直接运行版本有差别

直接运行版solr默认路经:

solr-8.1.0\server

solr-8.1.0\server\solr-webapp\webapp

 

0x07 插曲

当我刚要停笔,长舒一口气的时候,同事凑过来看来一眼我写的文章。

来了句:这个漏洞啊,msf可以一键反弹shell

并甩过来一张截图

我:***

(完)