juice-shop analyzed
This commit is contained in:
parent
ba6e5a9c17
commit
ed6397d1af
19 changed files with 2071 additions and 0 deletions
149
Lab01/documentation/juiceshop/juiceshop.tex
Normal file
149
Lab01/documentation/juiceshop/juiceshop.tex
Normal file
|
@ -0,0 +1,149 @@
|
|||
\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}
|
Reference in a new issue