\section{Juice Shop} \subsection{Docker} Um die Seite lokal im docker zu betreiben wurde folgende ``docker-compose.yml'' genutzt: \begin{lstlisting} version: "3.9" services: juice-shop: image: bkimminich/juice-shop:latest container_name: juice-shop restart: unless-stopped ports: - 3000:3000 \end{lstlisting} Es muss nun lediglich ein ``docker-compose up'' ausgeführt werden. \cite[vgl. dazu][]{juice-shop} \subsection{Analyse} \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-01} \caption{Startseite Juice Shop} \label{fig:Startseite Juice Shop} \end{center} \end{figure} Auf der Startseite (Abbildung \ref{fig:Startseite Juice Shop}) wird man mit verschiedenen Pop-Ups begrüßt. Es beschreibt, das die Seite nicht sicher sei. Die Programmierung wird von der Open Web Application Security Project Foundation\footnote{\href{https://owasp.org/}{https://owasp.org/}} bereitgestellt. Wenn man das Tutorial startet, wird man auf verschiedene Dinge hingewiesen, wie die Sicherheitslücken gefunden werden können. \newpage 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 Sucher der Pfad entdeckt werden kann (Abbildung \ref{fig:Pfad des Score-Boards}). \begin{figure}[H] \begin{center} \includegraphics[width=0.9\textwidth]{juice/juice-02} \caption{Javascript in den Entwicklertools von Firefox} \label{fig:Javascript in den Entwicklertools von Firefox} \end{center} \begin{center} \includegraphics[width=0.9\textwidth]{juice/juice-03} \caption{Pfad des Score-Boards} \label{fig:Pfad des Score-Boards} \end{center} \end{figure} \newpage Wenn man nun noch nach Admin sucht, kann man eine Route in das Aministrations-Panel finden. Leider sind wir aber nicht Berechtigt die Seite zu sehen (Abbildung \ref{fig:403 Administration}). Beim Ausprobieren wie ich die Daten des Admins bekommen kann, hat ein Fehler den Server zum Absturz gebracht (Abbildung \ref{fig:Server Absturz}). Aber mir einer SQL Injection über das Suchfeld kann als Antwort des Servers das Array an Benutzern ausgelesen werden (Abbildung \ref{fig:Server Absturz}). \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-04} \caption{403 Administration} \label{fig:403 Administration} \end{center} \end{figure} \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-06} \caption{SQLITE error} \label{fig:SQLITE error} \end{center} \end{figure} \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-05} \caption{Server Absturz} \label{fig:Server Absturz} \end{center} \end{figure} Nun kann man 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" \end{verbatim} \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-07} \caption{Login Admin} \label{fig:Login Admin} \end{center} \end{figure} 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] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-08} \caption{Admin-Panel} \label{fig:Admin-Panel} \end{center} \end{figure} \newpage Im Score-Board gibt es ein Tutorial zum Erstellen eines Feedbacks unter einem anderen Account. Dazu gibt man zuerst ein normales Feedback. der Request sieht wie folgt aus (Abbildung \ref{fig:Feedback Request}): \begin{verbatim} { "UserId": 1, "captchaId": 2, "captcha": "78", "comment": "test (***in@juice-sh.op)", "rating": 2 } \end{verbatim} Damit kann man in z.B. Postman ein Post Request unter einem anderen Namen mit dem neu vorgeschlagenen Captcha (Abbildung \ref{fig:Captcha Lösung}) machen (Abbildung \ref{fig:Neues Feedback mit falschem Namen}). \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-09} \caption{Feedback Request} \label{fig:Feedback Request} \end{center} \end{figure} \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-11} \caption{Captcha Lösung} \label{fig:Captcha Lösung} \end{center} \end{figure} \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-10} \caption{Neues Feedback mit falschem Namen} \label{fig:Neues Feedback mit falschem Namen} \end{center} \end{figure} Damit haben wir insgesamt 6 Schwachstellen herausgefunden (Abbildung \ref{fig:Score Board Ergebnis}). \begin{figure}[H] \begin{center} \includegraphics[width=0.8\textwidth]{juice/juice-12} \caption{Score Board Ergebnis} \label{fig:Score Board Ergebnis} \end{center} \end{figure}