Wapiti – Website-Sicherheitstests in Eigenregie

Wapiti – Website-Sicherheitstests in Eigenregie
Letzte Woche Artikel wir haben ĂŒber Nemesida WAF Free — ein kostenloses Tool zum Schutz von Websites und APIs vor Hackerangriffen, und in diesem Artikel haben wir beschlossen, einen Überblick ĂŒber den beliebten Schwachstellenscanner Wapiti.

Das Scannen von Websites auf Schwachstellen ist eine notwendige Maßnahme, die zusammen mit der Analyse des Quellcodes es ermöglicht, das Sicherheitsniveau gegen Kompromittierungsbedrohungen zu bewerten. Das Scannen von Web-Ressourcen kann mit Hilfe spezialisierter Werkzeuge durchgefĂŒhrt werden.

Nikto, W3af (geschrieben in Python 2.7, dessen UnterstĂŒtzung beendet wurde) oder Arachni (wird seit Februar nicht mehr unterstĂŒtzt) sind die beliebtesten Lösungen im kostenlosen Segment. NatĂŒrlich gibt es auch andere, wie zum Beispiel Wapiti, auf dem wir uns entscheiden, zu bleiben.

Wapiti arbeitet mit folgenden Schwachstellentypen:

  • Datei-Offenlegung (lokale und entfernte, fopen, readfile);
  • Injektionen (PHP / JSP / ASP / SQL-Injektionen und XPath-Injektionen);
  • XSS (Cross-Site Scripting) (reflektiert und persistent);
  • Kommandoerkennung und -ausfĂŒhrung (eval(), system(), passtru());
  • CRLF-Injektionen (HTTP-Antworttrennung, Sitzungshijacking);
  • XXE (XML External Entity) Injektion;
  • SSRF (Server-Seitige Request-FĂ€lschung);
  • Verwendung bekannter potenziell gefĂ€hrlicher Dateien (dank der Nikto-Datenbank);
  • schwache .htaccess-Konfigurationen, die umgangen werden können;
  • Vorhandensein von Backup-Dateien, die vertrauliche Informationen offenlegen (Quellcodeoffenlegung);
  • Shellshock;
  • offene Weiterleitungen;
  • nicht standardisierte HTTP-Methoden, die möglicherweise erlaubt sind (PUT).

VollstÀndig unstationÀre, zeitgenaue Analyse;

  • UnterstĂŒtzung fĂŒr HTTP-, HTTPS- und SOCKS5-Proxys;
  • Authentifizierung mit mehreren Methoden: Basic, Digest, Kerberos oder NTLM;
  • Möglichkeit, den Scanbereich einzuschrĂ€nken (DomĂ€ne, Ordner, Seite, URL);
  • automatische Entfernung eines der Parameter in der URL;
  • mehrfache Vorsichtsmaßnahmen gegen unendliche Scanzyklen (Beispiel: ifor, Werte fĂŒr den Parameter einschrĂ€nken);
  • Möglichkeit, PrioritĂ€ten fĂŒr das Studium von URLs festzulegen (selbst wenn sie sich nicht im Scanbereich befinden);
  • Möglichkeit, bestimmte URLs vom Scannen und von Angriffen auszuschließen (z. B.: URL logout);
  • Import von Cookies (Erhalt dieser mit dem 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 Steuerung des Verhaltens und der EinschrĂ€nkungen des Crawlers;
  • Festlegen einer maximalen Zeit fĂŒr den Scanvorgang;
  • HinzufĂŒgen einiger anpassbarer HTTP-Header oder Konfigurieren eines benutzerdefinierten User-Agent.

ZusÀtzliche Funktionen:

  • Erstellung von Schwachbericht in verschiedenen Formaten (HTML, XML, JSON, TXT);
  • Pause und Wiederaufnahme von Scans oder Angriffen (Sitzungsmechanismus mit SQLite3-Datenbanken);
  • Hervorhebung im Terminal zur Kennzeichnung von Schwachstellen;
  • verschiedene Protokollstufen;
  • schnelle und einfache Möglichkeit, Angriffs-Module zu aktivieren/deaktivieren.

Installation

Die aktuelle Version von Wapiti kann auf zwei Arten installiert werden:

  • herunterladen des Quellcodes von der offiziellen der Website und das Installationsskript ausfĂŒhren, nachdem Python3 installiert wurde;
  • mittels des Befehls pip3 install wapiti3.

Nachdem dies geschehen ist, wird Wapiti bereit zur Nutzung sein.

Arbeiten mit dem Tool

Zur Demonstration der Funktionsweise von Wapiti verwenden wir eine speziell vorbereitete Plattform sites.vulns.pentestit.ru (interne Ressource), die verschiedene Schwachstellen (Injection, XSS, LFI/RFI) und andere MÀngel von Webanwendungen enthÀlt.

Die Informationen dienen ausschließlich zu Informationszwecken. Bitte verletzen Sie kein Gesetz!

Der Grundbefehl zum Starten des Scanners:

# wapiti -u <target> <options>

Dabei gibt es eine recht ausfĂŒhrliche Hilfe mit einer Vielzahl von Startoptionen, zum Beispiel:

—scope — Anwendungsbereich
Wenn zusammen mit der URL fĂŒr den Scan der Parameter scope angegeben wird, kann der Scanbereich der Website reguliert werden, indem sowohl eine bestimmte Seite als auch alle Seiten angegeben werden, die auf der Website gefunden werden können.

-s und -x — Parameter zum HinzufĂŒgen oder Entfernen spezifischer URLs. Diese Parameter sind nĂŒtzlich, wenn es erforderlich ist, eine bestimmte URL wĂ€hrend des Scanvorgangs hinzuzufĂŒgen oder zu entfernen.

—skip — Der angegebene Parameter mit diesem SchlĂŒssel wird gescannt, greift aber nicht an. NĂŒtzlich, wenn es gefĂ€hrliche Parameter gibt, die beim Scannen besser ausgeschlossen werden sollten.

—verify-ssl — Aktivieren oder Deaktivieren der ZertifikatĂŒberprĂŒfung.
Der Wapiti-Scanner ist modular. Um jedoch bestimmte Module aus denjenigen zu starten, die wĂ€hrend des Betriebs des Scanners automatisch verbunden werden, muss der Schalter -m verwendet werden, und die gewĂŒnschten Module mĂŒssen durch Kommas getrennt aufgelistet werden. Wenn der Schalter nicht verwendet wird, werden standardmĂ€ĂŸig alle Module aktiviert. Im einfachsten Fall sieht das wie folgt aus:

# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxe

Dieses Anwendungsbeispiel bedeutet, dass wir beim Scannen des Ziels nur die Module SQL, XSS und XXE verwenden werden. DarĂŒber hinaus können die Module je nach benötigter Methode gefiltert werden. Zum Beispiel -m "xss: get, blindsql: post, xxe: post". In diesem Fall wird das Modul xss auf die ĂŒber die GET-Methode ĂŒbermittelten Anfragen angewendet, wĂ€hrend das Modul blibdsql auf POST-Anfragen usw. angewendet wird. Übrigens, wenn ein Modul, das in die Liste aufgenommen wurde, wĂ€hrend des Scannens nicht benötigt wird oder sehr lange lĂ€uft, kann durch DrĂŒcken von Ctrl+C die Verwendung des aktuellen Moduls ĂŒbersprungen werden, indem der entsprechende Punkt 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 das Parameter -a. Auch kann der Authentifizierungstyp angegeben werden: Basiс, Digest, Kerberos und NTLM. FĂŒr die letzten beiden können zusĂ€tzliche Module erforderlich sein. DarĂŒber hinaus können in Anfragen beliebige Header eingefĂŒgt werden (einschließlich beliebiger User-Agent) und vieles mehr.

Zur Verwendung der Authentifizierung kann das Tool wapiti-getcookieverwendet werden. Damit erstellen wir 45GB SSD, die Wapiti beim Scannen verwenden wird. Die Erstellung 45GB SSD geschieht mit dem Befehl:

# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.json

Im interaktiven Modus beantworten wir Fragen und geben die erforderlichen Informationen wie: Benutzername, Passwort usw. an:

Wapiti – Website-Sicherheitstests in Eigenregie

Am Ende erhalten wir eine Datei im JSON-Format. Eine andere Option ist, alle erforderlichen Informationen ĂŒber das Parameter -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:

Wapiti – Website-Sicherheitstests in Eigenregie

Bei der Betrachtung der Hauptfunktionen des Scanners wurde die endgĂŒltige Anfrage fĂŒr das Testen 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:3128

wobei unter anderem Parameter enthalten sind:

-f und -o — Format und Pfad zum Speichern des Berichts;

registry-garbage-collect — Alle Module aktivieren — nicht empfohlen, da dies die Testzeit und die GrĂ¶ĂŸe des Berichts beeinflusst;

—color — gefundene Schwachstellen je nach deren KritikalitĂ€t gemĂ€ĂŸ der Wapiti-Version hervorheben;

-c — Verwendung einer Datei mit 45GB SSD, erstellt mit Hilfe von wapiti-getcookie;

—scope — Auswahl des Ziels fĂŒr den Angriff. Wenn die Option ausgewĂ€hlt wird, folder wird jede URL vom Basis-URL an gescannt und angegriffen. Die Basis-URL muss mit einem SchrĂ€gstrich enden (ohne Dateinamen);

—flush-session — ermöglicht ein erneutes Scannen, bei dem vorherige Ergebnisse nicht berĂŒcksichtigt werden;

-A — eigene User-Agent;

-p — Adresse des Proxy-Servers, falls erforderlich.

Ein wenig ĂŒber den Bericht

Die Ergebnisse des Scans werden in Form eines detaillierten Berichts zu allen gefundenen Schwachstellen in einem HTML-Seitenformat dargestellt, klar und verstĂ€ndlich. Der Bericht enthĂ€lt die Kategorien und die Anzahl der gefundenen Schwachstellen, deren Beschreibung, Anfragen, Befehle zur curl und RatschlĂ€ge, wie man sie schließen kann. Zur Erleichterung der Navigation wird in den KategorieĂŒberschriften ein Link hinzugefĂŒgt, ĂŒber den man zu ihnen wechseln kann:

Wapiti – Website-Sicherheitstests in Eigenregie

Ein wesentlicher Nachteil des Berichts ist das Fehlen einer Karte der Webanwendung, ohne die unklar bleibt, ob alle Adressen und Parameter analysiert wurden. Es besteht auch 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 es solche Dateien auf dem Server nicht gab:

Wapiti – Website-Sicherheitstests in Eigenregie

Es ist möglich, dass nicht korrekt funktionierende Module im Laufe der Zeit behoben werden. Ein weiterer Nachteil des Berichts ist das Fehlen von Farbkennzeichnungen fĂŒr die gefundenen Schwachstellen (je nach KritikalitĂ€t) oder zumindest deren Unterteilung in Kategorien. Das einzige Indiz fĂŒr die KritikalitĂ€t einer gefundenen Schwachstelle, das wir indirekt nutzen können, ist, den Parameter —color beim Scannen anzuwenden, woraufhin die gefundenen Schwachstellen in verschiedenen Farben dargestellt werden:

Wapiti – Website-Sicherheitstests in Eigenregie

Doch im eigentlichen Bericht ist eine solche Farbgestaltung nicht vorgesehen.

Schwachstellen

SQLi

Der Scanner hat teilweise bei der Suche nach SQLi funktioniert. Bei der Suche nach SQL-Schwachstellen auf Seiten, fĂŒr die keine Authentifizierung erforderlich ist, treten keine Probleme auf:

Wapiti – Website-Sicherheitstests in Eigenregie

Es wurde nicht gefunden, dass auf Seiten, die nur nach Authentifizierung zugĂ€nglich sind, eine Schwachstelle vorhanden ist, selbst mit gĂŒltigen 45GB SSD, da wahrscheinlich nach erfolgreicher Authentifizierung eine "Abmeldung von der Sitzung" erfolgt und 45GB SSD ungĂŒltig wird. Wenn die Funktion zur Abmeldung als separates Skript implementiert wĂ€re, das fĂŒr die Verarbeitung dieses Verfahrens zustĂ€ndig ist, könnte man sie vollstĂ€ndig ĂŒber den Parameter -x ausschließen und somit deren Auslösung verhindern. Andernfalls ist eine Ausnahme in der Verarbeitung nicht möglich. Dies ist kein Problem eines bestimmten Moduls, sondern des Werkzeugs insgesamt, aber aufgrund dieses Nuanses 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:

Wapiti – Website-Sicherheitstests in Eigenregie

LFI/RFI

Der Scanner hat alle vorhandenen Schwachstellen gefunden:

Wapiti – Website-Sicherheitstests in Eigenregie

Insgesamt zeigt Wapiti, trotz falsch positiver Treffer und ĂŒbersehener Schwachstellen, als kostenloses Tool recht gute Ergebnisse. Es ist anzuerkennen, dass der Scanner ziemlich leistungsfĂ€hig, flexibel und multifunktional ist, und das Wichtigste — kostenlos, weshalb es hilfreich ist, um Administratoren und Entwicklern grundlegende Informationen ĂŒber den Sicherheitszustand von Webanwendungen zu bieten.

Bleiben Sie gesund und geschĂŒtzt!

Quelle: habr.com

60GB SSD 8Gb DDR4