diff --git a/Lab02/documentation/bufferOverflow/bufferOverflow.tex b/Lab02/documentation/bufferOverflow/bufferOverflow.tex index 4415ba1..27eb78f 100644 --- a/Lab02/documentation/bufferOverflow/bufferOverflow.tex +++ b/Lab02/documentation/bufferOverflow/bufferOverflow.tex @@ -43,7 +43,7 @@ Die anschließende Funktion gibt eine 0 zurück wenn man gewonnen hat. -Aber in der Funktion wird ein Buffer Overflow stattfinden, da \verb|argv[1]| mit \verb|strcpy()| ohne Begrenzung in ein limitiertes 16 Byte großes char array kopiert wird. Dabei werden im Stack Werte überschrieben. Da können wir angreifen. +Aber in der Funktion kann ein Buffer Overflow stattfinden, da \verb|argv[1]| mit \verb|strcpy()| ohne Begrenzung in ein limitiertes 16 Byte großes char array kopiert wird. Dabei werden im Stack Werte überschrieben. Genau dort kann der Angriff stattfinden. \subsection{Versuchen zu gewinnen} @@ -57,25 +57,26 @@ Das kompilierte Programm mit \verb|gdb bufferOverflow| starten. Einen Breakpoint Getätigte Eingaben im Programm: -\verb|Username: Florian, Input1: 1, Input2: 1, Input3: 1| +Username: \verb|Florian|, Input1: \verb|1|, Input2: \verb|1|, Input3: \verb|1| \begin{figure}[H] \begin{center} - \begin{subfigure}[b]{0.48\textwidth} - \includegraphics[width=\textwidth]{bufferOverflow/01-input} - \caption{Erste Eingabe} - \label{fig:Erste Eingabe} - \end{subfigure} - \begin{subfigure}[b]{0.48\textwidth} - \includegraphics[width=\textwidth]{bufferOverflow/02-breakpoint} - \caption{Breakpoint} - \label{fig:Breakpoint} - \end{subfigure} + \includegraphics[width=0.8\textwidth]{bufferOverflow/01-input} + \caption{Erste Eingabe} + \label{fig:Erste Eingabe} \end{center} - \caption{Erste Eingaben und Breakpoint} - \label{fig:Erste Eingaben und Breakpoint} \end{figure} +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.9\textwidth]{bufferOverflow/02-breakpoint} + \caption{Breakpoint} + \label{fig:Breakpoint} + \end{center} +\end{figure} + +\newpage + Die analyse des Stackpointers sieht folgendermaßen aus: \begin{figure}[H] @@ -103,22 +104,21 @@ Damit werden 28x'A' und die Adresse der Win-Funktion als argument der Software m \begin{figure}[H] \begin{center} - \begin{subfigure}[b]{0.48\textwidth} - \includegraphics[width=\textwidth]{bufferOverflow/04-newrun} - \caption{Zweite Eingabe} - \label{fig:Zweite Eingabe} - \end{subfigure} - \begin{subfigure}[b]{0.48\textwidth} - \includegraphics[width=\textwidth]{bufferOverflow/05-stackpointer} - \caption{Zweiter Stackpointer} - \label{fig:Zweiter Stackpointer} - \end{subfigure} + \includegraphics[width=0.8\textwidth]{bufferOverflow/04-newrun} + \caption{Zweite Eingabe} + \label{fig:Zweite Eingabe} \end{center} - \caption{Zweite Eingaben und Stackpointer} - \label{fig:Zweite Eingaben und Stackpointer} \end{figure} -Die erneute Ausgabe der wichtigen Adressen zeigt uns nun, dass der EIP mit \verb|\x41\x41\x41\x41| überschrieben wurde (Abbildung \ref{fig:Zweiter Stackpointer}) und deshalt korrekt gesetzt werden sollte. Das weitere Ausführen, endet nach einer erfolgreichen Runde in einem segmentation fault (Abbildung \ref{fig:Segmentation Fault}). +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{bufferOverflow/05-stackpointer} + \caption{Zweiter Stackpointer} + \label{fig:Zweiter Stackpointer} + \end{center} +\end{figure} + +Die erneute Ausgabe der wichtigen Adressen zeigt uns nun, dass der EIP mit \verb|\x41\x41\x41\x41| überschrieben wurde (Abbildung \ref{fig:Zweiter Stackpointer}) und deshalt korrekt gesetzt werden sollte. Deswegen endet das weitere Ausführen, nach einer erfolgreichen Runde in einem segmentation fault (Abbildung \ref{fig:Segmentation Fault}). \begin{figure}[H] \begin{center} @@ -128,9 +128,7 @@ Die erneute Ausgabe der wichtigen Adressen zeigt uns nun, dass der EIP mit \verb \end{center} \end{figure} -Dazu kann einfach die normal gesetzte Speicheradresse genutzt werden. Es sollte die vorher gesetzte Adresse wieder genutzt werden. Diese lautete wie in Abbildung \ref{fig:Erster Stackpointer} zu sehen \verb|0xbffff2f8| welches in \verb|\xe8\xf2\xff\xbf| umgewandelt wird. - -\newpage +Dazu kann einfach die normal gesetzte Speicheradresse genutzt werden. Diese lautete wie in Abbildung \ref{fig:Erster Stackpointer} zu sehen \verb|0xbffff2f8| welches in \verb|\xe8\xf2\xff\xbf| umgewandelt wird. Damit wird das Programm noch einmal gestartet: @@ -140,19 +138,18 @@ Und es wird 5 mal in Folge gewonnen: \begin{figure}[H] \begin{center} - \begin{subfigure}[b]{0.48\textwidth} - \includegraphics[width=\textwidth]{bufferOverflow/07-win-1} - \caption{Gewinn-1} - \label{fig:Gewinn-1} - \end{subfigure} - \begin{subfigure}[b]{0.48\textwidth} - \includegraphics[width=\textwidth]{bufferOverflow/08-win-2} - \caption{Gewinn-2} - \label{fig:Gewinn-2} - \end{subfigure} + \includegraphics[width=0.8\textwidth]{bufferOverflow/07-win-1} + \caption{Gewinn - Teil 1} + \label{fig:Gewinn - Teil 1} + \end{center} +\end{figure} + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{bufferOverflow/08-win-2} + \caption{Gewinn - Teil 2} + \label{fig:Gewinn - Teil 2} \end{center} - \caption{Gewinn} - \label{fig:Gewinn} \end{figure} \subsection{Stack} diff --git a/Lab02/documentation/format-string/format-string.tex b/Lab02/documentation/format-string/format-string.tex new file mode 100644 index 0000000..63bfd50 --- /dev/null +++ b/Lab02/documentation/format-string/format-string.tex @@ -0,0 +1,27 @@ +\section{Format String Exploitation} + +Der erste Versuch ist, viele Format-Strings als Vorname und Nachname einzugeben und das Ergebnis zu beobachten. Mit einem Debugger kann die Speicheraddresse der 3 Wichtigen Variablen ausgelesen werden. + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.9\textwidth]{format-string/stack} + \caption{Vorname, Nachname und Key im Stack} + \label{fig:Vorname, Nachname und Key im Stack} + \end{center} +\end{figure} + +Der Key ist im Speicher unter der Adresse 0xbffff2ec abgespeichert und kann mit dem Format String \verb|%19$i| erreicht und dezimal ausgegeben werden. + +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.8\textwidth]{format-string/done} + \caption{Zahl richtig geraten} + \label{fig:Zahl richtig geraten} + \end{center} +\end{figure} + +\subsection{Warum so gefährlich \& was getan werden muss} + +Durch einen Format String Exploit kann jede Stelle im Speicher ausgelesen werden. Damit ist die Vertraulichkeit, ein Teil der ``CIA'', gebrochen. + +Format Strings sollten immer als Teil des Programms angegeben werden, nicht als Teil der Eingabe. Außerdem könnten die Formatzeichenfolgen als konstanten deklariert werden. diff --git a/Lab02/documentation/images/format-string/done.png b/Lab02/documentation/images/format-string/done.png new file mode 100755 index 0000000..00c1ec4 Binary files /dev/null and b/Lab02/documentation/images/format-string/done.png differ diff --git a/Lab02/documentation/images/format-string/stack.png b/Lab02/documentation/images/format-string/stack.png new file mode 100755 index 0000000..aec55bd Binary files /dev/null and b/Lab02/documentation/images/format-string/stack.png differ diff --git a/Lab02/documentation/main.tex b/Lab02/documentation/main.tex index 99fe5c7..e71d5bf 100644 --- a/Lab02/documentation/main.tex +++ b/Lab02/documentation/main.tex @@ -103,6 +103,7 @@ \listoffigures \include{bufferOverflow/bufferOverflow} \include{shell/shell} + \include{format-string/format-string} \printbibliography[title=Literaturverzeichnis] diff --git a/Lab02/documentation/shell/shell.tex b/Lab02/documentation/shell/shell.tex index 36f1512..b6ae385 100644 --- a/Lab02/documentation/shell/shell.tex +++ b/Lab02/documentation/shell/shell.tex @@ -40,8 +40,8 @@ Das ausführen der exploit mit einem größeren NOP Sled zeigt nun die ungefähr \begin{figure}[H] \begin{center} \includegraphics[width=0.9\textwidth]{shell/03-stack} - \caption{Position in dem der NOP-Sled liegt} - \label{fig:Position in dem der NOP-Sled liegt} + \caption{Position des NOP-Sled} + \label{fig:Position des NOP-Sled} \end{center} \end{figure} @@ -73,6 +73,7 @@ Zusätzlich muss damit auch der EBP getroffen werden. Der shell-code ist 106 byt \item ASLR (Address space layout randomization) - das Programm landet an unterschiedlichen Speicherstellen \item Never Execute Bit (NX-BIT) - Stellen als ``nicht ausführbar'' markieren \item Stack Canaries - Eine zufällige Zahl auf dem Stack platzieren und vor dem Return prüfen, ob sie überschrieben wurde + \item Keine unsicheren Funktionen Nutzen (strcpy, gets, ...) \end{list} diff --git a/Lab02/documentation/titlepage/titlepage.tex b/Lab02/documentation/titlepage/titlepage.tex index 32cbcad..ed0ff89 100644 --- a/Lab02/documentation/titlepage/titlepage.tex +++ b/Lab02/documentation/titlepage/titlepage.tex @@ -20,6 +20,6 @@ \vfill \raggedright{} \HRule{13pt}{1pt} \\ - \titleemph{Datum:} 25.04.2022 \\ + \titleemph{Datum:} 02.05.2022 \\ \titleemph{Git:} \href{https://git.unjx.de/flo/SWB6-ITSec/src/branch/master/Lab02}{https://git.unjx.de/flo/SWB6-ITSec/src/branch/master/Lab02} \end{titlepage}