martes, abril 16, 2013

Subversion: wc.db & pristine

Los riesgos de los repositorios de código de Subversion en los sitios web públicos ya los hemos comentado muchas veces. El ejemplo de Apple que se dejó un .svn/Entries y que mediante el SVN/Extractor de FOCA nos permitió llegar a una shell es uno de los casos más claros, pero esto puede ser mucho peor, ya que también tenemos la base de datos wc.db y el directorio pristine

wc.db

Esta es la base de datos de subversion y en ella se puede encontrar información de todos los ficheros que se han subido, incluso cuando el fichero .svn/entries esté vacío, algo que puede ser habitual. Encontrar estas bases de datos es tan sencillo, como encontrar el fichero .svn/entries con FOCA o hacer un poco de hacking con buscadores para hacer unas pruebas. En este caso un sencillo dork en Bing.

Figura 1: Buscando bases de datos de subversion en Bing

Una vez te descargas las base de datos se puede ver que es un SQLite, así que lo primero que puedes probar es a abrirla con un SQLite Browser o similar. En mi caso, el resultado es que la base de datos aparece vacía, aún cuando tiene más de 400 Kb de tamaño.

Figura 2: Base de datos vacía al analizarla con SQLite Browser

Por supuesto, ya que tenemos Recover Messages que hace análisis forense de todos los archivos SQLite, la subí y la analicé, apliqué una licencia y me descargué el fichero txt con el Raw Data Recovered y lo abrí con un editor de texto.

Figura 3: Analizando la base de datos de Subversion con Recover Messages

Como se puede ver en el editor de texto, aparecen los nombres de los archivos que se encuentran en el servidor, así que nada, como si tuviéramos el .svn/entries completo.

Figura 4: El volcado forense del fichero SQLite hecho con Recover Messages

Y basta con pedir el fichero a la URL a la ubicación concreta para acceder a él, tal y como se puede ver en la imagen.

Figura 5: El fichero está en su sitio

Pristine

Si lo de arriba te ha parecido chulo, espera a lo siguiente. Resulta que subversion guarda una copia de los archivos originales que se suben al servidor en una carpeta llamada pristine. La gracia es que allí el nombre de los archivos se ofusca en sha1, con una extensión .svn-base, lo que hace que no se le apliquen los tipos MIME asociados.

Figura 6: Estructura del nombre de los ficheros en el directorio pristine

Es decir, que un archivo .php está almacenado como un archivo .svn-base en la carpeta pristine y por lo tanto puede ser descargado. Para hacer eso, existe el programa svnpristine, al que solo hay que pasarle la ruta del servidor donde se encuentra la raiz de subversion, y se volcará toda la carpeta pristine a local.

Figura 7: Volcado de pristine con svnpristine

Con lo que si con el fichero .svn/entries se pueden hacer muchas cosas, con wc.db y pristine, las auditorías de seguridad pueden quedar vistas para sentencia con solo encontrar el subversion.

Saludos Malignos!

2 comentarios:

  1. Read more about svn/entries and wc.db extraction and automated way of doing the same.

    blog post : blog.anantshri.info/svn-extractor-for-web-pentesters/

    automated approach here :
    https://github.com/anantshri/svn-extractor

    ResponderEliminar
  2. Buen Artículo Maligno, :)

    ResponderEliminar