THIS LAB IS WAY TO MUCH WORK. NO IDEA WHAT TO FUCKING DO.... CANT GET IT TO WORK

This commit is contained in:
Florian Hoss 2022-04-25 18:12:51 +02:00
parent de446b3243
commit 7e54012640

View file

@ -27,13 +27,83 @@ echo "ilEbsYAeS8Prp7xXI5MPqSEyOOKoyXbCotRFSskidgs=" | openssl des -nosalt -d -k
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. 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: Fehlermeldung:
\begin{lstlisting}[breaklines] \begin{verbatim}
bad decrypt bad decrypt
\end{lstlisting} \end{verbatim}
\subsection{Analyse} \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. Das Programm \verb|bufferOverflow.c| beginnt mit der Eingabe des Namens mit Hilfe der Funktion \verb|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(username)| zurück gibt.
Ein Buffer Overflow wird hier abgefangen, da nur so viele Zeichen eingegeben werden können, wie \verb|sizeof()| zurück gibt. Dann werden nacheinander die geratenen Zahlen eingelesen. Man muss alle 3 Zahlen richtig raten, damit man das Spiel gewinnt. Es werden mit \verb|rand()| zufällige Zahlen generiert.
Die anschließende Funktion
\verb|calculate(argv[1], input1, input2, input3, number1, number2, number3)|
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.
\subsection{Debugging}
Zum debuggen wird der Befehl \verb|gdb bufferOverflow| eingegeben. Damit wird der GDB Debugger geöffnet. Zum setzen des ersten Breakpoints bei \verb|main| geben wir \verb|b main| ein. Zum setzen eines Argumentes muss \verb|set args <argument>| eingegeben werden. Danach können wir mit \verb|run| das Programm starten und uns mit \verb|s| mit einzelnen Schritten bewegen. Jederzeit können Variablen mit z.B. \verb|p number1| abgefragt werden. Der Anfang des Stacks kann somit mit \verb|p $sp| und 40 Byte des Stacks mit \verb|x/20x $sp| in HEX oder mit \verb|x/20 $sp| in DEC abgefragt werden. Die Eingabe \verb|i r esp abp eip| gibt die wichtigen Pointer aus.
Wenn man den Breakpoint auf \verb|calculate()| setzt, einen schritt über \verb|strcpy(name,text)| macht, bekommt man einen Segmentation fault.
\subsection{Stack}
Hinweis: \verb|"A" ASCII| wird als \verb|0x41| geschrieben.
Hinweis: \verb|"B" ASCII| wird als \verb|0x42| geschrieben.
Abstand zwischen name (\verb|0xbffff2a0|) und input (\verb|0xbffff2b4|) sind 20 Byte. Jeder Int belegt 4 Byte auf dem Stack. Somit müsste man \[20 + 6 * 4 Byte = 44 Byte\] mit Zahlen belegen damit man immer gewinnt.
\begin{verbatim}
argv[1]: AAAAAAAAAAAAAAAA (16 Byte)
+ BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB (44 Byte)
\end{verbatim}
\begin{verbatim}
Username: Florian
Input1: 1
Input2: 1
Input3: 1
\end{verbatim}
\begin{tabular}{|l|l||r|r|}
\hline
\multicolumn{2}{|c||}{\textbf{Basic Information}} & \multicolumn{2}{c|}{\textbf{Values at Line}} \\
Memory Address & Variable Name & 21 - calculate() & 24 - strcpy() \\
\hline
\verb|0xbffff304| & number3 & \verb|0x00000003| & \verb|0x00000003| \\
\verb|0xbffff300| & number2 & \verb|0x00000003| & \verb|0x00000003| \\
\verb|0xbffff2fc| & number1 & \verb|0x00000001| & \verb|0x00000001| \\
\verb|0xbffff2f0| & Input3 & \verb|0x00000001| & \verb|0x00000001| \\
\verb|0xbffff2ec| & input2 & \verb|0x00000001| & \verb|0x00000001| \\
\verb|0xbffff2e8| & input1 & \verb|0x00000001| & \verb|0x00000001| \\
\hline
\verb|0xbffff2e4| & & \verb|0xb7e54196| & \\
\verb|0xbffff2e0| & & \verb|0xffffffff| & \\
\verb|0xbffff2dc| & & \verb|0x08048871| & \\
\verb|0xbffff2d8| & & \verb|0x08049ff4| & \\
\verb|0xbffff2d4| & & \verb|0x00000016| & \\
\verb|0xbffff2d0| & & \verb|0xb7fc73e4| & \\
\verb|0xbffff2cc| & & \verb|0x08048425| & \\
\verb|0xbffff2c8| & & \verb|0x00000004| & \\
\verb|0xbffff2c4| & EBP & \verb|0xbffff2e8| & \\
\verb|0xbffff2c0| & ESP & \verb|0x08048a04| & \\
\hline
\verb|0xbffff| & name & & 0x41414141 \\
\verb|0xbffff| & name & & 0x41414141 \\
\verb|0xbffff| & name & & 0x41414141 \\
\verb|0xbffff| & name & & 0x41414141 \\
\hline
\verb|0xbffff| & \multicolumn{3}{c|}{\textit{}} \\
\verb|0xbffff| & & \\
\verb|0xbffff| & Return & 0xbffff537 & \\
\hline
\verb|0xbffff| & ESP & 0xbffff290 &\\
\hline
\end{tabular}