前言

爆了apache solr的RCE,以为是我交给平台的,但看看漏洞通告利用条件很多,也不太像。今天早点下班回来,发现自己挖的也被修了,就写个记录下。

漏洞分析

我这里在windows下使用官方的安装包测试漏洞,是不需要任何条件的。其他也懒得再测试了。
9.2.0和9.3.0 都影响,范围比较小。
漏洞类是
org.apache.solr.handler.configsets.UploadConfigSetFileAPI#updateConfigSetFile
image-20231027194341814
这是一个api接口,可以上传文件,
进入到判断是否是覆盖的代码

boolean overwritesExisting = this.configSetService.checkConfigExists(configSetName);

image-20231027194524156
是判断目录下是否有solrconfig.xml
这里的目录是:
\solr-9.3.0\server\solr\configsets
image-20231027194608691
看下
image-20231027194703083
image-20231027194720449
都没有solrconfig.xml文件,所以这里不是覆盖,返回false
进入到createBaseNode 方法
image-20231027194946424
看到
非overwritesExisting 就跳过了
下一步就是上传文件了
image-20231027195207237
image-20231027195232382
之后就方便了,写恶意xml、写恶意jar文件(这里直接jar后缀会被拦截,但是用其他后缀也没影响,xml文件里面改一下就好了)
image-20231027200509353
之后在管理界面创建一个core
image-20230416134048012
这个instanceDir 并没有限制,我们可以指定到configsets/sample_techproducts_configs 位置,为上述文件写入的可控位置
可以看到成功创建了
image-20230416134108202
就ok了。
注意的是9.2.0加了security manager,
绕过可以看这里
https://www.anquanke.com/post/id/151398#h3-6
image-20231027195801257
允许反射,所以可以绕过,这里还没研究过,大佬的文章是真好用。
最后的效果就是RCE
image-20231027195919845
9.4.0中可以看到就直接判断目录存在就返回true了。
image-20231027200122328