28 sept 2011

Source Code Disclosure

SCD o Source code disclosure, es una vulnerabilidad que permite la lectura de ficheros que se encuentren en el sistema víctima,  debido a errores en la programación de páginas que realizan descargas de archivos. Esto se da debido a que no se hace un conveniente filtrado de los datos que llegan  del cliente, permitiéndonos obtener cualquier fichero del cual conozcamos su ruta dentro del servidor.

Un ejemplo de un código vulnerable es el siguiente:

<?php$f = $_GET["f"];header("Content-type: application/octet-stream");header("Content-Disposition: attachment; filename=\"$f\"\n");$fp=fopen("$f", "r");fpassthru($fp);?>

En él se observa cómo se insertan los datos directamente dentro de la función fopen, sin ningún tipo de validación o verificación, ocasionando que el fichero sea descargado sin inconveniente.

A continuación presento la explotación de este ataque en una página vulnerable. Los datos fueron modificados para proteger el sitio original.

Se tiene la siguiente ruta: www.ejemplo.com/download.php?id=archivos.pdf

En ella, la variable id recibe el archivo a descargar, en este caso archivos.pdf, reemplazamos este documento por el nombre de fichero o página que queramos obtener, para este ejemplo, el objetivo es encontrar las credenciales de conexión de la base de datos, para ello le damos como valor a la variable id el fichero download.php, como se muestra en la figura 1.

 

[caption id="attachment_4557" align="aligncenter" width="473" caption="Figura 1 Descarga del fichero "][/caption]

En la figura 2 se presenta el código del archivo, brindándonos información adicional, como lo es el fichero con_str.php, el cual podría ofrecernos datos sensibles, puesto que es requerido al cargar la página, pudiendo contener los datos de la conexión.  A continuación, procedemos a su descarga, figura 3.

 

[caption id="attachment_4560" align="aligncenter" width="482" caption="Figura 2 Código fuente fichero download.php"][/caption]

 

[caption id="attachment_4562" align="aligncenter" width="475" caption="Figura 3 Descarga del fichero con_str.php"][/caption]

Como se dijo anteriormente, el fin principal de la explotación de esta vulnerabilidad es tener acceso a documentos existentes en el servidor objetivo, para este caso, el nuestro, era conseguir las credenciales que nos permitirán tener acceso a la base de datos. Con esta información en nuestras manos solo nos faltará acceder como un usuario legítimo al sistema. Figura 4 y 5.

 

[caption id="attachment_4565" align="aligncenter" width="477" caption="Figura 4 Archivo de conexión de la base de datos"][/caption]

 

[caption id="attachment_4566" align="aligncenter" width="482" caption="Figura 5 Conectándose a la base de datos"][/caption]

Técnica muy interesante, ¿y vosotros qué opináis?

12 comentarios:

  1. A mi la técnica me parece muy interesante ... ya he conseguido acceso a más de un server gracias a esta ténica .... autorizado, claro :)También comentar alguna protección que me encontré en el código fuente de los accesos a eses servers:=> Prohiben el escalado de directorios, buscando el carácter '/' o '..'Así que nada como un y/o una doble codificación unicode para saltar los caracteres '/' y '..' y tener acceso al conf.php (que enseñas en tu artículo) o incluso el /etc/passwd

    ResponderEliminar
  2. Holaa, si, hay muchos sitios que te filtran algunos caracteres como / y .. y no te dejan realizar el escalado de directorios tan fácilmente, lo más recomendable es hacer como expones tu, el uso de otro tipo de codificación como ascii, Unicode, hexadecimal....Con respecto al más que todo lo he usado cuando al sitio le está añadiendo al contenido de la variable una extensión específica por ejemplo:$pagina = $_GET["pagina"].".php"; Al añadirle el , él toma el carácter nulo como la finalización de la cadena, haciendo que ignore lo que se encuentre después de este, permitiendo saltar ese filtrado y ver ficheros como /etc/passwd y otros que tengan una extensión distinta en este caso a la de .phpSaludos!!

    ResponderEliminar
  3. Creo que el termino "Source Code Disclosure" es erróneamente adjudicado a la técnica descrita anteriormente, esta técnica se llama "Arbitrary File Download" y las rutas con NULL ya son invalidas desde la versión 5.3.4 de PHP[1], asi como trasladado el parche/solución a los muchos forks en mantenimiento por las diferentes distribuciones de linux que hay...SCD ocurre normalmente cuando existe un fallo en la configuración del servidor web que permite revelar el código fuente... ejemplo famoso en PHP: Muchos administradores suelen desactivar la directiva"short open tag", causando que mucho software que usaba estaba forma corta no se procesara y revelara código fuente de muchos pero muchos sitios....Ejemplo en-vivo 0-day de esta vulnerabilidad...http://www.redinfocol.org/wargame/index.phpSaludos[1]http://www.php.net/archive/2010.php#id2010-12-10-1

    ResponderEliminar
  4. Directory Transversal + Full path disclosure ;D

    ResponderEliminar
  5. de echo se te olvido que igual podrias hacer un bypass.ja ya habia echo esto :D LOL pero ya agregando el comen del user es como si tubieras una shell.

    ResponderEliminar
  6. g30rg3_x no es erróneo el termino, y tú mismo me estás dando la razón en donde me dices "SCD ocurre normalmente cuando existe un fallo en la configuración del servidor web que permite revelar el código fuente", exactamente eso hablo en la técnica, estoy relevando código fuente. Ahora no solo es error de mala configuración del servidor, sino también errores de programación, que te llevaran a la descarga de cualquier archivo y ver su código fuente.Y no te confíes de que una técnica es antigua y que "debería" haber sido solucionada, actualmente existen muchos sitios vulnerables a todas estas fallas.nouter, ummmm se me olvido hacer un bypass? hay muchas formas de hacer las cosas, todo depende del sitio, de los filtros que se tengan y de los errores que se hayan cometidos... en este caso, solo quería mostrarles era un ejemplo de una aplicación real con este ataque, me limite a exponer como aprovecharme de este bug en este sitio en particular...

    ResponderEliminar
  7. Aliocha,Como dije en twitter... IMHO la técnica descrita no corresponde con el ejemplo demostrado aquí; creo que te concentras mucho en el fin (lo que logras obtener) y no en los medios con los que logras obtener la información, te invito a comparar ambas descripciones/técnicas así como y que tomes tu decisión en base a lo mismo.SaludosPD: Estoy consiente de que esta técnica (Arbitrary File Download) sigue presente en muchos servidores (tanto así que aun después de reporte uno con los administradores, lo publique en twitter... nadie le hizo caso: http://twitter.com/#!/g30rg3_x/status/89194496658636800)

    ResponderEliminar
  8. Causando debate Karina! buen trabajo! :D de nuevo mis mas sinceras felicitaciones... :D

    ResponderEliminar
  9. Aliocha es mi amiga :) sii, buen articulo!

    ResponderEliminar
  10. Holaa, ajjajaajja muchas gracias Pablo :) y bueno esa es la idea que se pueda debatir y intercambiar opiniones :DGracias tambien a Bgx un gran saludo!! :)g30rg3_x que pena no haberte respondido antes, jejeje ando a tope en estos dias :SInsisto, se llama Source code disclosure. Si quieres por mail podemos intercambiar material... Me dio mucha curiosidad tu punto de vista y ahora te pregunto, para ti cual es el limite de una y otra tecnica?

    ResponderEliminar
  11. ahhhh se me olvidaba, g30rg3_x , claro que si, existen muchos sitios aun con estos fallos, ahora mismo tengo 3...Saludos!!

    ResponderEliminar
  12. Hola de nuevo Aliocha,Después de pensarlo comparar descripciones y claro discutirlo con algunos de mis compañeros creo que ambos tenemos la razón.Por que lo digo?Simple...Como dije el termino SCD se refiere a lo que obtienes no a como lo obtienes, mientras que el termino AFD se refiere a como obtienes información.Por eso es que ambos tenemos razon ya que desde el punto de vista inicial todo empieza por un AFD pero en el fin te sirve para SCD, una trabalenguas pero bueno te debo una disculpa ya que aunque a manera personal sigo viendo entiendo un SCD desde una perspectiva de ataque inicial no tanto como el fin.Saludos

    ResponderEliminar