TheWall

LFI Log Poisoning

Fase de reconocimiento

Hago un escaneo de nmap para descubrir los puertos abiertos y encuentro:

  • 22 (SSH)

  • 80 (HTTP)

Dentro de la página web nos podemos encontrar lo siguiente:

Intento hacer fuzzing con wfuzz, pero por alguna razon que desconozco, cuando le proporciono el parametro -s, no muestra las solicitues. Así que tendré que usar gobuster, y le voy a tener que proporcionar un delay, ya que la pagina detecta cuando hacemos muchas solicitudes 404 de seguido, así que le he puesto un delay de 580ms, a esto se le llama Web Application Firewall (WAF):

Fase de intrusión

Encuentro el archivo "/includes.php" y tiene toda la pinta de que puede ejecutar comandos por su nombre y extensión, así voy a hacer fuzzing con wfuzz para descubrir el parámetro con el que funciona (Pensé que ejecutaría comandos, pero no es así, lo que hace es listar archivos del sistema):

Con esto quiero decir que entonces tendríamos que hacer un poisoning de los logs para poder ejecutar comandos, y en mi caso para poder obtener una reverseshell así que voy a hacer fuzzing usando de directorio de LFI que se sitúa en la seclist (SecLists-master/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt):

El que más me ha llamado la atención

Le voy a hacer un curl para que podáis observar con más claridad de que realmente lo que estas haciendo es enviar un header con user-agent, y dentro del user-agent introduces los comandos, y estos comandos se pueden ver reflejados en los logs:

Este paso lo intente hacer mediante curl, pero se me hizo imposible, así que utilice burpsuite. Ahora lo que vamos a hacer es mandar una solicitud para poder posteriormente ejecutar comandos de manera más sencilla, es una pequeña línea que va a autorizar ejecutar comandos a cualquier solicitud GET que use el parámetro "XD":

Tras lanzar el ultimo paquete, conseguimos acceso remoto, como siempre lo primero que hacemos es la Depuración de tty

Escalada de privilegios

En cuanto a la escalada de privilegios, primero nos tendremos que venir a "/home" para ver que usuarios hay en el sistema, dentro de john podemos encontrar que tiene ".ssh" en su interior, y si hacemos un "sudo -l", podemos ver que john tiene permisos de ejecutar exiftool. Así que la idea que se me viene a la cabeza seria crearme un id_rsa y con exiftool escribir dentro de "/.ssh/authorized_keys" la key que he me he creado, para así poder iniciar sesión con dicha key. En GTFOBins podemos ver en detalle como se explota el exiftool:

Nos creamos nuestras keys:

Os copias vuestra id_rsa.pub (el .pub indica que es la key publica) y la copias dentro de "/tmp" como "authorized_keys", luego introducis el siguiente comando y os deberia dejar de entrar sin problemas:

Iniciamos sesión por ssh:

Nos pasamos por scp linpeas ya que no hay wget ni curl instalado:

Lo más relevante que he encontrado con el linpeas ha sido "tar" con capabilities y unas keys de ssh de root:

Capability

La capability que hemos he encontrado es capaz de leer o ejecutar archivos/directorios:

Así pues, vamos a obtener la "id_rsa" privada de root con la capability:

Probe con la key de "/etc/ssh" pero no funciono, y me di cuenta que en el directorio "/" existe una "id_rsa", así que pruebo con esa y logramos el acesso a root!:

Conclusión

En esta máquina, logramos la intrusión y escalada de privilegios aprovechando varias debilidades:

  1. Utilizamos herramientas como gobuster y wfuzz para identificar directorios y parámetros útiles en el sistema. La estrategia fue añadir un tiempo de espera para hacer que las solicitudes burlan el sistema de Web Applicaction Firewall (WAF).

  2. Conseguimos Ejecución Remota de Comandos (RCE) al combinar un ataque de Local File Inclusion (LFI) con Log Poisoning, utilizando un encabezado User-Agent malicioso. La herramienta Burp Suite fue esencial.

  3. Una vez obtenido acceso como el usuario "john", aprovechamos sus permisos de ejecución sobre exiftool para insertar nuestra clave SSH en su archivo authorized_keys. Posteriormente, con linpeas detectamos un binario con capabilities (tar), que nos permitió acceder al archivo privado de clave SSH de root, consiguiendo así por completo al sistema como root.

Last updated