Descargando a ciegas un repositorio git: específicamente, generando archivos .pack

0

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:

  1. Descarga todos los archivos estándar conocidos por git (por ejemplo, /refs/heads/master )
  2. Utiliza cat /refs/heads/master para encontrar el compromiso principal
  3. 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
      1. encontrando el archivo objeto a ciegas,
      2. generando la estructura de directorio local correcta.
  4. 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í .

    
pregunta 0lly 01.05.2017 - 11:01
fuente

2 respuestas

1

Un primer paso sería simplemente intentar git clone la URL que termina en .git . Dependiendo de la configuración del repositorio remoto, el cliente git puede crear una copia por sí mismo.

Si no, puede obtener una lista de paquetes en la URL relativa:

.git/objects/info/packs

Si el repositorio remoto contiene paquetes, se enumerarán en el formato:

P pack-c3499c2729730a7f807efb8676a92dcb6f8a3f8f.pack

que indicará que existe un paquete en:

.git/objects/pack/c3499c2729730a7f807efb8676a92dcb6f8a3f8f.pack

Otros dos caminos que vale la pena investigar son:

  • .git/config : puede contener información de configuración confidencial, como la URL y el nombre de usuario que se usaron para clonar el repositorio
  • .git/info/refs : puede contener nombres de ramas o etiquetas que de otra forma no conocías
respondido por el duskwuff 01.05.2017 - 23:08
fuente
0

Intente usar GitTools . Está específicamente destinado a su situación. Puede descargar un directorio .git expuesto incluso si la lista de directorios está desactivada.

    
respondido por el Sjoerd 01.05.2017 - 11:03
fuente

Lea otras preguntas en las etiquetas