Scaricando alla cieca un repository git: in particolare, generando i file .pack

0

Sto testando con penna un'applicazione con un programma di bounty bug.

Ho trovato una cartella .git che dà solo un errore 403 vietato.

Tuttavia, quando si naviga in directory come dodgy.com/.git/config , il file verrà scaricato.

L'ho scoperto poche ore fa e ho pensato di provare a creare uno script bash che scarica "alla cieca" un repository git.

Ovviamente posso solo riportare i risultati attuali, tuttavia sarebbe bello vedere quante informazioni posso estrarre.

Fin qui questo script:

  1. Scarica tutti i file standard noti a git (ad esempio /refs/heads/master )
  2. Utilizza cat /refs/heads/master per trovare il commit head
  3. Scarica l'head commit generando la struttura di directory object relativa
    • Ad esempio, se un commit è 4b5a29b99bcb8b007c2f3932c9a49662aab1505e , l'oggetto verrà salvato a /objects/4b/5a29b99bcb8b007c2f3932c9a49662aab1505e .
    • Questo consente
      1. trovare il file oggetto alla cieca,
      2. generazione della struttura di directory locale corretta.
  4. Per ogni commit trovato, scarica il successivo commit analizzando gli errori mostrati da git log

I passaggi 3 e 4 vengono ripetuti per scaricare alberi, che possono essere trovati eseguendo git show xyz e analizzando il messaggio di errore generato ...

L'unica cosa che manca (per quanto ne so dalla ricerca limitata) è il download di un file .pack.

Git memorizza la maggior parte della sua storia in un file in /objects/pack/pack-{sha1}.pack .

Dalla mia ricerca, non riesco a vedere come generare lo sha1 senza il pieno accesso a un repository git.

È possibile generare un nome di file .pack da un numero incompleto di file di commit e di oggetti dell'albero?

Più leggo più mi sento impossibile. Informazioni pertinenti qui .

    
posta 0lly 01.05.2017 - 11:01
fonte

2 risposte

1

Un primo passo sarebbe semplicemente provare a git clone l'URL che termina in .git . A seconda della configurazione del repository remoto, il client git potrebbe essere in grado di creare una copia da solo!

In caso contrario, potresti essere in grado di ottenere un elenco di pacchetti sull'URL relativo:

.git/objects/info/packs

Se il repository remoto contiene pacchetti, saranno elencati nel formato:

P pack-c3499c2729730a7f807efb8676a92dcb6f8a3f8f.pack

che indica che esiste un pacchetto in:

.git/objects/pack/c3499c2729730a7f807efb8676a92dcb6f8a3f8f.pack

Due altri percorsi che vale la pena investigare sono:

  • .git/config - questo può contenere informazioni sensibili sulla configurazione, come l'URL e il nome utente che sono stati usati per clonare il repository
  • .git/info/refs - può contenere nomi di rami o tag che non erano a conoscenza di
risposta data 01.05.2017 - 23:08
fonte
0

Prova a utilizzare GitTools . È specificamente pensato per la tua situazione. Può scaricare una directory .git esposta anche se l'elenco delle directory è disabilitato.

    
risposta data 01.05.2017 - 11:03
fonte

Leggi altre domande sui tag