Descargando aplicaciones completas mediante listado de directorio y GIT

·3 min de lectura
codigo fuentedirbusterdirbdirectory listingsource codealevskgit

Comenzamos con lo básico, es muy común que a la hora de realizar una prueba de penetración a una aplicación web utilicemos herramientas automatizadas como dirbuster para encontrar archivos y directorios sensibles, la finalidad de Dirbuster es obtener una lista de archivos y directorios válidos en el servidor.

Podemos ejecutarlo de la siguiente manera:

# dirb http://www.sitioweb.com

En el caso de nuestro sitio web de ejemplo hemos encontrado un directorio, el folder .git, .git es un directorio utilizado por el versionador del mismo nombre (GIT) y ha sido expuesto (olvidado probablemente) a Internet.

Para los que no saben, Git es un software versionador de código, muy popular entre desarrolladores ya que te permite lleva un registro de los cambios que realizamos a nuestros archivos, por lo tanto dentro de ese directorio .git debe de existir una copia del código fuente de la aplicación :).

Ahora, si tenemos la buena fortuna de que el servidor donde corre la aplicación este mal configurado y nos permita listar directorios podemos ir a ese directorio desde nuestro navegador.

Y procedemos a realizar un wget recursivo para descargarnos todos los archivos en el repositorio local

# wget –r http://www.sitioweb.com/.git

Mientras se ejecuta el wget observamos algo interesante, los repositorios contienen archivos .pack de varios mb de tamaño, los archivos pack en Git son básicamente una estructura de datos que contienen una versión hasheada del contenido de nuestros archivos así como referencias, diferencias e índices de los mismos. Más información sobre los Pack files https://schacon.github.io/gitbook/7_the_packfile.html

Una vez terminemos de descargar todo el contenido de la carpeta .git tendremos algo como lo siguiente:

Si intentamos ejecutar comandos de git como por ejemplo git status nos dará un error referente a que ciertos archivos tienen un formato inadecuado, eso es porque wget también descargo todos los índices (index.html?C=D; index.html?=C=M, etc) de cada una de las carpetas por las que paso recursivamente.

Podemos eliminar todos los archivos index.html dentro de la carpeta .git de forma recursiva y al final volver a probar con

# find .git -type f -name ‘index.htm*’ -delete
# git status

Listo, el repositorio funciona de nuevo, debido a que nuestro “proyecto” esta vacío git status nos arroja que todos los archivos fueron eliminados, sin embargo podemos “deshacer” ese cambio mediante

# git checkout – .

Y automáticamente recuperamos todos los archivos de la aplicación.

Ahora tenemos acceso al código fuente de la aplicación, podemos extraer credenciales de conexión a base de datos, credenciales hard coded, hacer un análisis de flujo, análisis estático, etc. Básicamente nuestra prueba de penetración blackbox se acaba de convertir en whitebox.

Impacto

• La superficie de ataque aumenta drásticamente (podemos descubrir todavía más archivos y directorios)
• Analizando el código fuente podemos detectar muchísimas vulnerabilidades más (SQLi, uploaders vulnerables, RCE, etc.)
• Nos pueden robar el código fuente de la aplicación

Solución

La solución es bastante sencilla, podemos simplemente no incluir el directorio .git en nuestro folder expuesto a Internet, sin embargo si es necesario que lo tengamos ahí por cuestiones de actualizar el servidor de forma rápida y tener la última versión del proyecto siempre, hay varias cosas que podemos hacer:

• Deshabilitar listado de directorios en el servidor
• Prohibir al servidor web servir el directorio .git (RewriteRule “^(.*/)?\.git/” - [F,L])
• Aplicar permisos y un propietario diferente al del servidor web en el directorio .git