La Scaricata
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.
World AIDS
AVERT - AIDS charity
Quanti visitatori oggi?
DONAZIONE
AIUTACI A CRESCERE:
DONAZIONE LIBERÀ
Flusso RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 


I postatori più attivi del mese
Nessun utente


Guida per Scrivere uno shellcode da zero

Andare in basso

Guida per Scrivere uno shellcode da zero Empty Guida per Scrivere uno shellcode da zero

Messaggio Da florin88 Mer Nov 17, 2010 12:47 pm

Requisiti minimi per capire qualcosa in questo tutorial:
– Una minima conoscenza del C
– Una buona conoscenza di GNU/Linux
– Un'ottima conoscenza dell'Assembly

Molti programmi sono vulnerabili ad una tecnica detta buffer overflow. Se avete
letto i requisiti minimi di questo tutorial e siete arrivati fin qui, immagino che
sappiate di cosa sto parlando.

Detto in parole povere, un buffer overflow è generalmente un errore di
programmazione che permette ad un attaccante di scrivere in zone dove non
dovrebbe scrivere. Piccolo esempio di un programma vulnerabile:

Codice:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)  {
        char buff[2];
        if (argc>1)  {
                strcpy(buff,argv[1]);
                printf ("Parametro passato: %s\n",buff);
        }
        return 0;
}

In questo esempio ho creato un buffer di 2 caratteri, e al suo interno copio il
primo argomento passato al programma. Salviamolo, ad esempio, come vuln.c,
compiliamolo ed eseguiamolo:

Codice:
blacklight@nightmare:~/prog/c++$ gcc -Wall -o vuln vuln.c
blacklight@nightmare:~/prog/c++$ ./vuln AA
Parametro passato: AA
blacklight@nightmare:~/prog/c++$ ./vuln AAAA
Parametro passato: AAAA
blacklight@nightmare:~/prog/asm/GAS/shell$ ./vuln `perl -e 'print "A" x10'`
Parametro passato: AAAAAAAAAA
Segmentation fault

Notate una cosa: se provo a inserire 4 caratteri in un buffer che ne può
contenere solo 2 non succede ancora niente. Questo perché i sistemi operativi
moderni (i sistemi UNIX in particolare) provvedono a creare il cosiddetto
“garbage space”. In pratica, proprio per evitare incidenti di buffer overflow il più
possibile, inseriscono una specie di zona “cuscinetto” tra il buffer in memoria e
le aree di memoria importanti, quelle che vengono sovrascritte con un attacco di
tipo buffer overflow. Ma se passo come argomento al programma un buffer di 10
'A' (per comodità ho usato l'interprete Perl per passarli, tecnica molto usata
quando si vuole iniettare del codice in un programma vunlerabile per evitare di
perdere tempo a scrivere tanti caratteri ASCII), il sistema operativo può fare ben
poco, e il programma va in crash.


LA GUIDA COMPLETA DI 10 PAGINE È SCARICABILE DA QUI:
http://www.megaupload.com/?d=ZNMUM88M
florin88
florin88
Admin

Numero di messaggi : 7128
Data d'iscrizione : 18.12.08
Età : 36
Località : Ca' Savio bronx (VE)

http://www.flaviusso.altervista.it

Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.