\section{Part 1: Buffer Overflow}

\subsection{Kompilieren}

Zum kompilieren des C-Programmes wird GCC verwendet. Folgender Befehl wird ausgeführt:

\begin{lstlisting}[breaklines]
gcc -g --no-pie -z execstack -fno-stack-protector -D_FORTIFY_SOURCE=0 bufferOverflow.c -o bufferOverflow
\end{lstlisting}

Danach kann das Programm mit \verb|./bufferOverlow| gestartet werden.

\subsection{Hints}

Es wurden verschlüsselte Tipps beigesteuert. Zum verschlüsseln wurde folgender Befehl ausgeführt:

\begin{lstlisting}[breaklines]
echo "This is your first hint" | openssl des -nosalt -e -k 12345678 -a
\end{lstlisting}

Zum entschlüsseln muss lediglich der verschlüsselte String mit dem angegebenen secret an openssl übergeben werden.

\begin{lstlisting}[breaklines]
echo "ilEbsYAeS8Prp7xXI5MPqSEyOOKoyXbCotRFSskidgs=" | openssl des -nosalt -d -k 12345678 -a
\end{lstlisting}

Leider konnten die angegebenen Tipps nicht entschlüsselt werden. Das obige Beispiel funktioniert ohne Probleme, kann aber nicht auf die in der PDF angegebenen Tipps angewandt werden.

Fehlermeldung:
\begin{lstlisting}[breaklines]
bad decrypt
\end{lstlisting}

\subsection{Analyse}

Das Programm ``bufferOverflow.c'' beginnt mit der Eingabe des Namens mit Hilfe der Funktion ``fgets''\footnote{\href{https://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm}{tutorialspoint - fgets}}. Dabei wird die Länge des eingegebenen Benutzernamens in einem char Array der Länge 16 gespeichert.

Ein Buffer Overflow wird hier abgefangen, da nur so viele Zeichen eingegeben werden können, wie \verb|sizeof()| zurück gibt.

