30/07/10 11:14
fabi3194
Salve a tutti, programmando con il c mi sto "buttando" sulle vulerabilità riguardanti la memoria; tuttavia non riesco a capire come trovare il parametro passato alle funzioni. Posto il source di un piccolo programmino e gli indirizzi in memoria interessati.
Ok, gli 0x41414141 sono i valor della variabile buffer (che nell'indirizzo 0xbffff38c "straripano" nella variabile value... all'indirizzo 0xbffff39c c'è l'indirizzo di ritorno...all'indirizzo 0xbffff3b8 c'è il sfp.
Ora allego il source:
Ora, le mie domande sono due:
1) Dov'è il parametro passato alla funzione check_a? Dovrebbe essere nei vicino all'indirizzo di ritorno ma non lo trovo...
2) Cosa c'è agli indirizzi 0xbffff38d e 0xbffff38e?
Spero di essere stato chiaro, grazie a tutti per l'attenzione
(gdb) x/50xw buffer 0xbffff35c: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff36c: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff37c: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff38c: 0x00004141 0xb7fcb324 0xb7fcaff4 0xbffff3b8 0xbffff39c: 0x080484bc 0xbffff601 0xb7ff10c0 0x0804850b 0xbffff3ac: 0xb7fcaff4 0x08048500 0x00000000 0xbffff438 0xbffff3bc: 0xb7e8bbd6 0x00000002 0xbffff464 0xbffff470 0xbffff3cc: 0xb7fe1858 0xbffff420 0xffffffff 0xb7ffeff4 0xbffff3dc: 0x08048288 0x00000001 0xbffff420 0xb7ff06b6 0xbffff3ec: 0xb7fffab0 0xb7fe1b48 0xb7fcaff4 0x00000000 0xbffff3fc: 0x00000000 0xbffff438 0xef2ffd66 0xc1bf4b76 0xbffff40c: 0x00000000 0x00000000 0x00000000 0x00000002 0xbffff41c: 0x080483a0 0x00000000
Ok, gli 0x41414141 sono i valor della variabile buffer (che nell'indirizzo 0xbffff38c "straripano" nella variabile value... all'indirizzo 0xbffff39c c'è l'indirizzo di ritorno...all'indirizzo 0xbffff3b8 c'è il sfp.
Ora allego il source:
#include <stdio.h> #include <stdlib.h> #include <string.h> int check_a(char *password){ int value =0; char *buffer[12]; strcpy(buffer,password); if (strcmp(buffer,"biscott")==0) value=1; return value; } int main(int argc, char *argv[]){ if (argc==1) return 1; if(check_a(argv[1])==0) printf ("Doesn't work -.-''\n"); else printf ("Oh yeah,works :D\n"); return 0; }
Ora, le mie domande sono due:
1) Dov'è il parametro passato alla funzione check_a? Dovrebbe essere nei vicino all'indirizzo di ritorno ma non lo trovo...
2) Cosa c'è agli indirizzi 0xbffff38d e 0xbffff38e?
Spero di essere stato chiaro, grazie a tutti per l'attenzione
aaa