Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: h3ct0r en 17 Octubre 2011, 14:18 pm



Título: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 17 Octubre 2011, 14:18 pm
Buenas amigos,

Haciendo auditoria a un servidor me encontré con un script en php, que se usa para cargar dinámicamente archivos de javascript, el cual un bug de seguridad.

Este no validaba si el usuario colocaba una URL mal formada con retornos en el path lo cual me permitía ver cualquier archivo en el servidor que tuviera permisos generales o del usuario que corre apache. Lo explote de la siguiente manera : www.siteVulnerable.com/images/loader.php?x=../../../../../../../etc/passwd

El Script es el siguiente :

Código:
<?php
$cache = (isset($_GET['cache']))? intval($_GET['cache']) : TRUE;
$LF = "\n";
$output = '';
$files = explode(',', $_GET['X']);
foreach ($files as $file) {
$filepath = realpath('./'.$file);
$output .= $LF.@file_get_contents($filepath);
}
if (!empty($output)) {
# Remove spaces
$output = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $output);
$output = str_replace(array("\r\n", "\r", "\n", "\t", '', '', ''), '', $output);
# Send HTTP headersheader('Content-Type: text/css');
if ($cache) {
header('Pragma: public');
header('Cache-Control: max-age=31536000');
header('Last-Modified: Thu, 28 Jan 2010 22:31:25 GMT');
header('Expires: '.gmdate('D, d M Y H:i:s', time()+31536000).' GMT');
header('ETag: "'.md5($output).'"');} else {header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
}
# Output file(s)
contentsob_start('ob_gzhandler');
echo $output;ob_end_flush();
}
else {
header('HTTP/1.0 404 Not Found');
header('Expires: 0');
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
}
exit;
?>

Logre detectar que tipo de sistema para CMS usaban, por cierto fue algo difícil ya que modificaron mucho todo el sistema, aparte de que era uno algo desconocido. Tambien logre ver los usuarios (mas no sus contrasenas ya que usaban shadow). Pero si logre ver el archivo de configuracion a la base de datos: usuario, pass, nombre de la db y direccion. El problema es que no tiene puerto abierto para acceder a la base de datos de forma remota. Y no he podido reventar ese codigo php para ejecutar algun comando o levantarme una shell dentro del sistema.

En resumen:
El sistema usado es : Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch Server (Encontrado por errores que da apache)
Las puertas abiertas son: 21 y 80 (ftp y web)
Datos que tengo : /etc/passwd, /etc/hosts, default (de apache), httpd.conf, user y pass de la base de datos.

De aqui, y con estos datos, que puedo hacer? Es un camino sin salida?
 :silbar:


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: madpitbull_99 en 17 Octubre 2011, 21:06 pm
¿Has probado si también admite incluir archivos remotos? Si lo permite, la clave es RFI.



Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 17 Octubre 2011, 21:17 pm
Hola madpitbull_99,

Intente ver que mas podía hacer con ese código, pero la función realpath le coloca la dirección real de donde se localiza el webpath y me impide hace un RFI (si coloco hola como parámetro, la variable output quedaría así "/var/www/public/hola") o conoces alguna manera de saltármelo?

Citar
foreach ($files as $file) {
   $filepath = realpath('./'.$file);
   $output .= $LF.@file_get_contents($filepath);
}


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: ~ Yoya ~ en 18 Octubre 2011, 17:21 pm
ya tienes todo lo necesario. Cual es su objetivo?


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 18 Octubre 2011, 17:27 pm
~ Yoya ~ , No puedo prácticamente hacer nada!, si quisiera ver datos de usuarios, correos, modificar los logs, etc se me hace imposible con lo que tengo hasta ahora. (Solo puedo leer archivos a los que apache tenga permiso).

Mi objetivo por ahora es ver la manera de levantar una shell, o tener algún tipo de acceso que me permita ejecutar comandos dentro del servidor para así acceder a la DB desde adentro, ya que no se puede acceder remotamente (tiene los puertos cerrados!).

Que me recomiendan?


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: ~ Yoya ~ en 18 Octubre 2011, 17:34 pm
Ps puedes comenzar a buscar bug's, como puedes ver el source sera un poco mas fácil.

Se puede subir shell mediante LFI.


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 18 Octubre 2011, 18:02 pm
Voy a empezar a buscar mas bugs, aver si tengo suerte y consigo algo mejor con que trabajar. Por ahora el LFI lo estoy descartando ya que no estoy ejecutando de ninguna manera el código de las paginas a las que hago referencia, solo las lee y muestra el contenido formateado.

Estuve buscando si hay alguna manera de reventar la función file_get_contents pero nada que pueda usar maliciosamente!

Posteare los avances que vaya logrando.  ;D


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: ~ Yoya ~ en 18 Octubre 2011, 22:31 pm
Si aprendieras PHP te vendria muy bien


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 18 Octubre 2011, 22:50 pm
Yo se PHP.  (:


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: ~ Yoya ~ en 19 Octubre 2011, 04:59 am
Entonce usa la logica ps.


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: cibergolen en 28 Octubre 2011, 13:48 pm
Busca algún uploader, da igual que sea vulnerable o no.

Después, ve al CMD (en caso de Windows) y haz este proceso:

Código:
type Shell.php >> Imagen.jpg

Suble el JPG modificado (u otra extensión), y incluyelo con el LFI. Te saltará la shell.

¿Motivo? el LFI interpreta el código de la imagen, no la imagen en si.

Puedes hacer algo similar con los logs de apache a los que tienes acceso, pero eso si: Después recuerda editar los logs, o tendrás problemas serios.

Estas son solo dos maneras de saltar una shell con un LFI, por supuesto hay más.

Le dejo el resto a Google  :silbar:

EDITO: Verifica si los datos corresponden al servicio FTP, busca el panel de administración, conecta via MySQL al host y trata de dumpear una shell con into outfile... las posibilidades son inmensas. Juega con ellas.
Un saludo!


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 28 Octubre 2011, 17:07 pm
Gracias por los datos cibergolen, el problema es que la vulnerabilidad que encontre es actualmente solo un source code disclosure, hasta ahora no he encontrado un LFI o un RFI que me permita ejecutar codigo!

Y revisando los codigos fuente de las demas clases de php no he encontrado nada bueno para explotar! Cuando tenga mas tiempo sigo revisando pero por ahora creo que es un camino sin salida  :-\


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: WHK en 31 Octubre 2011, 00:03 am
si tienes la db y todo eso porque no pruebas ver si tienen algun panel de administración? y desde ahi subirle cosas o editar archivos en el caso de que sea posible.

Por lo menos LFI no se ve porque ese código solo obtiene el contenido pero no le hace include().
Checa los demás archivos talves haya algo mas, pero por lo menos con los datos que tienes hasta ahora se ve bastante dificil que puedas subirle algo a menos que tengas algo mas como una inyeccion sql y cosas por el estilo.

Lo que tienes es un simple file disclosure pero es bastante util.


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: cibergolen en 1 Noviembre 2011, 13:53 pm
bastante dificil que puedas subirle algo a menos que tengas algo mas como una inyeccion sql y cosas por el estilo.

Lo que tienes es un simple file disclosure pero es bastante util.

Puede tratar de dumpear una shell si logra la conexión al servidor de SQL, los datos han de estar en la Web, es sólo buscar

Saludos


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: WHK en 5 Noviembre 2011, 08:41 am
el problema es que la mayoria de los servidores solo permiten acceso a la db desde localhost, pero vale la pena intentar.

Utiliza heidysql
http://heidisql.googlecode.com/files/HeidiSQL_6.0_Portable.zip


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: h3ct0r en 9 Noviembre 2011, 19:05 pm
El problema es que no tengo como accederle desde afuera por que el servidor solo tiene los puertos de ftp y http (21 y 80) abiertos!

Si no encuentro algún otro bug, la infiltración se va a quedar parada!  :xD


Título: Re: Infiltrar servidor a travez de bug en PHP. Encontre datos de DB ahora que sigue?
Publicado por: cibergolen en 10 Noviembre 2011, 20:47 pm
¿Qué servicios está corriendo por ellos?