diff --git a/Lab01/documentation/images/juice/juice-01.png b/Lab01/documentation/images/juice/juice-01.png index 2b4b5ed..6e66218 100644 Binary files a/Lab01/documentation/images/juice/juice-01.png and b/Lab01/documentation/images/juice/juice-01.png differ diff --git a/Lab01/documentation/images/juice/juice-12.png b/Lab01/documentation/images/juice/juice-12.png index 417fcfe..842b87a 100644 Binary files a/Lab01/documentation/images/juice/juice-12.png and b/Lab01/documentation/images/juice/juice-12.png differ diff --git a/Lab01/documentation/images/juice/juice-13.png b/Lab01/documentation/images/juice/juice-13.png new file mode 100644 index 0000000..d1b5c34 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-13.png differ diff --git a/Lab01/documentation/images/juice/juice-14.png b/Lab01/documentation/images/juice/juice-14.png new file mode 100644 index 0000000..433f21e Binary files /dev/null and b/Lab01/documentation/images/juice/juice-14.png differ diff --git a/Lab01/documentation/images/juice/juice-15.png b/Lab01/documentation/images/juice/juice-15.png new file mode 100644 index 0000000..579c6b7 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-15.png differ diff --git a/Lab01/documentation/images/juice/juice-16.png b/Lab01/documentation/images/juice/juice-16.png new file mode 100644 index 0000000..53f959a Binary files /dev/null and b/Lab01/documentation/images/juice/juice-16.png differ diff --git a/Lab01/documentation/images/juice/juice-17.png b/Lab01/documentation/images/juice/juice-17.png new file mode 100644 index 0000000..55421b7 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-17.png differ diff --git a/Lab01/documentation/images/juice/juice-18.png b/Lab01/documentation/images/juice/juice-18.png new file mode 100644 index 0000000..599b6cd Binary files /dev/null and b/Lab01/documentation/images/juice/juice-18.png differ diff --git a/Lab01/documentation/images/juice/juice-19.png b/Lab01/documentation/images/juice/juice-19.png new file mode 100644 index 0000000..166e389 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-19.png differ diff --git a/Lab01/documentation/images/juice/juice-20.png b/Lab01/documentation/images/juice/juice-20.png new file mode 100644 index 0000000..5dc8c48 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-20.png differ diff --git a/Lab01/documentation/images/juice/juice-21.png b/Lab01/documentation/images/juice/juice-21.png new file mode 100644 index 0000000..50844be Binary files /dev/null and b/Lab01/documentation/images/juice/juice-21.png differ diff --git a/Lab01/documentation/images/juice/juice-22.png b/Lab01/documentation/images/juice/juice-22.png new file mode 100644 index 0000000..e7676ce Binary files /dev/null and b/Lab01/documentation/images/juice/juice-22.png differ diff --git a/Lab01/documentation/images/juice/juice-23.png b/Lab01/documentation/images/juice/juice-23.png new file mode 100644 index 0000000..fbb4cf4 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-23.png differ diff --git a/Lab01/documentation/images/juice/juice-24.png b/Lab01/documentation/images/juice/juice-24.png new file mode 100644 index 0000000..ec12617 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-24.png differ diff --git a/Lab01/documentation/images/juice/juice-25.png b/Lab01/documentation/images/juice/juice-25.png new file mode 100644 index 0000000..4894ea6 Binary files /dev/null and b/Lab01/documentation/images/juice/juice-25.png differ diff --git a/Lab01/documentation/juiceshop/juiceshop.tex b/Lab01/documentation/juiceshop/juiceshop.tex index bcace55..cd8c9b5 100644 --- a/Lab01/documentation/juiceshop/juiceshop.tex +++ b/Lab01/documentation/juiceshop/juiceshop.tex @@ -2,7 +2,7 @@ \subsection{Docker} -Um die Seite lokal im docker zu betreiben wurde folgende ``docker-compose.yml'' genutzt: +Um die Seite lokal als Docker\footnote{\href{https://www.docker.com/}{https://www.docker.com/}} Container zu betreiben wurde folgende ``docker-compose.yml'' genutzt. Zum Starten muss nun lediglich ein ``docker-compose up'' ausgeführt werden. \begin{lstlisting} version: "3.9" @@ -16,9 +16,7 @@ services: - 3000:3000 \end{lstlisting} -Es muss nun lediglich ein ``docker-compose up'' ausgeführt werden. - -\cite[vgl. dazu][]{juice-shop} +\cite[vgl.][]{juice-shop} \subsection{Analyse} @@ -30,7 +28,11 @@ Es muss nun lediglich ein ``docker-compose up'' ausgeführt werden. \end{center} \end{figure} -Auf der Startseite (Abbildung \ref{fig:Startseite Juice Shop}) wird man mit verschiedenen Pop-Ups begrüßt. Es beschreibt, dass die Seite nicht sicher sei. Die Applikation wird von der Open Web Application Security Project Foundation\footnote{\href{https://owasp.org/}{https://owasp.org/}} bereitgestellt. Wenn man das Tutorial startet, wird durch verschiedene Tipps hingewiesen, wie die Sicherheitslücken gefunden werden können. +Auf der Startseite (Abbildung \ref{fig:Startseite Juice Shop}) wird man mit verschiedenen Pop-Ups begrüßt. Es beschreibt, dass die Seite nicht sicher sei und die Applikation von der Open Web Application Security Project Foundation\footnote{\href{https://owasp.org/}{https://owasp.org/}} bereitgestellt wird. Wenn man das Tutorial startet, wird durch verschiedene Tipps hingewiesen, wie die Sicherheitslücken gefunden werden können. + +\newpage + +\subsubsection{Score-Board} So wird zum Beispiel erklärt, dass man mit F12 den Javascript-Code der Seite analysieren könnte (Abbildung \ref{fig:Javascript in den Entwicklertools von Firefox}). Der Vorschlag ist gut, da mit einer Suche der Pfad des Score-Boards entdeckt werden kann (Abbildung \ref{fig:Pfad des Score-Boards}). @@ -47,35 +49,40 @@ So wird zum Beispiel erklärt, dass man mit F12 den Javascript-Code der Seite an \end{center} \end{figure} -Wenn man nun noch nach Admin sucht, kann man eine Route in das Administrations-Panel finden. Leider sind wir aber nicht Berechtigt die Seite zu sehen (Abbildung \ref{fig:403 Administration}). Beim Ausprobieren wie man die Daten des Admins bekommen kann, hat ein Fehler den Server zum Absturz gebracht (Abbildung \ref{fig:Server Absturz}). Mit einer SQL Injection (Eingabe des Zeichen ') über den Login kann ein SQLITE Error hervorgerufen werden (Abbildung \ref{fig:Server Absturz}). +\newpage + +\subsubsection{Server Absturz} + +Wenn man nun noch nach Admin sucht, kann man eine Route in das Administrations-Panel finden. Leider sind wir aber nicht Berechtigt die Seite zu sehen (Abbildung \ref{fig:403 Administration}). Beim Ausprobieren wie man die Daten des Admins bekommen kann, hat ein Fehler den Server zum Absturz gebracht (Abbildung \ref{fig:Server Absturz}). Mit einer SQL Injection (Eingabe des Zeichen ') über den Login kann ein SQLITE Error hervorgerufen werden (Abbildung \ref{fig:SQLITE error}). \begin{figure}[H] \begin{center} - \includegraphics[width=0.7\textwidth]{juice/juice-04} - \caption{403 Administration} - \label{fig:403 Administration} - \end{center} -\end{figure} -\begin{figure}[H] - \begin{center} - \includegraphics[width=0.7\textwidth]{juice/juice-06} - \caption{SQLITE error} - \label{fig:SQLITE error} - \end{center} -\end{figure} -\begin{figure}[H] - \begin{center} - \includegraphics[width=0.7\textwidth]{juice/juice-05} - \caption{Server Absturz} - \label{fig:Server Absturz} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-04} + \caption{403 Administration} + \label{fig:403 Administration} + \end{subfigure} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-06} + \caption{SQLITE error} + \label{fig:SQLITE error} + \end{subfigure} + \begin{subfigure}[b]{0.7\textwidth} + \includegraphics[width=\textwidth]{juice/juice-05} + \caption{Server Absturz} + \label{fig:Server Absturz} + \end{subfigure} + \caption{Unhandled Error} + \label{fig:Unhandled Error} \end{center} \end{figure} +\subsubsection{Admin Anmeldung} + Man kann den SQL Befehl so anpassen, damit durch ``OR TRUE --'' immer true zurück kommt und eine Authentifizierung mit dem ersten Nutzer in der Datenbank möglich ist. Glücklicherweise ist das der admin (Abbildung \ref{fig:Login Admin}). \begin{verbatim} -"SELECT * FROM Users WHERE email = ''' OR TRUE -- AND password = -'202cb962ac59075b964b07152d234b70' AND deletedAt IS NULL" +SELECT * FROM Users WHERE email = ''' OR TRUE -- \end{verbatim} \begin{figure}[H] @@ -86,6 +93,8 @@ Man kann den SQL Befehl so anpassen, damit durch ``OR TRUE --'' immer true zurü \end{center} \end{figure} +\subsubsection{Admin-Panel} + Nun können wir das Admin-Panel, welches vorher nicht für uns zur Verfügung stand, nutzen. Unter ``http:\//\//localhost:3000\//\#\//administration'' sehen wir nun das Feedback der Nutzer (Abbildung \ref{fig:Admin-Panel}). \begin{figure}[H] @@ -98,6 +107,8 @@ Nun können wir das Admin-Panel, welches vorher nicht für uns zur Verfügung st \newpage +\subsubsection{Anonymes Feedback erstellen} + Im Score-Board gibt es ein Tutorial zum Erstellen von Feedbacks unter einem anderen Account. Dazu gibt man zuerst ein normales Feedback ab. der Request sieht wie folgt aus (Abbildung \ref{fig:Feedback Request}): \begin{verbatim} @@ -114,27 +125,172 @@ Damit kann man in z.B. Postman ein Post Request unter einem anderen Namen mit de \begin{figure}[H] \begin{center} - \includegraphics[width=0.7\textwidth]{juice/juice-09} - \caption{Feedback Request} - \label{fig:Feedback Request} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-09} + \caption{Feedback Request} + \label{fig:Feedback Request} + \end{subfigure} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-10} + \caption{Neues Feedback mit falschem Namen} + \label{fig:Neues Feedback mit falschem Namen} + \end{subfigure} + \begin{subfigure}[b]{0.7\textwidth} + \includegraphics[width=\textwidth]{juice/juice-11} + \caption{Captcha Lösung} + \label{fig:Captcha Lösung} + \end{subfigure} \end{center} + \caption{Anonymes Feedback erstellen} + \label{fig:Neues Feedback erstellen} \end{figure} + +\newpage + +\subsubsection{XSS} + +Da ich in meiner App Cross-Site-Scripting eingebaut hatte, wollte ich hier auch probieren, ob es geht. Im Score Board wird man darauf hingewiesen, dass man sich das Suchfeld anschauen sollte (Abbildung \ref{fig:XSS} / \ref{fig:XSS-Bonus}). + \begin{figure}[H] \begin{center} - \includegraphics[width=0.7\textwidth]{juice/juice-11} - \caption{Captcha Lösung} - \label{fig:Captcha Lösung} + \includegraphics[width=0.8\textwidth]{juice/juice-13} + \caption{XSS} + \label{fig:XSS} \end{center} -\end{figure} -\begin{figure}[H] \begin{center} - \includegraphics[width=0.7\textwidth]{juice/juice-10} - \caption{Neues Feedback mit falschem Namen} - \label{fig:Neues Feedback mit falschem Namen} + \includegraphics[width=0.8\textwidth]{juice/juice-14} + \caption{XSS-Bonus} + \label{fig:XSS-Bonus} \end{center} \end{figure} -Damit haben wir insgesamt 6 Schwachstellen ausgenutzt (Abbildung \ref{fig:Score Board Ergebnis}). +\subsubsection{Privacy-Policy} + +Login als ein Benutzer gibt außerdem die Privacy-Policy im Menü frei. + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-15} + \caption{Privacy Policy} + \label{fig:Privacy Policy} + \end{center} +\end{figure} + +\subsubsection{Admin Passwort raten} + +Man kann außerdem das Password des Admins raten. + +\begin{verbatim} +E-Mail: admin@juice-sh.op +Passwort: admin123 +\end{verbatim} + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-16} + \caption{Schlechtes Passwort} + \label{fig:Schlechtes Passwort} + \end{center} +\end{figure} + +\subsubsection{Warenkorb} + +Wenn man einen anderen Warenkorb sehen möchte kann man im Session Cookie die id auf einen anderen Nutzer setzen. + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-17} + \caption{Warenkorb} + \label{fig:Warenkorb} + \end{center} +\end{figure} + +\newpage + +\subsubsection{Jims und Benders Account} + +Um sich mit Jims oder Benders Account anzumelden muss lediglich eine SQL Injection beim Login durchgeführt werden. Sowohl Jims als auch Benders E-Mail können in den Kommentaren zu Produkten gefunden werden. + +\begin{verbatim} +E-Mail: jim@juice-sh.op'-- +Password: irgendwas... +E-Mail: bender@juice-sh.op'-- +Password: irgendwas... +\end{verbatim} + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-18} + \caption{Jims Account} + \label{fig:Jims Account} + \end{center} + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-18} + \caption{Benders Account} + \label{fig:Benders Account} + \end{center} +\end{figure} + +\subsubsection{FTP Server} + +Der FTP Server ist ohne Authentifizierung unter ``http://localhost:3000/ftp'' zu erreichen. Darunter findet man auch ein Confidential Document. + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-20} + \caption{Confidential Document} + \label{fig:Confidential Document} + \end{center} +\end{figure} + +\newpage + +\subsubsection{5-Start Feedback löschen} + +Um 5-Star Feedback zu löschen kann man einfach auf der Administration Seite, die wir vorher gefunden hatten die Kommentare löschen. + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{juice/juice-21} + \caption{5-Star Feedback} + \label{fig:5-Star Feedback} + \end{center} +\end{figure} + +\subsubsection{Jeglichen Kommentare ändern} + +Um ein Kommentar für ein Produkt zu ändern, schicken wir zuerst ein Kommentar ab und ändern ihn, um die API herauszufinden (Abbildung \ref{fig:Kommentar Änderung Request}). Danach schauen wir mit einem GET Request welche ID wir ändern möchten (Abbildung \ref{fig:Postman Kommentar IDs}) und schicken einen PATCH Request (Abbildung \ref{fig:Postman Kommentar Änderung}) mit einem Bearer Token des Admins als Authentifizierung (Abbildung \ref{fig:Bearer Token von Admin}). + +\begin{figure}[H] + \begin{center} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-22} + \caption{Kommentar Änderung Request} + \label{fig:Kommentar Änderung Request} + \end{subfigure} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-24} + \caption{Bearer Token von Admin} + \label{fig:Bearer Token von Admin} + \end{subfigure} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-23} + \caption{Postman Kommentar IDs} + \label{fig:Postman Kommentar IDs} + \end{subfigure} + \begin{subfigure}[b]{0.48\textwidth} + \includegraphics[width=\textwidth]{juice/juice-25} + \caption{Postman Kommentar Änderung} + \label{fig:Postman Kommentar Änderung} + \end{subfigure} + \end{center} +\end{figure} + +\newpage + +\subsection{Ergebnis} + +Damit haben wir insgesamt 15 Schwachstellen ausgenutzt (Abbildung \ref{fig:Score Board Ergebnis}). \begin{figure}[H] \begin{center} diff --git a/Lab01/documentation/titlepage/titlepage.tex b/Lab01/documentation/titlepage/titlepage.tex index a00182f..64ace3e 100644 --- a/Lab01/documentation/titlepage/titlepage.tex +++ b/Lab01/documentation/titlepage/titlepage.tex @@ -20,5 +20,6 @@ \vfill \raggedright{} \HRule{13pt}{1pt} \\ - \titleemph{Dozent:} Prof. Dr. rer. nat. Tobias Heer + \titleemph{Dozent:} Prof. Dr. rer. nat. Tobias Heer\\ + \titleemph{Git:} \href{https://git.unjx.de/flo/SWB6-ITSec/src/branch/master/Lab01}{https://git.unjx.de/flo/SWB6-ITSec/src/branch/master/Lab01} \end{titlepage}