martes, 8 de noviembre de 2011

[Hack] ejecucion de codigo en URI

Como una variación a lo visto en [hack web parte2] filtros & pagina owned , hoy les voy a hablar de cross site scripting en URI. Tal vez les sea mas conocido el termino URL, como la dirección a un sitio determinado, en realidad la URL es un tipo de URI. La diferencia fundamental es que la URI puede incluir una subdirección de un elemento. De cualquier forma estamos hablamos de la dirección de un recurso web.

La diferencia con esta vulnerabilidad y la vista anteriormente es que en la anterior, los datos se enviaban desde un campo de texto a través de un método get o post. En esta, un error en el tratamiento de las variables en una pagina php, nos permite incluir código en la dirección web. (No confundir con método get donde las variables se pasan como parámetro por la dirección).

Cuando se crea una pagina php tenemos métodos que nos facilitan información a la hora de programar. Uno de tantos es $_SERVER que contienen información de las rutas y cabeceras. Este es un array al cual, se le pasan diversos elementos de la siguiente forma $_SERVER['elemento'].
El problema surge cuando este método se lo incluye directamente en un formulario intentando optimizarlo.
Formulario común:
<form method="POST" action="Dirección_donde_se_envían_los_datos">...
Formulario común en php:
echo "<form method="POST" action="Dirección_donde_se_envían_los_datos">"; ...
Formulario en php optimizado:
echo "<form method="POST" action=\"".$_SERVER['elemento']."\">"; ...

Se usa el método $_SERVER['elemento'] para añadir una dirección al campo action del formulario. El 'elemento' determina que elemento del arreglo se necesita. De esta forma
$_SERVER['PHP_SELF'] :
Devuelve como resultado el documento que se está ejecutando.
$_SERVER['REQUEST_URI'] :
Devuelve la dirección de donde se ingresó.
$_SERVER['SCRIPT_FILE'] :
Devuelve el documento de donde se ejecuta el script php.
$_SERVER['SCRIPT_FILENAME'] :
Devuelve la dirección donde se ejecuta el script php.

¿Que tiene de vulnerable?
Todavía no se dieron cuenta?, de esta forma esta permitiendo introducir código directamente en el la pagina a través de la barra de direcciones.
Un atacante podría cerrar la etiqueta introduciendo />"> al final de la dirección y luego inyectar el exploit, pudiendo robar cuentas, transmitir malware y todo ello.





Aclaración: Esto no es un tutorial, Gonzac Studios no se hace responsable por el mal uso de este material.

Saludos.

6 comentarios:

  1. Esta bueno, habiia leido sobre xss. pero no sabia nada de esto.
    Muy buena info, nos ayuda a hacer nuestros sitios mas seguros.

    ResponderEliminar
  2. Hay que saber como funcionan los ataques para poder solucionar la vulnerabilidad.
    Diseñar una web no es tan facil como tener un IDE que genere el codigo automaticamente.

    Saludos

    ResponderEliminar
  3. hola GoÔnzZzaC nececito mirar unas fotos de un perfil que estan privadas.....el URL de las fotos esta en URI habra alguna manera de verlas? ( me urge)

    ResponderEliminar
    Respuestas
    1. Fotos de perfil de facebook?, no se como trabajará realmente. Pero ellos utilizan varios identificadores de sesion, y seguramente muestran informacion si una determinada sesion tiene permisos. En caso contrario no es devuelta la informacion de donde se ubica cada parte que compone la pagina. De esta forma, es imposible ya que al cambiar el id de session se desconecta.

      Por otrolado, la foto esta disponible esta disponibles en un servidor externo, solo que no se sabe el "nombre" de la foto y la carpeta. Por ejemplo http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/76474_304218079687055_1076172034_n.jpg
      Donde "hphotos-ak-prn1" es la carpeta y "76474_304218079687055_1076172034_n.jpg" el de la foto. Pero des esta forma alguien mas deberia pasarte el link arrastrando la foto para abrir una pestaña nueva.

      saludos

      Eliminar
  4. de hecho si tengo el numero de usuario y el numero de la foto(s) es un tema algo privado.... tendras msn? o un email donde te pueda mandar toda la informacion?

    ResponderEliminar
    Respuestas
    1. Solo tienes que agregar a
      http://sphotos-d.ak.fbcdn.net/hphotos-ak-ash1/
      el numero (nombre) de la foto. Ojo, ash1/ puede ser ash2/, ash3/ ..
      Si tienes suerte vas a poder verla.

      Es dificil xq se desconoce el algoritmo de generacion de nombre de las imagenes.

      saludos

      Eliminar