
Im letzten wir haben über Nemesida WAF Free — ein kostenloses Tool zum Schutz von Websites und APIs vor Hackerangriffen, wobei wir in diesem Beitrag einen Überblick über den beliebten Schwachstellenscanner geben möchten .
Die Schwachstellenscanzierung einer Website ist eine unerlässliche Maßnahme, die zusammen mit einer Analyse des Quellcodes es ermöglicht, das Schutzniveau gegen Kompromittierungsbedrohungen zu bewerten. Die Scanzierung von Web-Ressourcen kann mit Hilfe spezialisierter Werkzeuge durchgeführt werden.
Nikto, W3af (geschrieben in Python 2.7, dessen Unterstützung eingestellt wurde) oder Arachni (seit Februar nicht mehr unterstützt) sind die bekanntesten Lösungen im kostenlosen Bereich. Natürlich gibt es auch andere, wie Wapiti, auf die wir uns konzentrieren möchten.
Wapiti arbeitet mit folgenden Schwachstellenarten:
- Datei-Offenlegung (lokal und remote, fopen, readfile);
- Injektionen (PHP / JSP / ASP / SQL-Injektionen und XPath-Injektionen);
- XSS (Cross-Site Scripting) (reflektiert und persistent);
- Befehlsausführung und Entdeckung (eval(), system(), passthru());
- CRLF-Injektionen (HTTP-Antworten trennen, Sitzungshijacking);
- XXE (XML External Entity) Injektion;
- SSRF (Server-seitige Anforderungsfälschung);
- Verwendung bekannter potenziell gefährlicher Dateien (mithilfe der Nikto-Datenbank);
- Schwache .htaccess-Konfigurationen, die umgangen werden können;
- Vorhandensein von Sicherungsdateien, die vertrauliche Informationen offenlegen (Offenlegung des Quellcodes);
- Shellshock;
- Offene Weiterleitungen;
- Nicht standardisierte HTTP-Methoden, die erlaubt sein könnten (PUT).
Möglichkeiten:
- Unterstützung für HTTP-, HTTPS- und SOCKS5-Proxy;
- Authentifizierung mit mehreren Methoden: Basic, Digest, Kerberos oder NTLM;
- Möglichkeit, den Scanbereich einzugrenzen (Domain, Ordner, Seite, URL);
- Automatisches Entfernen eines der Parameter in der URL;
- Mehrere Vorsichtsmaßnahmen gegen endlose Scan-Schleifen (Beispiel: ifor, Begrenzung von Werten für den Parameter);
- Möglichkeit, Prioritäten für das Studium von URLs festzulegen (auch wenn sie nicht im Scanbereich liegen);
- Möglichkeit, bestimmte URLs von Scans und Angriffen auszuschließen (z. B.: Logout-URL);
- Import von Cookies (Abrufen über das Tool wapiti-getcookie);
- Möglichkeit, die Überprüfung von SSL-Zertifikaten zu aktivieren/deaktivieren;
- Möglichkeit, URLs aus JavaScript zu extrahieren (sehr einfacher JS-Interpreter);
- Interaktion mit HTML5;
- mehrere Optionen zur Verwaltung des Verhaltens und der Einschränkungen des Crawlers;
- Festlegung einer maximalen Zeit für den Scanvorgang;
- Hinzufügen einiger anpassbarer HTTP-Header oder Anpassung des benutzerdefinierten User-Agents.
Zusätzliche Funktionen:
- Erstellung von Schwachstellenberichten in verschiedenen Formaten (HTML, XML, JSON, TXT);
- Pausierung und Wiederaufnahme von Scans oder Angriffen (Sitzungsmechanismus unter Verwendung von SQLite3-Datenbanken);
- Markierung im Terminal zur Hervorhebung von Schwachstellen;
- verschiedene Protokollierungsstufen;
- eine schnelle und einfache Möglichkeit, Angriffsmodule zu aktivieren/deaktivieren.
Installation von
Die aktuelle Version von Wapiti kann auf 2 Arten installiert werden:
- Die Quelle von der offiziellen Webseite herunterladen und das Installationsskript ausführen, nachdem Python3 installiert wurde;
- mithilfe des Befehls pip3 install wapiti3.
Danach ist Wapiti einsatzbereit.
Arbeiten mit dem Tool
Zur Demonstration der Funktionsweise von Wapiti verwenden wir die speziell vorbereitete Plattform sites.vulns.pentestit.ru (internes Resource), die verschiedene Schwachstellen (Injection, XSS, LFI/RFI) und andere Mängel von Webanwendungen enthält.
Die Informationen dienen ausschließlich zu Illustrationszwecken. Bitte beachten Sie die geltenden Gesetze!
Die Basiskommando zum Starten des Scanners lautet:
# wapiti -u <target> <options>Hierbei gibt es eine recht ausführliche Hilfe mit einer Vielzahl von Startoptionen, zum Beispiel:
—scope — Anwendungsbereich
Wenn der Parameter scope zusammen mit der URL zum Scannen angegeben wird, kann der Anwendungsbereich des Scans festgelegt werden, indem entweder eine einzelne Seite oder alle Seiten, die auf der Website gefunden werden können, angegeben werden.
-s und -x — Parameter zum Hinzufügen oder Entfernen bestimmter URLs. Diese Parameter sind nützlich, wenn es erforderlich ist, eine spezifische URL während des Scans hinzuzufügen oder zu entfernen.
—skip — Der angegebene Parameter mit diesem Schlüssel wird gescannt, jedoch nicht angegriffen. Nützlich, wenn es gefährliche Parameter gibt, die beim Scannen ausgeschlossen werden sollten.
—verify-ssl — Aktivieren oder Deaktivieren der Überprüfung des Zertifikats.
Modularer Wapiti-Scanner. Um jedoch spezifische Module aus denjenigen, die während der Scan-Ausführung automatisch verbunden werden, zu aktivieren, muss der Schlüssel -m verwendet und die gewünschten Module durch Kommas getrennt aufgelistet werden. Wenn der Schlüssel nicht verwendet wird, werden standardmäßig alle Module aktiviert. Im einfachsten Fall sieht dies folgendermaßen aus:
# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxeDieses Beispiel zeigt, dass wir nur die Module SQL, XSS und XXE beim Scannen des Ziels verwenden werden. Darüber hinaus kann die Funktion der Module je nach gewünschter Methode gefiltert werden. Zum Beispiel -m "xss: get, blindsql: post, xxe: post". In diesem Fall wird das Modul xss auf Anfragen angewendet, die per GET-Methode gesendet werden, während das Modul blindsql auf POST-Anfragen angewendet wird usw. Übrigens, wenn ein Modul, das in der Liste enthalten ist, während des Scans nicht benötigt wird oder sehr lange dauert, kann mit der Tastenkombination Ctrl+C die Verwendung des aktuellen Moduls übersprungen werden, indem die entsprechende Option im interaktiven Menü ausgewählt wird.
Wapiti unterstützt die Übertragung von Anfragen über einen Proxy-Server mit dem Schlüssel -p und die Authentifizierung auf der Zielwebsite über den Parameter -a. Außerdem kann die Art der Authentifizierung angegeben werden: Basic, Digest, Kerberos und NTLM. Für die letzten beiden könnte die Installation zusätzlicher Module erforderlich sein. Außerdem können beliebige Header (einschließlich benutzerdefinierter) in die Anfragen eingefügt werden. User-Agent) und vieles mehr.
Zur Verwendung der Authentifizierung kann das Tool wapiti-getcookie. Damit generieren wir Cookies, die Wapiti beim Scannen verwenden wird. Die Generierung Cookies erfolgt mit dem Befehl:
# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.jsonIm interaktiven Modus beantworten wir Fragen und geben die erforderlichen Informationen wie: Login, Passwort und andere an:

Am Ende erhalten wir eine Datei im JSON-Format. Eine weitere Möglichkeit besteht darin, alle erforderlichen Informationen über den Parameter hinzuzufügen -d:
# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"Das Ergebnis wird ähnlich sein:

Bei der Betrachtung der Hauptfunktionalität des Scanners war die endgültige Anfrage für den Test der Webanwendung in unserem Fall:
# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128wo unter anderen Parametern:
-f und -o — Format und Pfad zum Speichern des Berichts;
-m — das Einbinden aller Module — nicht empfehlenswert, da dies die Testzeit und die Größe des Berichts beeinflusst;
—color — gefundene Schwachstellen je nach ihrer Kritikalität gemäß der Wapiti-Version hervorheben;
-c — Verwendung einer Datei mit Cookies, generiert mit Hilfe von wapiti-getcookie;
—scope — das Ziel für den Angriff auszuwählen. Wenn Sie die Option wählen, Ordner wird jede URL ab dem Basis-URL gescannt und angegriffen. Der Basis-URL muss mit einem Schrägstrich enden (ohne Dateinamen);
—flush-session — ermöglicht eine erneute Scansitzung, bei der vorherige Ergebnisse ignoriert werden;
-A — eigenständig User-Agent;
-p — die Proxy-Server-Adresse, falls erforderlich.
Ein wenig über den Bericht
Das Scan-Ergebnis wird in Form eines detaillierten Berichts über alle gefundenen Schwachstellen in einem leicht verständlichen HTML-Seitenformat dargestellt. Der Bericht enthält Kategorien und die Anzahl der gefundenen Schwachstellen, deren Beschreibung, Anfragen, Befehle für curl und Tipps, wie man sie schließen kann. Zur Verbesserung der Navigation werden in den Kategorien Überschriften Links hinzugefügt, durch Klicken darauf gelangt man zu ihnen:

Ein wesentlicher Nachteil des Berichts ist das Fehlen einer Karte der Webanwendung, ohne die unklar bleibt, ob alle Adressen und Parameter analysiert wurden. Außerdem besteht die Möglichkeit von Fehlalarmen. In unserem Fall werden im Bericht "Backup-Dateien" und "potenziell gefährliche Dateien" aufgeführt. Ihre Anzahl entspricht nicht der Realität, da solche Dateien auf dem Server nicht vorhanden waren:

Es ist möglich, dass fehlerhaft funktionierende Module im Laufe der Zeit korrigiert werden. Ein weiterer Nachteil des Berichts ist das Fehlen einer Farbcodierung der gefundenen Schwachstellen (je nach kritischer Relevanz) oder zumindest eine Kategorisierung. Das einzige, was wir indirekt über die Kritikalität einer gefundenen Schwachstelle ableiten können, ist die Verwendung des Parameters —color beim Scannen, wobei die gefundenen Schwachstellen in verschiedenen Farben hervorgehoben werden:

Doch im eigentlichen Bericht ist eine solche Farbgebung nicht vorgesehen.
Schwachstellen
SQLi
Der Scanner hat teilweise beim Finden von SQLi abgeschnitten. Bei der Suche nach SQL-Schwachstellen auf Seiten, die keine Authentifizierung erfordern, treten keine Probleme auf:

Es konnte keine Schwachstelle auf Seiten gefunden werden, die nur nach der Authentifizierung zugänglich sind, selbst mit gültigen Informationen, Cookies, da nach erfolgreicher Authentifizierung wahrscheinlich die "Sitzung beendet" wird und Cookies diese ungültig werden. Hätte die Abmeldefunktion als separates Skript vorgesehen, das für die Durchführung dieses Verfahrens verantwortlich ist, könnte man es vollständig über den Parameter -x ausschließen und somit dessen Ausführung verhindern. Andernfalls ist es nicht möglich, seine Verarbeitung auszuschließen. Dies ist ein Problem des gesamten Werkzeugs und nicht eines spezifischen Moduls, doch aufgrund dieses Nuance konnten mehrere Injektionen im geschützten Bereich der Ressource nicht entdeckt werden.
XSS
Der Scanner hat die gestellte Aufgabe hervorragend gemeistert und alle vorbereiteten Schwachstellen gefunden:

LFI/RFI
Der Scanner fand alle eingebauten Schwachstellen:

Insgesamt zeigt Wapiti trotz falscher Positivmeldungen und übersehener Schwachstellen als kostenloses Tool recht gute Ergebnisse. Es ist jedoch anzuerkennen, dass der Scanner ziemlich leistungsfähig, flexibel und multifunktional ist — und das Wichtigste ist, dass er kostenlos ist. Daher ist er ein nützliches Werkzeug für Administratoren und Entwickler, um grundlegende Informationen über den Sicherheitsstatus von Webanwendungen zu erhalten.
Bleiben Sie gesund und geschützt!
Quelle: habr.com
