Estoy probando una aplicación con un programa de recompensas por errores.
Encontré una carpeta .git que solo da un error 403 prohibido.
Sin embargo, cuando se navega por directorios como dodgy.com/.git/config
, el archivo se descargará.
Descubrí esto hace unas horas y me imaginé que intentaría crear un script de bash que descargue "a ciegas" un repositorio git.
Obviamente, solo puedo informar los hallazgos actuales, sin embargo, sería genial ver cuánta información puedo obtener.
Hasta ahora, este script:
- Descarga todos los archivos estándar conocidos por git (por ejemplo,
/refs/heads/master
) - Utiliza
cat /refs/heads/master
para encontrar el compromiso principal - Descarga la confirmación principal generando la estructura de directorios
object
relevante- Por ejemplo, si una confirmación es
4b5a29b99bcb8b007c2f3932c9a49662aab1505e
, el objeto se guardará en/objects/4b/5a29b99bcb8b007c2f3932c9a49662aab1505e
. - Esto permite
- encontrando el archivo objeto a ciegas,
- generando la estructura de directorio local correcta.
- Por ejemplo, si una confirmación es
- Para cada confirmación encontrada, descarga la siguiente confirmación analizando los errores mostrados por
git log
Los pasos 3 y 4 se repiten para descargar los árboles, que se pueden encontrar ejecutando git show xyz
y analizando el mensaje de error generado ...
Lo único que falta (por lo que sé por investigación limitada) es descargar un archivo .pack.
Git almacena la mayor parte de su historial en un archivo en /objects/pack/pack-{sha1}.pack
.
De mi investigación, no puedo ver cómo generar el sha1 sin acceso completo a un repositorio git.
¿Es posible generar un nombre de archivo .pack a partir de un número incompleto de archivos de objetos de confirmación y de árbol?
Cuanto más leo, más me siento imposible. Información relevante aquí .