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:
- Scarica tutti i file standard noti a git (ad esempio
/refs/heads/master
) - Utilizza
cat /refs/heads/master
per trovare il commit head - 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
- trovare il file oggetto alla cieca,
- generazione della struttura di directory locale corretta.
- Ad esempio, se un commit è
- 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 .