Der Brombeer Anzeiger ist eine unsichere Nachrichtenseite, wo Schüler*innen grundlegende Sicherheitsprobleme veranschaulicht werden können.
Bitte öffne zuerst selbst die Seite brombeer-anzeiger.yak9.de und versuche eigene Schwachstellen zu finden.
Den Artikel lesen
Der verschwommene Text lässt sich überraschend gut lesen, wenn man ihn mit der Maus markiert. Hintergrund ist, dass da der tatsächliche Text steht, welcher nur mit CSS etwa verfremdet wurde.
Fehlen nur noch zwei Absätze. Die finden wir, wenn wir den Quelltext der Webseite öffnen. Dort stehen diese schon drin, werden nur ausgeblendet, solange der Nutzer nicht angemeldet ist.
Mehr Informationen finden
Wir sind ein wenig neugierig und schauen uns an, wo das Bild eigentlich herkommt:
http://brombeer-anzeiger.yak9.de/img/unsplash-1.jpg
Hm, das sieht aber verdächtig aus. Öffnen wir den Ordner
http://brombeer-anzeiger.yak9.de/img/
haben wir leider kein Glück. Der Ordner listet in diesem Fall nicht alle Dateien auf. Also fangen wir einfach an andere Dateinamen zu raten:
http://brombeer-anzeiger.yak9.de/img/unsplash-2.jpg
und tata, schon erscheint das nächste Bild.
Sich auf der Seite anmelden
Der Benutzername ist schon vorgegeben. Nur das geheime Passwort fehlt noch. Wir könnten jetzt einfach alle ausprobieren, was bei dem geheimen Passwort recht schnell gehen würde. Nur sperrt uns irgendwann der Server, da dieser (berechtigt!) einen Angriff vermutet.
Also überlegen wir uns, wie man im einfachsten Fall in der Datenbank mit SQL prüfen kann, ob Benutzername und Passwort übereinstimmen:
SELECT * FROM users WHERE mail='nobody@yak9.de' AND password='1234';
Das ist natürlich nur geraten, stimmt aber in dem Fall. Erscheint ein Ergebnis waren mail
und password
tatsächlich so in der Datenbank abgelegt.
Leider kennen wir das geheime Passwort nicht und würden uns gern um die Abfrage auf dem Server drücken. Super wäre etwa, wenn der Server nur nach
SELECT * FROM users WHERE mail='nobody@yak9.de';
fragen würde. Dann dürften wir immer rein. Wir haben ganz großes Glück und stellen fest, dass unser Passwort 1234
einfach in die SQL-Abfrage eingefügt.
Probieren wir eine SQL-Injection. Als Passwort schreiben wir ' OR 1=1;
. Das ergibt:
SELECT * FROM users WHERE mail='nobody@yak9.de' AND password='' OR 1=1;';
Die letzten zwei Zeichen im SQL sind nicht richtig. Glücklicherweise führt der Server aber bis dahin alles aus und endet dann, da wir ;
als Ende-Syymbol eingegeben haben. Davor suchen wir jetzt wieder den Benutzer mit mail
und password
. Falls es den nicht gibt wäre es aber auch okay, wenn die Aussage 1=1
wahr wäre (Das sagen wir mit OR 1=1
. Und tatsächlich stimmt das immer. Wir erhalten also ein Ergebnis und sind angemeldet. 😏
Das Passwort mitlesen
Ist der geneigte Leser in unserem WLAN oder betreiben wir wie die Telekom unser eigenes Netzwerk können wir den gesamten Netzwerkverkehr mitlesen. Auf einem Android-Smartphone geht das zum Ausprobieren für das eigene Gerät mit HttpCanary etwa schön einfach.
So können wir also alle Eingaben des Benutzers wie etwa das Passwort mitlesen. Es kommt aber noch schlimmer. Der Server antwortet uns nach dem Login mit mail
und password
(!). Also erhalten wir das Passwort, auch wenn wir es vor dem Angriff noch nicht wussten. 😲
Den Benutzer angreifen
Der Brombeer Anzeiger hat einen Kommentarbereich (der aus Sicherheitsgründen nicht mit dem Server synchronisiert wird). Hier haben wir als Angreifer die einmalige Gelegenheit etwas zu hinterlegen, was jedem anderen Leser dieses Artikels angezeigt wird.
Erste Idee, klassischer Spam:
Billige Aktien kaufen bei aktienhandel.evil
Damit fallen wir aber bestimmt beim Redakteur auf, der unseren Beitrag löschen wird. Probieren wir also weiter:
Ich finde den Artikel super. Hat mich ein wenig an <a href="http://aktienhandel.evil">Nietzsche</a> erinert.
Sieht unverdächtig aus und ich konnte einen Link unterbringen. (Bitte selber ausprobieren 🙂).
Das wir HTML eingeben durften sollte alle Alarmglocken schellen lassen. Denn, dann können wir auch JavaScript eingeben:
Ich finde den Artikel super. <img style="display:none;" src="notValidUrl" onerror="alert('Besuche aktienhandel.evil oder dein Rechner explodiert!')">
In diesen Fall geben wir nur eine Meldung aus. Prinzipiell haben wir aber gerade die gleichen Rechte wie der Leser erlangt, könnten also auch in diesen Namen einen Kommentar schreiben oder das Abo kündigen. Auch könnten wir auf eine nachgebaute Seite seiner Bank weiterleiten.
Den Artikel lesen
Der Webseitenbetreiber sollte den Artikel wirklich erst dann senden, wenn der Benutzer angemeldet ist.
Mehr Informationen finden
Geschützte Dateien, wie Bilder sollten nicht mehr in einem erreichbaren Ordner liegen. Auch wenn Pfade zu Bildern auf Webseiten so aussehen, als ob die Bilder in einem Ordner liegen, werden dies in Wahrheit meist nur auf ein Programm umgeleitet, was nur bei entsprechender Berechtigung tatsächlich ein Bild ausgibt.
Zusätzlich sollten Webseiten das häufige Ausprobieren von Links oder Anmeldedaten unterbinden. Der Server des Brombeer Anzeigers blockiert solche Nutzer zuerst für wenige Minuten und später für immer. Schon nach einer halben Stunde im Netz fanden sich die ersten IP-Adressen auf der Liste.
Sich auf der Seite anmelden
Passwörter werden nie auf dem Server gespeichert. Passwörter werden als Hash+Salt gespeichert, sodass man zwar prüfen kann, ob das übermittelte Passwort stimmt, aber man sonst nicht mehr zum ursprünglichen Passwort zurück kann. So hat etwa das Ubuntu Betriebssystem (ubuntu-19.04-desktop-amd64.iso) den MD5-Hash 6fa9686bc299c19c97d280f79a723868
. Hier wird offensichtlich, dass ein Betriebssystem sicher nicht aus nur so wenigen Zeichen Quelltext bestehen kann. Dennoch kann ich damit prüfen, ob ich tatsächlich das originale Ubuntu runtergeladen habe.
Damit der Nutzer kein SQL mehr manipulieren kann, prüft man die Eingabe heutzutage und verfasst die Befehle so, dass keine Änderungen mehr möglich sind.
Das Passwort mitlesen
Webseiten sollten nur noch über HTTPS erreichbar sein. Dann startet die Adressleiste mit https://
. Dadurch können übermittelte Nachrichten nicht mehr mitgelesen werden.
Den Benutzer angreifen
Als Webseitenbetreiber sollte man niemals Benutzern erlauben HTML einzugeben. Dazu entfernt man auf dem Server alle solche Steuerzeichen (ggf. erlaubt man einzelne, wie fett oder kursiv). Wichtig ist, dass dies auf dem Server und nicht dem Webbrowser passiert, da man diesen genau wie einen böswilligen Leser nicht trauen kann.