Inhaltsverzeichnis
Du willst WordPress mit WPScan hacken? Gut, dann bist du hier falsch.
Denn ich werde hier nur beschreiben was das Tool WPScan eigentlich macht, versuchen die technischen Hintergründe zu erklären und Webmastern aufzeigen, wie sie dieses Tool nutzen können, um vermeintliche Schwachstellen zu finden.
Was ist WPScan?
WPScan ist ein in „Ruby“ programmierter, kostenloser Black Box Scanner, welcher bekannte Sicherheitslücken und Informationen zu Schwachstellen in WordPress findet. Das Tool ist kostenlos und steht auf wpscan.org zur freien Verfügung. Geschrieben wurde es für Administratoren von WordPress Seiten und Sicherheitsexperten.
Aber steigen wir doch mal da ein, wo auch potenzielle Angreifer einsteigen würden.
Um eine Website erfolgreich anzugreifen, braucht der Angreifer als erstes Informationen zu deinem System. Ich werde in diesem Artikel nur auf die Informationsbeschaffung mit WPScan genauer eingehen. Den Angriff über die direkte Serverseite, werde ich hier nicht beschreiben.
Der leichteste und wahrscheinlich erste Weg, ist erst einmal der Quellcode deiner Website, denn der Quellcode verrät meistens schon auf den ersten Blick, welches CMS verwendet wird.
Welche Punkte im Quellcode verraten meine Website als WordPress Website?
- Im Header steht bei jeder Standard Installation der „Meta Generator Tag“.
Praktisch, gleich mit der installierten WP Version.<meta name="generator" content="WordPress 4.9.6" />
- Die Ordnerstruktur – ich schätze ca. 95% der WordPress Websites nutzen die Standart Ordnerstruktur, ein guter Angreifer erkennt diese natürlich sofort.
- Plugins die Kommentare im Quellcode hinterlassen. Beispiele: SEO Yoast, WP-Rocket …
<!-- This site is optimized with the Yoast SEO plugin v7.6.1 - https://yoast.com/wordpress/plugins/seo/ -->
- Weit verbreitete Plugins erkennt der Angreifer an den eingebunden CSS-/JS-Dateipfad (Beispiel: …/plugins/woocommerce…. oder …/addons/contact-form-7/….)
- Header Links – Link Tags im Header wie z.B. der „wp-json“, oder die „xmlrpc.php“-Datei, erkennt ein geübtes Auge natürlich auch.
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://tobier.de/xmlrpc.php?rsd" />
- u.v.m.
Wenn man sich einige Zeit mit WordPress auseinander setzt, lernt man viele Wege, dieses CMS zu erkennen.
Die oben aufgelisteten Wege sind nur ein paar Wege über den Quellcode, viele weitere Wege wie z.B. den WordPress Feed, oder die WordPress API, habe ich noch gar nicht angesprochen. Auch wenn wir im Laufe dieses Artikels noch mit der einen oder anderen Sache in Berührung kommen werden.
Hat der Angreifer deine Seite, also als eine „WordPress Seite“ erkannt, kann er sich mit dem Tool „WPScan von Sucuri“ sehr leicht mehr Informationen über deine Website einholen.
Was macht WPScan denn genau?
Bevor wir hier genauer einsteigen, schauen wir uns den Output einer Standard WPScan Abfrage an.
Target & Startzeitpunkt
Abgesehen vom „fancy“ Header und dem Update der Datenbank meldet uns das Tool erstmal welche Seite das Ziel ist, sowie Datum und Uhrzeit an dem du den Test gestartet hast.
[+] URL: https://tobier.de/
[+] Started: Tue Jun 19 21:24:55 2018
Die nächsten zwei Zeilen sind da schon interessanter.
robots.txt
[+] robots.txt available under: 'https://tobier.de/robots.txt'
[+] Interesting entry from robots.txt: https://tobier.de/wp-admin/admin-ajax.php
WPScan findet also die robots.txt Datei, mit der wir Bots, wie dem Google Bot, sagen welche Seiten nicht gecrawlt werden sollen. Weitere Angaben, wie der Pfad zur Sitemap, können in dieser Datei ebenfalls vorhanden sein. Diese Datei zu finden ist jetzt wirklich keine „Rocket Science“, da sie immer über „domain.de/robots.txt“ gefunden werden kann. Eine wirkliche Sicherheitslücke ist das auch nicht, kann aber trotzdem interessant sein, denn was Bots nicht finden sollen, könnte ja trotzdem für einen Angreifer eine gute Information sein.
WordPress readme.txt
Als nächstes findet das Tool bei meiner Seite die WordPress readme.txt im Root-Folder meiner Installation.
[!] The WordPress 'https://tobier.de/readme.html' file exists exposing a version number
In dieser Datei stehen Informationen zum Installation-/Upgrade- Vorgang von WordPress. Nichts was man wirklich verstecken braucht. Interessant finde ich, dass WPScan gleich mit angibt, dass diese Datei die Versionsnummer beinhaltet. Also ich konnte, im Quellcode dieser Datei, keine WordPress-Versionsnummer finden. Weitere Recherchen im WordPress Core Git ergaben, dass diese Versionsnummer in der Versionsnummer 4.8 entfernt wurde. WPScan blufft in diesem Fall also!
Wie findet WPScan diese Datei?
Sie versuchen einfach die URL zur Datei zu öffnen.
Das WordPress Debug Log
[!] Debug log file found: https://tobier.de/wp-content/debug.log
WordPress User / Entwickler die auf Fehlersuche gehen müssen, aktivieren meistens die WordPress Debug Funktion. Diese gibt es in 2 Versionen:
- Fehlermeldungen auf der Website direkt anzeigen
- Fehlermeldungen in eine Debug Log Datei schreiben lassen
Nutzt man die Log-Datei, erstellt WordPress automatisch die von WPScan gefundene Log-Datei (wenn man es nicht anders in der wp-config konfiguriert). In diese Datei loggt WordPress ab dem aktivieren jeden auftretenen PHP Fehler. Diese Informationen sind für Angreifer extrem nützlich, denn wo Fehler im Code sind, können auch Sicherheitslücken entstehen.
Wie findet WPScan diese Datei?
Sie versuchen einfach die URL zur Datei zu öffnen.
Der HTTP-Header
[+] Interesting header: LINK: <https://tobier.de/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: Apache/2.4.33 (Unix)
[+] Interesting header: X-POWERED-BY: PHP/7.2.5
WPScan fragt in diesem Fall nur den HTTP-Header ab und stellt uns ein paar Informationen zur Verfügung.
- Die Adresse zur WP-JSON-Datei, also zur WordPress API
- Webserver Software und Version
- PHP-Version
Der Link zur API dürfte jedem Angreifer bekannt sein, denn dieser ist im Standard immer der selbe Link. Über die API lassen sich auch ohne Berechtigungen interessante Informationen anzeigen, zum Beispiel alle User-Accounts die Beiträge veröffentlicht haben. Mit großer Wahrscheinlichkeit auch der Admin-Account. Wenn man die API nicht nutzt, ist es also ratsam diese zu deaktivieren.
XML-RPC Interface
Eine weitere Schnittstelle, die in jeder WordPress Installation aktiviert ist, ist die XML-RPC Schnittstelle. Sie dient zur Content-Verwaltung von Desktop- oder Smartphone-Apps und stellt die Dienste der Pingbacks zur Verfügung.
[+] XML-RPC Interface available under: https://tobier.de/xmlrpc.php
Die XML-RPC ist so gesehen der Vorgänger der jetzigen WordPress Rest API und ist technisch gesehen nicht wirklich sicher. In der Vergangenheit und auch jetzt noch, ist sie immer wieder für Angriffe auf WordPress System genutzt worden, denn Abfragen können schneller abgesetzt werden und eine Antwort war so gut wie sicher. Jeder der diese noch nutzt, sollte sich Gedanken machen auf die „neue“ REST-API umzusteigen.
Die WordPress Version
Als nächsten Eintrag sehen wir wieder unsere WordPress-Version, sogar die richtige und nun kann WPScan sie auch wirklich auslesen.
[+] WordPress version 4.9.6 (Released on 2018-05-17) identified from links opml, advanced fingerprinting
Schon im Text sagt uns WPScan wie es die Version herausbekommt.
- ..from Links OPML – hiermit ist die wp-links-opml.php Datei gemeint, welche eigentlich dafür gedacht ist, Links von einem zum anderen Blog zu exportieren, nebenbei gibt sie jedoch die WordPress Version mit aus.
- „advanced fingerprinting“ – Das WPScan Team speichert verschiedene WordPress Files und vergleicht deren Hash mit dem Hash eurer Dateien.
Die Plugin-Erkennung
[+] Enumerating plugins from passive detection ...
| 2 plugins found:
[+] Name: ank-prism-for-wp - v3.0.1
| Latest version: 3.0.1 (up to date)
| Last updated: 2017-09-21T04:47:00.000Z
| Location: https://tobier.de/wp-content/plugins/ank-prism-for-wp/
| Readme: https://tobier.de/wp-content/plugins/ank-prism-for-wp/readme.txt
Hier wird es nun etwas komplizierter. WPScan nutzt hier mehrere Möglichkeiten,
- zum einen testen die Entwickler auf spezielle Kommentare im Quellcode der Seite (z.B. Yoast SEO)
- zum anderen vergleichen sie auch wieder Datei-Hashes von den bekanntesten Plugins
Die User-Erkennung
WPScan nutzt auch hier wieder 2 Möglichkeiten:
- Der alte Authoren-Seiten Trick – Aufrufen der Seite mit dem Attribut
?author=1
- Abfrage über die WordPress API
Der unspektakuläre Rest
[+] Finished: Mon Jun 25 20:34:04 2018
[+] Requests Done: 60
[+] Memory used: 76.328 MB
[+] Elapsed time: 00:00:05
Der Rest sind Standardwerte, wie der Test-Endzeitpunkt, wie viele Web-Request gemacht wurden, der RAM Verbrauch und die Gesamtdauer des Tests.
Allerdings kann WPScan natürlich noch mehr, was aber nun wirklich den Rahmen dieses Blogbeitrages sprengen würde. Hier eine kurze Auflistung der nicht erklärten Funktionen:
- User Erkennung (WordPress API / Authoren-Seiten)
- Passwort-Listen Brute-Force Attacken (Hydra)
- Unterstützung von Proxy-Servern
- Gezieltere Abfragen von Plugins/Themes
- Custom Ordnernamen vom „wp-content“ und „plugins“ Ordner
Fazit:
WPScan benutzt verschiedene Techniken um Informationen von einer WordPress Website auszulesen. Die gewonnenen Informationen sind für einen Webmaster der regelmäßig Updates macht, keine große Gefahr. Ich selbst habe versucht das Tool WPScan unbrauchbar zu machen, unter anderem habe ich:
- die WordPress Version versucht an verschiedenen Stellen zu verschleiern (Quellcode, Feeds, Core-Dateien usw.)
- Datei Struktur verändert
- WPScan User-Agent blockiert
- Alle Kommentare aus dem Quellcode entfernt
- Alle WordPress Links im Header rausgenommen
- Alle Feeds deaktiviert
- XMLRPC deaktiviert
- WordPress API deaktiviert
- Authoren-Seiten deaktiviert
- u.v.m
Dem Tool ist es jedoch immer gelungen die WordPress Version zu bekommen. Das Ändern der Dateistruktur hat das Tool zumindest daran gehindert, die Plugins und Themes zu erkennen, da es einfach die Ordner nicht mehr finden konnte. Allerdings kann der Benutzer dem Tool auch einfach sagen, wie die Ordner heißen und schon funktioniert es wieder. Gegen die Brute-Force Attacke hilft schlicht ein starkes Passwort. Empfehlen würde ich noch das deaktivieren der WordPress-API, wenn du sie nicht nutzt, hier bekommt man eigentlich immer den Admin-User heraus.
Mach dir also kein Stress und spare dir die Arbeit, denn die Arbeit ist es nicht wert. Nutze WPScan selbst für deine eigene Seite und gucke ob Sicherheitslücken von deinen eingesetzten Plugins / Themes bekannt sind, ob irgendwo Directory Listing enabled ist und ob dir das Tool sonst irgend etwas ungewöhnliches anzeigt.
Kommentare
Geschlossen wegen DSGVO, Artikel 13 Gedöns