Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03470.jsonl.gz/319

Laborversuche zu den OWASP Top Ten mit OWASP WebGoat
Das „Open Web Application Projekt“ (OWASP) beschreibt auf einer umfangreichen Website häufige Angriffe auf Web Applikationen und stellt eine Top-Ten Liste zu den häufigsten Angriffen zusammen. OWASP listet die folgenden Schwachstellen in Web Applikationen auf, die als besonders kritisch angesehen werden:
Die Reihenfolge der Auflistung ist dabei relevant. Um die üblichen Sicherheitslücken in eigenen Versuchen zu erproben bietet OWASP die Applikation WebGoat an (https://github.com/WebGoat/WebGoat). Dies ist eine von OWASP entwickelte Versuchsumgebung, mit der bekannte Web-Attacken ausprobiert werden können.
OWASP WebGoat enthält mehrere Kurse und Lektionen aus verschiedenen Bereichen der OWASP Top Ten. Die Applikation enthält zu jeder Aufgabe auch Hinweise (Hints) und einen kompletten Lösungsweg. Meistens existieren mehrere Lösungsmöglichkeiten der Aufgabe. In den Versuchsbeschreibungen zu den Lektionen ist angegeben, ob Hinweise oder der komplette Lösungsweg verwendet wurde.
Um die Versuchsumgebung einfach zu halten, wurde die WebGoat Applikation auf einem Windows 8 System installiert. Dieses System dient in den nachfolgenden Versuchen sowohl als Client-, wie auch als Serversystem.
Die Installation von WebGoat ist denkbar einfach, ein ZIP-File kann von http://code.google.com/p/webgoat/downloads/list heruntergeladen werden und enthält alle benötigten Dateien für die Testumgebung. Nach dem Ausführen der Datei webgoat.bat steht ein Webserver auf Basis von Tomcat und Java unter der URL: http://localhost/WebGoat/attack zur Verfügung. Nach einem Login (Benutzername: guest, Passwort: guest) stehen dem Benutzer mehrere Kurse und Lektionen zur Auswahl.
Es wird noch ein weiteres Tool benötigt. Der von OWASP Entwickelte Zed Attack Proxy (ZAP - https://github.com/zaproxy/zaproxy/). ZAP ist ein lokaler Proxy Server. Die Anfragen des Browsers werden über ZAP zur Web Applikation weitergeleitet. Eine nützliche Funktion von ZAP ist, dass im Programm Breakpoints gesetzt werden können. Wenn zum Beispiel ein Breakpoint für www.nzz.ch gesetzt wird, und der Browser über den ZAP Proxy auf diese Website zugreifen will stoppt ZAP den Zugriff und bietet dem Benutzer die Möglichkeit, die Parameter des Zugriffs zu verändern.
Um also z.B. die Post oder Form- Parameter einer Seite zu manipulieren, werden die Browser Anfragen manipuliert:
Der Browser enthält dann die Antwort auf diesen manipulierten Request vom ZAP Proxy.
Die Seite der Lektion zeigt ein einfaches Formular für Wetterdaten, in dem über ein Drop-Down Menu eine Stadt ausgewählt werden kann. Mit einem Klick auf „Go!“ werden die Wetterdaten für diese Stadt und das ausgeführte SQL-Statement ausgegeben.
Das Ziel der Lektion ist, den Form Parameter
station so zu manipulieren, dass die gesamte Tabelle
weather_data angezeigt wird.
Dazu wird mit dem ZAP Proxy der Original Post-Request auf die Seite:
POST http://localhost/WebGoat/attack?Screen=77&menu=1100 HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://localhost/WebGoat/attack?Screen=77&menu=1100 Cookie: JSESSIONID=9BBB822B1EF34454C076748E53489244 Authorization: Basic Z3Vlc3Q6Z3Vlc3Q= Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 24 station=102&SUBMIT=Go%21
abgefangen und der
station Parameter folgendermassen modifiziert:
station=102 OR 1=1&SUBMIT=Go%21
Nun liefert der Webserver dem Benutzer als Antwort die ganze Tabelle der Wetterdaten.
In dieser Lektion geht es darum, den Request auf einen Lektionen Plan so zu modifizieren, dass ein Betriebssystem Kommando ausgeführt wird.
Um ein Betriebssystem Kommando auszuführen wir der Post Request modifiziert:
POST http://localhost/WebGoat/attack?Screen=87&menu=1100 HTTP/1.1 Host: localhost Proxy-Connection: keep-alive Content-Length: 45 Cache-Control: max-age=0 Authorization: Basic Z3Vlc3Q6Z3Vlc3Q= Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Origin: http://localhost User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 Content-Type: application/x-www-form-urlencoded Referer: http://localhost/WebGoat/attack?Screen=87&menu=1100 Accept-Encoding: sdch Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: JSESSIONID=9CC0B024D1C14A14120BE7F92AA39BFD HelpFile=AccessControlMatrix.help&SUBM
In der letzten Zeile wird nun der Form Parameter erweitert und folgendermassen an den Webserver geschickt:
HelpFile=AccessControlMatrix.help"%26%26 echo "test"&SUBMIT=View"
Dazu sind ein paar Erklärungen nötig:
%26ist die codierte Version des UND-Zeichens &.
&&können in der Windows Command Shell (cmd) Befehle nacheinander ausgeführt werden.
Der Befehl, welcher als String an das cmd.exe File des Webservers übergeben wird, lautet also:
cmd.exe /c type "C:\Users\osc\Desktop\WebGoat\WebGoat-5.4-OWASP_Standard_Win32\WebGoat-5.4\tomcat \webapps\WebGoat\lesson_plans\English\AccessControlMatrix.html"&& echo "test"
Er enthält neben dem eigentlichen Befehl, die Hilfedatei anzuzeigen, auch noch einen weiteren
echo Befehl, welcher „test“ auf der Konsole ausgibt.
Das Ziel der Lektion Log Spoofing ist es, einen falschen Eintrag im Log File des Servers zu erstellen, der so aussieht, als ob sich der Benutzer
admin erfolgreich eingeloggt hätte.
Lektionsziele
Um die Aufgabe zu erfüllen, musste auf die Hinweise zur Lektion „Hints“ zurückgegriffen werden. Die Hinweise lauteten folgendermassen:
%0d) and LF (
%0a) for a new line.
Damit ist nun klar, wie das Ziel erreicht werden soll. Neben dem ersten nicht erfolgreichen Log-Eintrag für den Login eines Benutzers soll noch eine weitere Zeile mit dem erfolgreichen Login des Benutzers
admin angefügt werden. Dies konnte folgendermassen ausgeführt werden:
Olivier%0d%0aLogin Succeeded for username: admin.
Login failed for username:einfach noch den Benutzernamen an. Da der Benutzername nun aber noch einen Zeilenumbruch und einen weiteren Log Eintrag erhält, sieht die Log Datei anschliessend folgendermassen aus:
{.sourceCode .} Login failed for username: Olivier Login Succeeded for username: admin
In dieser Lektion soll ein „Denial of Service“ Angriff auf ein Loginformular ausgeführt werden. Gemäss der Aufgabenbeschreibung erlaubt die Seite mehrere Logins eines Benutzers. Die Seite hat dazu einen Database connection pool der 2 Verbindungen zulässt.
Um die Aufgabe zu lösen muss:
Ein Login mit dem Benutzernamen „oli“ und dem Passwort „oli“ zeigt, dass folgendes SQL Statement abgefragt wird, um den Benutzer zu identifizieren:
Das User Feld eignet sich für eine SQL Injection Attacke. Es müsste also möglich sein, das SQL Statement abzuändern und die Passwort-Abfrage zu umgehen.
Der ZAP Proxy liefert den Request auf die Seite:
POST http://localhost/WebGoat/attack?Screen=139&menu=1200 HTTP/1.1 … Username=oli&Password=oli&SUBMIT=Login
Eine kurze Internetrecherche zeigt, dass SQL Statements mit „–„ und nicht mit „;“ auskommentiert werden. Der zweite Versuch mit folgendem Post Parameter:
Username=oli' OR 1=1 --&Password=oli&SUBMIT=Login
Liefert eine Tabelle der Benutzer:
Mit den Login Angaben können nun mehrere Logins auf die Seite ausgeführt werden. Nach dem Login der Benutzer jsnow, jdoe, und jplane erscheint eine Meldung über den erfolgreichen Abschluss der Lektion von OWASP WebGoat.
OWASP WebGoat erlaubt es interessierten Personen ohne grossen Aufwand bekannte Attacken auf Web Applikationen auf einfache Weise nachzustellen. Die ausgeführten Versuche waren vom Schwierigkeitsgrad her nicht besonders hoch, weisen aber einen hohen Lerneffekt durch „Learning by doing“ auf. Zudem stellen sich rasch Erfolgserlebnisse ein, so dass die Arbeit mit den Lektionen Spass macht. Die in meinem Versuch verwendete Versuchsumgebung könnte ohne grossen Aufwand in der Laborumgebung der HSLU installiert werden und so weiteren Studenten zur Verfügung stehen.