- Se incorporó
- 16 Noviembre 2021
- Mensajes
- 436
Me imagino que debe ser archi recontra conocida esta pifea entre los colegas desarrolladores, pero no está demás darle un thread.
Introducción
Muchos TI conocemos la famosa carpeta .git, y si nó, pues ahora la van a conocer. Dicha carpeta almacena el repo de un proyecto GIT, comits, ramas, tags... todo queda dentro (todo lo que versionemos).
Si llegara a perderse la carpeta, el histórico del proyecto y la posibilidad del control de cambios basado en GIT se perdería, tendríamos que volver a clonar el repo. No obstante, si el proyecto excepto dicha carpeta se perdiera, podríamos restaurar todo como estaba en el último comit a excepción de los archvos que nunca se versionaron o ignoraron.
El repo no solo sirve para controlar versiones, tambien sirve para manejar actualizaciones.
Descargar el repo desde internet
Tal cual, vamos a reconstruir el repo desde la versión de producción, cualquiera que encontremos en internet, y a intentar accesar a lo que sea que encontremos dentro.
Para ésto basta con buscar en google.
El repo debería verse así:
Lo que estamos viendo es el directorio .git, faltaría descargarlo, para ello tenemos una herramienta llamada GitTools.
Luego nos posicionamos en alguna parte de nuestro equipo y clonamos el repo de GitTools.
Una vez clonado, veremos 3 herramientas al interior, Dumper, Extractor y Finder.
Como ya tenemos ubicado el repo, no hace falta que utilicemos Finder, tampoco Extractor, porque reconstruiremos todo con git y una terminal.
La sintaxis es sencilla:
El proceso puede demorar dependiendo del internet y de la cantidad de commits del repo... deberíamos ver algo como ésto:
Una vez "clonado" descargado el repo, dependiendo de la tecnología usada, podremos accesar directamente a mas recursos ahora vulnerables. Pero antes tenemos que reconstruir todo el repo, o al menos devolver lo versionado a donde estaba al último commit para mirar dentro.
Reconstruir el repo
Tenemos el repo en un directorio cualquiera, nos movemos con la terminal a dicho directorio y ejecutamos:
Veremos muchos archivos eliminados:
Ahora con el comando git restore vamos a restaurar todos los archivos de la siguiente forma ayudándonos de nuestro terminal linux:
En el archivo "restore.txt" quedarán todos los archivos concatenados al comando git restore, haría falta copiar y pegar en la terminal dentro de la carpeta que contiene el directorio .git.
Nota:
No tendremos acceso a los archivos históricos hasta que usemos la herramienta "Extractor" que viene con GitTools.
Buscando recursos vulnerables
Una vez que tenemos el proyecto restaurado, podemos ejecutar "Extractor" si quisieramos encontrar archivos para analizar si en algún momento de la historia del proyecto se comprometieron credenciales o algún otro archivo de importancia. Por lo pronto, lo común a encontrar es el acceso a la base de datos, sistemas de cache y/o al correo. Tambien es posible analizar el código buscando vulnerabilidades.
En éste caso he encontrado el acceso a una instancia de MySQL.
Nota:
No todos los accesos son públicos, algunos están restringidos a localhost, para que solamente la app pueda accesarlos. Para comprobarlo podemos usar nmap de la siguiente forma:
Como vemos el puerto 3306 correspondiente a MySQL está siendo filtrado y posiblemente no tengamos acceso. Si el recurso estuviera disponible, veríamos en ves de "filtered", "open" posibilitando el ingreso como vemo mas abajo.
Alertar del incidente
Supongamos que quisieramos alertar a alguien del incidente, si el repo no tuviera un dominio, por ende, no hubiera una entidad a quien reportar, simplemente nos iríamos a la siguiente ruta del directorio .git: logs/HEAD. En tal archivo (no siempre), podríamos visualizar los comits con sus respectivos nombre e email.
Conclusión
Borrar o restringir siempre el acceso a la carpeta .git o del repo de turno. Si no los indexa algún motor de búsqueda, lo hará algún bot. No es algo hipotético como hemos visto, es cuestión de tiempo.
Introducción
Muchos TI conocemos la famosa carpeta .git, y si nó, pues ahora la van a conocer. Dicha carpeta almacena el repo de un proyecto GIT, comits, ramas, tags... todo queda dentro (todo lo que versionemos).
Si llegara a perderse la carpeta, el histórico del proyecto y la posibilidad del control de cambios basado en GIT se perdería, tendríamos que volver a clonar el repo. No obstante, si el proyecto excepto dicha carpeta se perdiera, podríamos restaurar todo como estaba en el último comit a excepción de los archvos que nunca se versionaron o ignoraron.
El repo no solo sirve para controlar versiones, tambien sirve para manejar actualizaciones.
Descargar el repo desde internet
Tal cual, vamos a reconstruir el repo desde la versión de producción, cualquiera que encontremos en internet, y a intentar accesar a lo que sea que encontremos dentro.
Para ésto basta con buscar en google.
Código:
intitle:"index of /.git"
El repo debería verse así:
Lo que estamos viendo es el directorio .git, faltaría descargarlo, para ello tenemos una herramienta llamada GitTools.
Luego nos posicionamos en alguna parte de nuestro equipo y clonamos el repo de GitTools.
Código:
clone https://github.com/internetwache/GitTools
Una vez clonado, veremos 3 herramientas al interior, Dumper, Extractor y Finder.
Como ya tenemos ubicado el repo, no hace falta que utilicemos Finder, tampoco Extractor, porque reconstruiremos todo con git y una terminal.
La sintaxis es sencilla:
Código:
gitdumper.sh URL-REPO CARPETA-DESTINO
El proceso puede demorar dependiendo del internet y de la cantidad de commits del repo... deberíamos ver algo como ésto:
Una vez "
Reconstruir el repo
Tenemos el repo en un directorio cualquiera, nos movemos con la terminal a dicho directorio y ejecutamos:
Código:
git status
Veremos muchos archivos eliminados:
Ahora con el comando git restore vamos a restaurar todos los archivos de la siguiente forma ayudándonos de nuestro terminal linux:
Código:
git status | grep deleted | awk '{print "git restore", $2}' > restore.txt
En el archivo "restore.txt" quedarán todos los archivos concatenados al comando git restore, haría falta copiar y pegar en la terminal dentro de la carpeta que contiene el directorio .git.
Nota:
No tendremos acceso a los archivos históricos hasta que usemos la herramienta "Extractor" que viene con GitTools.
Buscando recursos vulnerables
Una vez que tenemos el proyecto restaurado, podemos ejecutar "Extractor" si quisieramos encontrar archivos para analizar si en algún momento de la historia del proyecto se comprometieron credenciales o algún otro archivo de importancia. Por lo pronto, lo común a encontrar es el acceso a la base de datos, sistemas de cache y/o al correo. Tambien es posible analizar el código buscando vulnerabilidades.
En éste caso he encontrado el acceso a una instancia de MySQL.
Nota:
No todos los accesos son públicos, algunos están restringidos a localhost, para que solamente la app pueda accesarlos. Para comprobarlo podemos usar nmap de la siguiente forma:
Código:
nmap -p 3306 URL/IP
Como vemos el puerto 3306 correspondiente a MySQL está siendo filtrado y posiblemente no tengamos acceso. Si el recurso estuviera disponible, veríamos en ves de "filtered", "open" posibilitando el ingreso como vemo mas abajo.
Alertar del incidente
Supongamos que quisieramos alertar a alguien del incidente, si el repo no tuviera un dominio, por ende, no hubiera una entidad a quien reportar, simplemente nos iríamos a la siguiente ruta del directorio .git: logs/HEAD. En tal archivo (no siempre), podríamos visualizar los comits con sus respectivos nombre e email.
Conclusión
Borrar o restringir siempre el acceso a la carpeta .git o del repo de turno. Si no los indexa algún motor de búsqueda, lo hará algún bot. No es algo hipotético como hemos visto, es cuestión de tiempo.