· 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.

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:



