Non capisco perchè il codice seguente funziona solo sotto gdb.... mi sta sfuggendo qualcosa....
sono su un kernel 2.6.32,
il codice:
quindi con gdb ho SIGSEGV dopo essere uscito dalla shell, che è quello che mi aspetto:
mentre se lo eseguo senza gdb... mi da subito SIGSEGV.... ma non dovrebe comunque eseguire system("/bin/sh") prima???
mi sono un attimo perso.... mi date una mano?
EDIT:
stesso problema anche con qualsiasi altra funzione della libc.... ad esempio ho provato con puts....
per ricavare l'indirizzo ho usato "print system" durante il debugging.
Forse succede perchè ho scritto tutto all'interno di una inline?? ma non credo.....
sono su un kernel 2.6.32,
il codice:
Codice:
#include <stdio.h>
#include <stdlib.h>
char string[]="/bin/sh;";
void main(void)
{
asm(
"push %0;" // string address
"push $0x41414141;" // dummy
"push $0x00167100;" // system address in libc
"ret;" // call system()
:
:"r"(string)
);
exit(0);
}
quindi con gdb ho SIGSEGV dopo essere uscito dalla shell, che è quello che mi aspetto:
Codice:
matteo@Unix:~/Documenti/RetOriented-Exploit$ gdb a.out -q
Reading symbols from /home/matteo/Documenti/RetOriented-Exploit/a.out...done.
(gdb) run
Starting program: /home/matteo/Documenti/RetOriented-Exploit/a.out
$ exit
Program received signal SIGSEGV, Segmentation fault.
0x00166eb6 in ?? () from /lib/tls/i686/cmov/libc.so.6
mentre se lo eseguo senza gdb... mi da subito SIGSEGV.... ma non dovrebe comunque eseguire system("/bin/sh") prima???
Codice:
matteo@Unix:~/Documenti/RetOriented-Exploit$ ./a.out
Segmentation fault
mi sono un attimo perso.... mi date una mano?
EDIT:
stesso problema anche con qualsiasi altra funzione della libc.... ad esempio ho provato con puts....
per ricavare l'indirizzo ho usato "print system" durante il debugging.
Forse succede perchè ho scritto tutto all'interno di una inline?? ma non credo.....