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。
Ps:E:\Program Files\Git\usr\bin\未加入系统环境变量。
0x04 解决之道
通过网络搜索,最终搞明白。DOS命令分为:
内部命令在DOS启动时随command.com装入内存,可随时执行。
外部命令的执行需要进入保存命令的目录下面,或者设置全局环境变量。
刚好dir属于内部命令,然而java的getRuntime().exec(‘dir’)执行的是系统变量里边的文件,自然就找不到dir命令了。
Windows系统的命令一般都是通过cmd.exe来执行,所以,我们可以在前面加上cmd.exe /c。
0x05 超时导致无回显
刚准备继续,又啪啪打*了。
cmd.exe /c netstat -ano
执行类似命令cmd.exe /c netstat -n可以正常执行。那么就很明朗了,肯定是参数a和o搞得鬼。
经过本地尝试,单独使用参数a或o,都会等待较长时间。
参数-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。
并甩过来一张截图
我:***