Folgendes HowTo beschreibt im wesentlichen wie man das aufkommende Qualys WebApp Fingerprinting "BlindElephant" unter BackTrack 4 zum laufen bekommt.
Komponenten:
1. BlindElephant: BlindElephant Web Application Fingerprinter
2. Python 2.7.2: Download Python
Ein aktuell gepatchtes BT4 bringt die Python Version 2.5.2 mit sich. Blindelephant hätte allerdings gerne ein 2.6.x aber bitte kein Python 3.x, welches sich zusätzlich unter BT4 mit APT installieren lassen würde.
Mittelserhält man die entsprechende aktuelle Version der Quellen die später, dank Python nicht weiter beackert werden müssen.Code:svn checkout https://blindelephant.svn.sourceforge.net/svnroot/blindelephant
Anschließend wechselt man ins SVN Verzeichniss “blindelephant/trunk/src/blindelephant” wo man nun erfolgreich die “BlindElephant.py” finden sollte.
Ein “python -V” zeigt die aktuelle Python Version also die 2.5.2. Probieren wir nun das Programm zu bemühen uns dienlich zu sein:Code:root@bt:/tmp# cd blindelephant/trunk/src/blindelephant/ root@bt:/tmp/blindelephant/trunk/src/blindelephant# ls -la total 84 drwxr-xr-x 4 root root 4096 Aug 3 11:21 . drwxr-xr-x 4 root root 4096 Aug 3 11:21 .. drwxr-xr-x 6 root root 4096 Aug 3 11:21 .svn -rw-r--r-- 1 root root 2987 Aug 3 11:21 BlindElephant.py -rw-r--r-- 1 root root 10120 Aug 3 11:21 Configuration.py -rw-r--r-- 1 root root 11014 Aug 3 11:21 DifferencesTables.py -rw-r--r-- 1 root root 1103 Aug 3 11:21 FileMassagers.py -rw-r--r-- 1 root root 11219 Aug 3 11:21 FingerprintUtils.py -rw-r--r-- 1 root root 15493 Aug 3 11:21 Fingerprinters.py -rw-r--r-- 1 root root 1427 Aug 3 11:21 Loggers.py -rw-r--r-- 1 root root 2813 Aug 3 11:21 Scanner.py -rw-r--r-- 1 root root 0 Aug 3 11:21 __init__.py drwxr-xr-x 5 root root 4096 Aug 3 11:21 dbs root@bt:/tmp/blindelephant/trunk/src/blindelephant#
Was aber so nicht bleiben wir, wenn wir es in Aktion versetzen wollen:Code:python ./BlindElephant.py Error: url and appName are required arguments unless using -l, -u, or -h Usage: BlindElephant.py [options] url appName Options: -h, --help show this help message and exit -p PLUGINNAME, --pluginName=PLUGINNAME Fingerprint version of plugin (should apply to web app given in appname) -s, --skip Skip fingerprinting webpp, just fingerprint plugin -n NUMPROBES, --numProbes=NUMPROBES Number of files to fetch (more may increase accuracy). Default: 15 -w, --winnow If more than one version are returned, use winnowing to attempt to narrow it down (up to numProbes additional requests). -l, --list List supported webapps and plugins Use "guess" as app or plugin name to attempt to attempt to discover which supported apps/plugins are installed.
Eine kurze Suche im Netz könnte den Researcher nun dazu bringen, dass die urlib2.urlopen Funktion von Python: a) eine Built-In Funktion ist und b) in Python 2.5.2 keinen Parameter “timeout” kennt und ihn daher auch nicht akkzeptiert, was hier zu einem Programmabbruch führt.Code:python BlindElephant.py http://laws.qualys.com guess Probing... Traceback (most recent call last): File "BlindElephant.py", line 47, in <module> apps = g.guess_apps() File "/tmp/blindelephant/trunk/src/blindelephant/Fingerprinters.py", line 214, in guess_apps self.error_page_fingerprint = wafu.identify_error_page(self.url) File "/tmp/blindelephant/trunk/src/blindelephant/FingerprintUtils.py", line 58, in identify_error_page data = urlread_spoof_ua(url) File "/tmp/blindelephant/trunk/src/blindelephant/FingerprintUtils.py", line 241, in urlread_spoof_ua data = urllib2.urlopen(req, timeout=TIMEOUT).read() TypeError: urlopen() got an unexpected keyword argument 'timeout'
Würde man nun sein BT4 mit Python3.x per APT beglücken, würde es der Lösung letztendlich nicht dienlich sein:
Sei’s drum – BlindElephant scheint ja noch in den Kinderschuhen zu stecken und “funktioniert halt einfach noch nicht”???Code:python3.0 BlindElephant.py http://laws.qualys.com guess Traceback (most recent call last): File "BlindElephant.py", line 2, in <module> import Fingerprinters as wafp File "/tmp/blindelephant/trunk/src/blindelephant/Fingerprinters.py", line 73 print "ver_list before winnowing:" ^ SyntaxError: invalid syntax
Schelm wer denkt, dass wir es dabei belassen. Wir haben hiermit soeben rausgefunden, dass die README vom BlindElephant nicht lügt und wir ein Python >= 2.6.x brauchen und das es noch nicht mit einem Python 3.x funktioniert.
Besorgen wir uns nun also ein Python, dass den Anforderungen entspricht und machen uns die Hände schmutzig ohne dabei das eigene System zu versaubeuteln.
Ein entsprechendes Python zwischen 2.6 und 3.x findet man unter Download Python [3]. Dieses lässt sich via:
ins angegebene –prefix Verzeichniss installieren und anschließend auch dort ausführen, ohne die anderen Systemkomponenten zu beeinträchtigen:Code:./configure --prefix=/opt/python2.7 make make install
Auch ein blinder Elefant findet mal eine Erdnuss – am o. g. Beispiel ist also eine WebApp namens “movabletype” aktiv, die wir uns nun mit folgendem Aufruf näher angucken wollen um eine Versionsnummer zu finden:Code:root@bt:/tmp/blindelephant/trunk/src/blindelephant# /opt/python2.7/bin/python BlindElephant.py http://laws.qualys.com guess Probing... Possible apps: movabletype
Best Guess… lasst uns probieren raten durch Wissen zu ersetzen und den Elephanten etwas genauer hinsehen zu lassen. Die Option “-w” schiebt noch ein paar mehr Vergleiche mit in das Fingerprinting und kann, je nach eingesetztern WebApp erfolgsversprechender sein:Code:root@bt:/tmp/blindelephant/trunk/src/blindelephant# /opt/python2.7/bin/python BlindElephant.py http://laws.qualys.com movabletype Loaded /tmp/blindelephant/trunk/src/blindelephant/dbs/movabletype.pkl with 96 versions, 2229 differentiating paths, and 209 version groups. Starting BlindElephant fingerprint for version of movabletype at http://laws.qualys.com Hit http://laws.qualys.com/mt-static/mt.js Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc/client.js Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/css/main.css Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM Hit http://laws.qualys.com/tools/run-periodic-tasks File produced no match. Error: Error code: 404 (Not Found) Hit http://laws.qualys.com/mt-static/js/tc/tagcomplete.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/edit.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc/mixer/display.js Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/archetype_editor.js Possible versions based on result: 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc/mixer.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc/tableselect.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc/focus.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/css/simple.css Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM Hit http://laws.qualys.com/mt-static/mt_ja.js Possible versions based on result: 4.2-en, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.23-en-OS, 4.24-en, 4.24-en, 4.24-en-COM Hit http://laws.qualys.com/mt-static/js/tc/gestalt.js Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM Fingerprinting resulted in: 4.22-en 4.22-en-COM 4.23-en 4.23-en-COM Best Guess: 4.23-en-COM
Viel Spaß beim Fingerprinten....Code:root@bt:/tmp/blindelephant/trunk/src/blindelephant# /opt/python2.7/bin/python BlindElephant.py -h ... -w, --winnow If more than one version are returned, use winnowing to attempt to narrow it down (up to numProbes additional requests). ...


