
Einfaches Skript zum Extrahieren aller Webressourcen mittels eines über das Netzwerk exponierten .SVN-Ordners.
Oftmals werden Webanwendungs-Pentester mit dem Vorhandensein von .svn-Ordnern konfrontiert. Für diejenigen, die es nicht wissen: Der .svn-Ordner wird vom SVN-Versionskontrollsystem für seine Operationen verwendet. Für einen Blackbox-Pentest enthält dieser Ordner eine große Menge an Informationen. Einige der wichtigsten Bereiche, in denen dies helfen kann, sind:
Versteckte Dateien und Ordnernamen aufdecken
Auf den Quellcode der Dateien zugreifen.
Dateien herunterladen, selbst wenn Einschränkungen in der htaccess aktiv sind.
Wie dies erreicht werden kann.
Es gibt zwei Möglichkeiten, dies zu erreichen, abhängig von der verwendeten SVN-Version.
Für <1.6 gab es .svn/entries-Dateien, die eine Liste der Dateien/Ordner sowie die Benutzernamen enthielten, die für das Einchecken dieser Dateien verwendet wurden.
Für >1.6 haben wir .svn/wc.db, das ähnliche Daten, jedoch im sqlite3-Format, enthält.
Diese Dateien könnten direkt über die URL zugänglich sein.
SVN bewahrt eine Sicherungskopie aller Dateien an zwei getrennten Orten auf.
wobei
filename der tatsächliche Name der Datei ist.
CHECKSUM die Sha1-Summe der Datei ist.
XX sind die ersten beiden Zeichen von CHECKSUM.
Der erste Eintragstyp hat eine Einschränkung: Angenommen, der Dateiname ist testme.php, dann wird der Pfad zu:
.svn/text-base/testme.php.svn-base
Eine große Anzahl von Servern führt die Datei aus und liefert die Ausgabe.
Genau hier glänzt Option 2. Diese Informationen sind jedoch nur im Fall von wc.db (SVN-Version >1.6) verfügbar, und es ist erforderlich, dass das .sv/pristine-Verzeichnis über das Web zugänglich ist.
Nach langer Suche konnte ich jedoch keinen einzelnen Code finden, der beides auf einmal erledigt.
Hier ist also ein Tool, das beide Operationen in einem Skript durchführen kann.
minimal
svn-extractor.py --url "url with .svn available"
alle Optionen
$ 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
Es wäre unfair zu behaupten, ich hätte die gesamte Recherche selbst durchgeführt. Hier sind also die Links zu den verschiedenen Ressourcen, die ich verwendet habe, um die Informationen zu erhalten.
http://pen-testing.sans.org/blog/pen-testing/2012/12/06/all-your-svn-are-belong-to-us (manuelle Technik für wc.db)
http://www.adamgotterer.com/post/28125474053/hacking-the-svn-directory-archive (manuelle Technik für .svn/entries)
http://www.cirt.net/svnpristine (einziges automatisiertes Tool, das ich online finden konnte, das die wc.db-Magie beherrscht)