
Script simple pour extraire toutes les ressources web via le dossier .SVN exposé sur le réseau.
Bien souvent, les testeurs d'intrusion d'applications web sont confrontés à la présence de dossiers .svn. Pour ceux qui ne le savent pas, le dossier .svn est utilisé par le système de contrôle de version SVN pour effectuer ses opérations. Pour un pentest en boîte noire, ce dossier contient une énorme quantité d'informations. Voici quelques domaines clés où cela peut aider.
Découvrir des fichiers et noms de dossiers cachés
Accéder au code source des fichiers.
Télécharger des fichiers même si des restrictions sont en place au niveau de htaccess.
Comment cela peut être réalisé.
Il existe deux manières d'y parvenir selon la version de SVN utilisée.
pour <1.6, nous avions les fichiers .svn/entries qui contenaient la liste des fichiers / dossiers ainsi que les noms d'utilisateurs utilisés pour commiter ces fichiers.
pour >1.6, nous avons .svn/wc.db qui contient des données similaires mais dans un format sqlite3.
Ces fichiers peuvent être directement accessibles via une URL.
SVN conserve une copie de sauvegarde de tous les fichiers dans deux emplacements distincts.
où
filename est le nom réel du fichier.
CHECKSUM est la somme Sha1 du fichier.
XX est constitué des deux premiers caractères de CHECKSUM.
Le premier type d'entrées a une limite : supposons que le nom du fichier soit testme.php, le chemin devient alors.
.svn/text-base/testme.php.svn-base
un grand nombre de serveurs exécuteront le fichier et serviront la sortie.
C'est là que l'option 2 brille, cependant cette information n'est disponible que dans le cas de wc.db (version SVN >1.6) et cela nécessite que le répertoire .sv/pristine soit accessible via le web.
Cependant, après avoir beaucoup cherché, je n'ai pas trouvé un seul code capable de faire ces deux choses en une seule fois.
Voici donc un outil qui peut effectuer les deux opérations en un seul script.
minimal
svn-extractor.py --url "url with .svn available"
alloptions
$ python svnextractor.py --help
usage: svn_extractor.py [-h] --url TARGET [--debug] [--noextract] [--userlist]
[--wcdb] [--entries] [--proxy PROXY] [--match MATCH]
This program is used to extract the hidden SVN files from a webhost
considering either .svn entries file (<1.6) or wc.db (> 1.7) are available
online. This program actually automates the directory navigation and text
extraction process
optional arguments:
-h, --help show this help message and exit
--url TARGET Provide URL
--debug Provide debug information
--noextract Don't extract files just show content
--userlist show the usernames used for commit
--wcdb check only wcdb
--entries check only .svn/entries file
--proxy PROXY Provide HTTP Proxy in http(s)://host:port format
--match MATCH only download files that match regex
Credit (C) Anant Shrivastava http://anantshri.info Greets to Amol Naik, Akash
Mahajan, Prasanna K, Lava Kumar for valuable inputs
Il serait injuste de dire que j'ai fait toutes les recherches moi-même, voici donc les liens vers les diverses ressources que j'ai utilisées pour obtenir ces informations.
http://pen-testing.sans.org/blog/pen-testing/2012/12/06/all-your-svn-are-belong-to-us (technique manuelle pour wc.db)
http://www.adamgotterer.com/post/28125474053/hacking-the-svn-directory-archive (technique manuelle pour .svn/entries)
http://www.cirt.net/svnpristine (seul outil automatisé que j'ai pu trouver en ligne réalisant la magie wc.db)