Jeder Penetrationstest für Webanwendungen sollte mit einer Umweltuntersuchung und einer gründlichen Kartierung der getesteten App beginnen. Während des Mappings sollten sie nicht nur alle Ressourcen anzeigen, auf die die App verlinkt oder die sie abruft, sondern auch Ressourcen, die sich in einem öffentlich zugänglichen Teil der Site befinden, auf die jedoch kein Link verweist. Solche Dateien sind beispielsweise Webadministration oder Backups.
Wahrscheinlich ist jeder von ihnen in seiner Praxis schon auf dirb– oder dirbuster-Tools gestoßen. Der Glücklichere von ihnen ist dann auf das dirsearch-Tool gestoßen. All diese Tools haben eines gemeinsam. Es dient der Abbildung von Webanwendungen und der Offenlegung der Ressourcen dieser Apps, die in einem öffentlich zugänglichen Teil der Website gespeichert sind, jedoch nicht zu Hyperlinks führen. In der Praxis werden diese Tools daher beispielsweise für die Suche nach Konfigurationsdateien, Log-Dateien, eingebundenen Dateien oder Backup-Dateien verwendet.
PenterepTools – ptwebdiscover
Wir möchten ihnen unser ptwebdiscover-Tool vorstellen, das wie die anderen aufgeführten Tools zum Auffinden von Webanwendungsressourcen verwendet wird. Im Gegensatz zu anderen bietet ptwebdiscover jedoch eine Reihe von Funktionen, die 0 bei anderen Tools vergeblich suchen würden. Werfen wir also einen genaueren Blick auf die einzelnen Funktionen, die dieses Tool bietet.
Suche nach Ressourcen mit einem Wörterbuch
Eine der grundlegenden Funktionen von ptwebdiscover ist die Suche nach Ressourcen mithilfe von Wörterbüchern. Mit dem Schalter -w, --wordlist können sie das gewünschte Wörterbuch auswählen.
ptwebdiscover -u https://www.penterepmail.loc -w /usr/share/wordlists/????Sie können einzelne Begriffe aus dem Wörterbuch mit dem Schalter -ch, --charset weiter ändern, mit dem sie die Änderung von Wörterbuchausdrücken in lowercase, uppercase, capitalize, oder hybrid auswählen können. Sie können mehrere Varianten gleichzeitig verwenden.
ptwebdiscover -u https://www.penterepmail.loc -w /usr/share/wordlists/???? -ch lowercase uppercase capitalizeDie hybridoption nimmt eindeutige Werte aus dem Wörterbuch (z. B. readme.txt) und testet die folgenden Falloptionen: readme.txt, Readme.txt, README.txt, und README.TXT.
Wenn sie wissen, mit welchen Zeichen die gesuchte Quelle beginnt, können sie mit dem Schalter -bw, --begin-with das Wörterbuch so filtern, dass es nur Ausdrücke enthält, die mit einer bestimmten Zeichenfolge beginnen.
ptwebdiscover -u https://www.penterepmail.loc -w /usr/share/wordlists/???? -bw adMit den Schaltern -lm, --length-min und -lx, --length-max ist es möglich, aus dem Dictionary nur die Ausdrücke weiter zu filtern, deren Länge dem angegebenen Eintrag entspricht.
Ressourcensuche mit Brute-Force
Wenn sie mit Brute-Force nach Ressourcen suchen möchten, lassen sie den Schalter -w einfach weg.
ptwebdiscover -u https://www.penterepmail.locSie können den zu verwendenden Zeichensatz mit dem Schalter -ch, --charset auswählen. Sie können aus vordefinierten lowercase, uppercase und numbers wählen. Sie können auch ihren eigenen Zeichensatz definieren [abCD15_~].
ptwebdiscover -u https://www.penterepmail.loc -ch lowercase uppercase [15_]Sie können die Länge der zu erstellenden Zeichenfolge mit den Schaltern -lm, --length-min und -lx, --length-max steuern.
ptwebdiscover -u https://www.penterepmail.loc -lm 2 -lx 5Mit Dateierweiterungen arbeiten
Egal, ob sie mit einem Wörterbuch oder mit Brute-Force suchen, sie werden auf jeden Fall feststellen, dass der getesteten Zeichenfolge Suffixe hinzugefügt werden. ptwebdiscover verfügt zu diesem Zweck über zwei Schalter. Die erste davon, -e, --extensions es ihnen, die Erweiterungen, die sie verwenden möchten, manuell zu definieren. Wenn sie nach Begriffen nicht nur mit den von Ihnen eingegebenen Erweiterungen suchen möchten, sondern auch ohne diese. Geben sie zwischen Erweiterungen eine leere Zeichenfolge ein. Mit dem zweiten Schalter -ef, --extension-file können sie dann eine Liste der Erweiterungen aus der Datei abrufen.
ptwebdiscover -u https://www.penterepmail.loc -e ““ php php.bak bak logptwebdiscover -u https://www.penterepmail.loc -ef extensions.txtFilterung von Befunden
Serverantworten können entweder nach dem zurückgegebenen Statuscode oder nach dem zurückgegebenen Inhalt gefiltert werden. Standardmäßig betrachtet das Tool alle Serverantworten, die einen anderen Statuscode als 404 zurückgeben, als gefundene Quellen.Wenn sie andere zurückgegebene Statuscodes ignorieren möchten, können sie den Schalter -isc, --ignore-status-codes verwenden.
ptwebdiscover -u https://www.penterepmail.loc -sc 302 400 401 404Umgekehrt, wenn das Tool nur Ressourcen berücksichtigen soll, die bestimmte Statuscodes als vorhandene Ressourcen zurückgeben, können sie diese mit dem Schalter -sc, --status-codes definieren
ptwebdiscover -u https://www.penterepmail.loc -sc 200Die Schalter -sy, --string-in-response und -sn, --string-not-in-response oder -sn, --string-not-in-response und -shn können verwendet werden, um Ergebnisse basierend zu filtern on content. --string-not-in-response-header, um den Inhalt von Antwortheadern zu durchsuchen.
ptwebdiscover -u https://www.penterepmail.loc -sy contentptwebdiscover -u https://www.penterepmail.loc -sn “page not found“Mit den Schaltern -tm, --time-min und -tx, --time-max ist es auch möglich, die Ergebnisse nur für diejenigen zu beeinflussen, die innerhalb des angegebenen Zeitbereichs eine Antwort vom Server zurückgeben.
ptwebdiscover -u https://www.penterepmail.loc -tx 200Die Schalter -clm, --content-length-min und -clx, --content-length-max können ebenfalls nützlich sein, um die minimale und maximale Größe des zurückgegebenen Inhalts festzulegen.
ptwebdiscover -u https://www.penterepmail.loc -clx 50000Rekursives Eintauchen
Findet das Tool ein Verzeichnis, kann es auch rekursiv darin eintauchen und die gesamte Suche nach Inhalten in diesem Verzeichnis wiederholen. Beim rekursiven Eintauchen werden alle gefundenen Verzeichnisse gecrawlt. Das rekursive Durchsuchen von Verzeichnissen kann mit der Option -r, – recurse aktiviert werden.
ptwebdiscover -u https://www.penterepmail.loc -lx 4 -rSuchen sie nach Ressourcen, indem sie Inhalte analysieren
Ressourcen können nicht nur durch Wörterbuch oder Brute-Force erkannt werden, sondern auch durch das Parsen von Inhalten, indem Links und externe Ressourcen in HTML-Dokumenten, sitemap.xml, robots.txt usw. code]-P, –parse[/code]-Schalter.
ptwebdiscover -u https://www.penterepmail.loc -PWenn sie alle URLs anzeigen möchten, die sich nur in der Quelle befinden, die im Parameter -u angegeben ist, ohne Brute-Force und Wörterbuch, können sie dies mit dem Schalter -Po, --parse-only tun.
ptwebdiscover -u https://www.penterepmail.loc -PoMit dem Tool können sie auch ein Web-Crawling (Web-Spiding) der gesamten Site durchführen. Alles, was sie tun müssen, ist rekursiv mit Inhaltsanalyse zu parsen.
ptwebdiscover -u https://www.penterepmail.loc -Po -rInhalts-Download
Wenn sie keinen Inhalt parsen, sendet ptwebdiscover HTTP-Anforderungen mit der HEAD-Methode. Bei Bedarf können sie diese Methode mit dem Schalter -m, -- method ändern.
ptwebdiscover -u https://www.penterepmail.loc -m GETSie können auch den vom Server zurückgegebenen Inhalt speichern, um eine lokale Kopie aller erkannten Ressourcen zu erstellen. Sie können dazu den Schalter -S, --save verwenden und das Zielverzeichnis angeben, in dem sie den heruntergeladenen Inhalt speichern möchten.
Sie würden beispielsweise eine gesamte Site crawlen, einschließlich der lokalen Speicherung von Inhalten, wie folgt:
ptwebdiscover -u https://www.penterepmail.loc -Po -r -S ~/localcopyIntelligente Backup-Suche
Ptwebdiscover bietet auch eine intelligente Backup-Suchfunktion. Es funktioniert, indem es automatisch eine Datei mit demselben Namen für jede gefundene Quelle findet, jedoch mit dem Suffix, das den Sicherungsdateien gemeinsam ist. Wenn das Tool beispielsweise die Datei index.php erkennt, versucht es, die Dateien zu finden:
index.bak, index.old, index.zal, index.php_, index.php~, index.zip, index.7z, index.rar, index.tar, index.tar.gz, index.tgz, index.php.bak, index.php.old, index.php.zal, index.php.zip, index.7z, index.php.rar, index.php.tar, index.php.tar.gz and index.php.tgz
Als nächstes versucht ptwebdiscover, Site- und Datenbank-Backups zu erkennen. Wenn die getestete Domain www.penterepmail.loc wäre, würde das Tool versuchen, Dateien im Stammverzeichnis der Site zu erkennen:
www.penterepmail.loc.bak, www.penterepmail.loc.old, www.penterepmail.loc.zal, www.penterepmail.loc.zip, www.penterepmail.loc.rar, www.penterepmail.loc.tar, www.penterepmail.loc.7z, www.penterepmail.loc.tgz, www.penterepmail.loc.tar.gz, www.penterepmail.loc.sql, www.penterepmail.loc.db, penterepmail.loc.bak, penterepmail.loc.old, penterepmail.loc.zal, penterepmail.loc.zip, penterepmail.loc.7z, penterepmail.loc.rar, penterepmail.loc.tar, penterepmail.loc.tgz, penterepmail.loc.tar.gz, penterepmail.loc.sql, penterepmail.loc.db, penterepmail.bak, penterepmail.old, penterepmail.zal, penterepmail.zip, penterepmail.7z, penterepmail.rar, penterepmail.tar, penterepmail.tgz, penterepmail.tar.gz, penterepmail.sql, penterepmail.db
Das gleiche wiederholt sich mit dem Ersetzen des Punktes im Namen nach den Zeichen „_“ und „-“ und auch mit dem Löschen dieses Trennzeichens, zum Beispiel
wwwpenterepmailloc.bak, www_penterepmail_loc.bak, www-penterepmail-loc.bak, etc.
Um die intelligente Backup-Suche zu aktivieren, verwenden sie den Schalter -b, --backups.
ptwebdiscover -u https://www.penterepmail.loc -Po -r -bWenn sie nur nach Backups der gesamten Site suchen möchten, ohne weitere Inhalte per Brute-Force oder Wörterbuch zu suchen, verwenden sie den Schalter -bo, --backups-only.
ptwebdiscover -u https://www.penterepmail.loc -bo
PenterepTools – ptwebdiscover searching for backups
Präfixe, Suffixe, Subdomain-Suche und Parameter-Fuzzing
In dem Moment, in dem sie wissen, dass die gesuchte Quelle mit einem bestimmten Präfix beginnt oder mit einem bestimmten Suffix endet, werden die Schalter -up, --prefix und -us, --sufix definitiv nützlich sein. Das folgende Beispiel sucht nach Dateien: access_aaa_2021.log, access_aab_2021.log, access_aac_2021.log, …
ptwebdiscover -u https://www.penterepmail.loc -lm 3 -up access_ -us _2021 -e logManchmal kann es auch sinnvoll sein, Ressourcen an anderer Stelle als nur in einem bestimmten Pfad zu suchen. In diesem Fall können sie an der Stelle, an der sie die Testzeichenfolge einfügen möchten, ein Sternchen (*) verwenden. Sie können diese Methode beispielsweise verwenden, wenn eine App auf Ressourcen zugreift, indem sie sie von einem Ort lädt, der sich nicht in einem öffentlich zugänglichen Teil der Site befindet, oder wenn sie nach einer bestimmten Datei in einem unbekannten Verzeichnis suchen oder nach schöne URLs.
ptwebdiscover -u https://www.penterepmail.loc/show?file=*ptwebdiscover -u https://www.penterepmail.loc/*/showSie werden das Sternchen auch nützlich finden, wenn sie ptistilde verwenden, um kurze 8.3-Dateinamen auf IIS-Servern zu finden, wie z. B. admin~1.php. Wenn sie Brute-Force verwenden möchten, um den fehlenden Teil des Dateinamens zu erkennen, können sie den folgenden Befehl verwenden.
ptwebdiscover -u https://www.penterepmail.loc/admini*.phpWenn sie beispielsweise ein Wörterbuch für dieselbe Aufgabe verwenden möchten, können sie den folgenden Befehl ausprobieren, der nur Werte aus dem Wörterbuch auswählt, die mit der Zeichenfolge „admins“ beginnen.
ptwebdiscover -u https://www.penterepmail.loc/ -w dictionary.txt -bw admini -e phpErwähnenswert ist auf jeden Fall die Möglichkeit, nach bestehenden Subdomains zu suchen. Platzieren sie in diesem Fall einfach das Sternchen an der richtigen Stelle in der URL.
ptwebdiscover -u https://*.penterepmail.loc
PenterepTools – ptwebdiscover checking domain prefixes and suffixes
In diesem Fall wird jedoch die Subdomain auf dem DNS-Server übersetzt und sie erfahren nur von Subdomains, die einen gültigen DNS-Record haben. Beim Testen ist es jedoch häufig erforderlich, das Vorkommen derjenigen Subdomains zu überprüfen, die sich auf dem getesteten Server befinden, aber keinen gültigen DNS-Eintrag haben. Dies trifft man zum Beispiel oft bei Entwicklungsversionen der App an, die sich auf den Subdomains dev, devel, development, test befinden, die nach außen zu existieren scheinen, auf die Entwickler aber durch Einfügen des entsprechenden Eintrags zugreifen können in die hosts-Datei.
Wenn sie möchten, dass ptwebdiscover auch diese Subdomains erkennt, müssen sie den Schalter -tg, --target hinzufügen, um zu definieren, an welches Ziel ihre Anfragen geleitet werden. In diesem Fall wird die im Parameter -u angegebene Domäne, die anstelle der Subdomäne ein Sternchen enthält, nur als HTTP-Anforderungsinhalt des Host-Headers verwendet.
ptwebdiscover -u https://*.penterepmail.loc -tg http://www.penterepmail.locDa der Server den Inhalt einer Standardwebseite für nicht vorhandene Unterdomänen zurückgeben kann, müssen sie möglicherweise auch den Schalter -sn, --string-not-in-response hinzufügen, der eine Zeichenfolge angibt, die nicht in der Antwort des Servers enthalten sein darf.
ptwebdiscover -u https://*.penterepmail.loc -tg http://www.penterepmail.loc -sn WelcomeFormatieren sie die Ausgabe und speichern sie die Ergebnisse in einer Datei
Sie können die Ausgabe von ptwebdiscoveran ihre Bedürfnisse anpassen. Wenn sie eine Baumansicht bevorzugen, die wie die Ausgabe des Baumwerkzeugs aussieht, können sie den Schalter -tr, --tree verwenden.
ptwebdiscover -u https://www.penterepmail.loc -Po -r -tr
PenterepTools – ptwebdiscover discovered file hierarchy
Sie können auch entscheiden, ob sie nur die Pfade zu den erkannten Ressourcen oder die vollständige URL einschließlich der Domäne auflisten möchten. Standardmäßig enthält die Ausgabe die gesamte URL. Verwenden sie den Schalter -wd, --without-domain, um die Domäne zu überschreiben.
ptwebdiscover -u https://www.penterepmail.loc -Po -r -wdManchmal verwenden sie auch die Option, um die zurückgegebenen HTTP-Antwortheader anzuzeigen. In ptwebdiscover können sie sie mit dem Schalter -wh, --with-headers aktivieren.
ptwebdiscover -u https://www.penterepmail.loc -Po -whSie können sich dann die komplette Ausgabe nicht nur auf dem Monitor ansehen, sondern mit dem Schalter -o, --output in einer Datei zur Weiterverarbeitung durch andere Tools speichern.
ptwebdiscover -u https://www.penterepmail.loc -Po -o output.txtVerwendung von Fasern
Der große Vorteil des ptwebdiscover-Tools gegenüber dem dirb-Tool ist jedoch vor allem die Möglichkeit, in mehreren Threads zu laufen, wodurch dieses Tool um ein Vielfaches schneller sein kann. Standardmäßig ist es so eingestellt, dass es in zwanzig Threads ausgeführt wird, aber sie können es mit dem Schalter -t, --threads ändern.
ptwebdiscover -u https://www.penterepmail.loc -t 100Wenn sie umgekehrt die Anzahl der an den zu testenden Server gesendeten Anforderungen begrenzen müssen, um eine Serverüberlastung zu vermeiden, können sie den Schalter -d, --delay verwenden, um die Verzögerung (in Millisekunden) zwischen den Anforderungen festzulegen. In diesem Fall wird der Test nur in einem Thread ausgeführt.
ptwebdiscover -u https://www.penterepmail.loc -d 100Verwendung spezieller Wörterbücher zur Technologieidentifikation
Neben den oben genannten Funktionen ist die Möglichkeit zu erwähnen, spezielle Wörterbücher zu verwenden, die Daten im Format location::technology enthalten. Diese Wörterbücher können diese Technologien anhand von Ressourcen identifizieren, die für bestimmte Technologien typisch sind. Zum Beispiel identifiziert das Aufdecken des wp-include-Verzeichnisses ziemlich genau das WordPress-Content-Management-System. Die Verwendung dieser Wörterbücher ist ansonsten identisch mit der Verwendung allgemeiner Wörterbücher.
Kommentar
Wenn sie versuchen, das Tool für Domänen zu verwenden, die nur in der Hosts-Datei enthalten sind, fügen sie den Schalter -wdc, --without-dns-cache hinzu. Das Tool verwendet Caching von DNS-Abfragen, was leider nicht mit dem Inhalt der Hosts-Datei arbeiten kann. Ohne diesen Schalter würde die Domäne als nicht verfügbar erscheinen.
Vor dem eigentlichen Test überprüft das Tool die Verfügbarkeit der Zieldomäne. Wenn sie diesen Test deaktivieren möchten, können sie dies mit dem Schalter -wac, --without-availability-check tun.
Vollständige Liste der implementierten Schalter
| -u | --url | URL for test (usage of a star character as anchor) | |
| -ch | --charsets | Specify charset (example: lowercase,uppercase,numbers,[custom_chars]) | |
| -lm | --length-min | Minimal length of brute-force tested string (default 1) | |
| -lx | --length-max | Maximal length of brute-force tested string (default 6 bf / 99 wl | |
| -w | --wordlist | [filename] | Use default or specified wordlist |
| -bw | --begin-with | Use only words from wordlist that begin with the specified string | |
| -ci | --case-insensitive | Case insensitive items from wordlist | |
| -e | --extensions | Add extensions behind a tested string („“ for empty extension) | |
| -ef | --extension-file | [filename] | Add extensions from default or specified file behind a tested string. |
| -r | --recurse | Recursive browsing of found directories | |
| -b | --backups | Find backups for db, all app and every discovered content | |
| -bo | --backups-only | Find backup of complete website only | |
| -P | --parse | Parse HTML response for URLs discovery | |
| -Po | --parse-only | Brute force method is disabled, crawling started on specified url | |
| -D | --directory | Add a slash at the ends of the strings too | |
| -sy | --string-in-response | Print findings only if string in response (GET method is used) | |
| -sn | --string-not-in-response | Print findings only if string not in response (GET method is used) | |
| -sc | --status-codes | Accept only response with status codes | |
| -isc | --ignore-status-codes | Ignore response with status codes (default 404) | |
| -tm | --time-min | Minimal time for response | |
| -tx | --time-max | Maximal time for response | |
| -clm | --content-length-min | Minimal length of response | |
| -clx | --content-length-max | Maximal length of response | |
| -m | --method | Use said HTTP method. Default: HEAD | |
| -d | --delay | Delay before each request in seconds | |
| -p | --proxy | Use proxy (e.g. http://127.0.0.1:8080) | |
| -T | --timeout | Manually set timeout (default 10000) | |
| -H | --headers | Use custom headers | |
| -ua | --user-agent | Use custom value of User-Agent header | |
| -c | --cookie | Use cookie (-c „PHPSESSID=abc; any=123“) | |
| -a | --auth | Use HTTP authentication | |
| -t | --threads | Number of threads (default 20) | |
| -j | --json | Output in JSON format | |
| -wd | --without-domain | Output of discovered sources without domain | |
| -wh | --with-headers | Output of discovered sources with headers | |
| -ip | --include-parameters | Include GET parameters and anchors to output | |
| -tr | --tree | Output as tree | |
| -o | --output | Output to file | |
| -S | --save | Save content localy | |
| -E | --errors | Show all errors | |
| -s | --silent | Do not show statistics in realtime | |
| -v | --version | Show script version | |
| -h | --help | Show this help message |



