Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Black Friday: -25€ dès 75€ sur les livres en ligne, vidéos... avec le code BWEEK25. J'en profite !
  1. Livres et vidéos
  2. Hacking
  3. Mise en place des épreuves
Extrait - Hacking Un labo virtuel pour auditer et mettre en place des contre-mesures
Extraits du livre
Hacking Un labo virtuel pour auditer et mettre en place des contre-mesures Revenir à la page d'achat du livre

Mise en place des épreuves

Introduction

Nous allons présenter dans ce chapitre quelques épreuves afin d’avoir un laboratoire de hacking minimal et prêt à l’emploi.

Il nous faudra bien sûr ensuite créer nos propres épreuves afin de nous renouveler et de pouvoir tester de nouvelles failles, nous devrons donc réaliser une veille technologique constante afin d’identifier les nouveautés et de les recréer dans notre laboratoire.

Les épreuves proposées ici sont des épreuves qui ont été proposées dans différents challenges que nous avons créés, comme pour le hacknowledge-contest (http://www.hacknowledge-contest.org), ou dans lesquels nous étions challengers. 

Certaines épreuves viennent aussi des TP de la licence professionnelle CDAISI dite « ethical hacking » de l’université de Valenciennes, en son antenne de Maubeuge, dans laquelle nous enseignons.

Nous pourrons bien sûr retrouver ces épreuves sur le web ainsi que leur solution puisque souvent des « write-up », soit les solutions, sont proposées et reprises dans différents sites.

Création de cinq épreuves applicatives

1. Configuration de la machine

Une nouvelle machine spécifique pour cette série d’épreuves de type wargame est créée sous Debian.

Mais qu’est-ce qu’une épreuve de type wargame ?

Ce sont par exemple cinq épreuves qui se suivent et qui sont organisées de telle sorte que la résolution de la première épreuve permet l’accès à la deuxième et ainsi de suite.

Mais pour réaliser cela, nous avons un premier travail de configuration.

Nous allons commencer par créer un répertoire /wargame :


fasm# mkdir /wargame
 

Nous y placerons nos épreuves, donc pour ce cas, cinq fichiers binaires et cinq fichiers source.

Nous voulons un résultat semblable à ceci :


challenge1:/home# ls -l /wargame/  
total 96  
-r-Sr-x--- 1 level2 level1 6970 Jun 29  2010 level1  
-r--r----- 1 root   level1  530 Jun 29  2010 level1.c  
-r-Sr-x--- 1 level3 level2 6679 Jun 29  2010 level2  
-r--r----- 1 root   level2  341 Jun 29  2010 level2.c  
-r-sr-x--- 1 level4 level3 6726 Jun 29  2010 level3  
-r--r----- 1 root   level3  426 Jun 29  2010 level3.c  
-r-Sr-x--- 1 level5 level4 7216 Jun 29  2010 level4  
-r--r----- 1 root   level4 1037 Jun 29  2010 level4.c  
-r-sr-x--- 1 level6 level5 6888 Jun 29  2010 level5  
-r--r----- 1 root   level5  468 Jun 29  2010 level5.c 
 

Nous déposerons donc dans ce répertoire ces fichiers que nous verrons plus en détail dans les sections suivantes.

Nous devons d’abord créer 6 utilisateurs que nous appellerons level1 à level6.

Le mot de passe de level1 sera level1 et les mots de passe des autres devront être plus compliqués car ce sont ces mots de passe qui devront être découverts au fur et à mesure.

Par exemple, on se connecte sous l’identité de level1, nous allons dans /wargame découvrir le binaire correspondant qui s’appelle lui aussi level1.

Si nous résolvons l’épreuve, nous devenons level2 et avons donc accès au répertoire de level2. Dans ce répertoire se trouvera un fichier nommé .passwd qui contient le mot de passe de level2. Nous pourrons ainsi nous connecter...

Création de cinq épreuves logiques

La méthode est la même que précédemment. Nous devons d’abord créer une nouvelle machine virtuelle puis créer les utilisateurs, le dossier /wargame et donner les droits aux fichiers qui suivent.

1. Épreuve level1

La création de la première épreuve est simple : nous créons un fichier dans /home/level1 qui se nommera .backup et dans lequel nous inscrirons le mot de passe de level2.

2. Épreuve level2

Le fichier level2.c est :


#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#define _GNU_SOURCE  
#include <unistd.h>  
  
#define COMMAND      "/bin/cat "  
#define MAX_SIZE   100  
  
void secure( char * str[] )  
{  
   char * replace;  
   unsigned int i;  
   char dangerous[] = "#&;`'\"*?<>ˆ()[]{}$,\t\n ";  
  
   /* No absolute path */  
   while( *str[0] == '/' )  
   {  
      (*str)++;  
   }  
  
   /* No directory traversal */  
   while( (replace = strstr(*str, "../")) )  
   {  
      replace[1] = '/';  
   }  
  
   /* No shell special chars */  
   for( i=0; i<strlen(dangerous); i++ )  
   {  
      while( (replace = strchr(*str, dangerous[i])) )  
      {  
         replace[0] = '_';  
      }     
   }  
}  
  
int main( int argc, char ** argv )  
{  
   char mycat[ strlen(COMMAND) + MAX_SIZE + 1 ] = {0};  
  
   setresuid(geteuid(),geteuid(),geteuid());  
  
   if( argc < 2 )  
   {  
      printf( "Usage : %s <file>\n", argv[0] );  
      exit(1);  
   }  
  
   if( strlen(argv[1]) > MAX_SIZE )  
   {  
      printf( "Nom de fichier trop long !\n");  
    ...

Création d’épreuves crakme

D’après Wikipédia : « Un crackme (littéralement "cracke-moi") est un petit programme destiné à tester les capacités en rétro-ingénierie d’un programmeur. Le but typique d’un crackme est d’être modifié afin que la routine d’enregistrement de celui-ci fonctionne dans tous les cas.

Les crackmes (et implicitement les schémas de protections qu’ils utilisent) sont tantôt programmés et vus soit comme de simples jeux, soit comme de réels entraînements destinés à enlever des protections logicielles commerciales. »

Nous allons vous montrer ici quelques exemples de crackme que nous pourrons mettre en téléchargement, par exemple sur le serveur FTP que nous avons créé au chapitre Machines virtuelles et services.

1. Crackme 1

Un crackme peut être écrit en n’importe quel langage compilé. Nous utiliserons le langage C.


#include <stdio.h>   
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
 
/* Declaration des constantes */  
#define PASSWORD "Mirobolant"  
#define SHELL "/bin/bash"  
#define MSG "\033[1;31mStarting Root Shell ...Le Pass est 
F.scAW8A9jRmk \033[0m\n"  
 
int main (int nb_arg, char...

Création des épreuves web

1. Préparation du serveur

Au chapitre Machines virtuelles et services, nous avons vu l’ensemble des fichiers de configuration du serveur Apache. Nous avons travaillé sur un nouveau fichier « nouveau_host » pour vous montrer une configuration possible avec des sous-domaines. Pour la simplification de l’écriture des épreuves et pour éviter d’être dans un environnement qui nécessite un DNS, nous allons prendre un fichier de configuration de base. Entrons dans notre serveur Proxmox, activons la machine WEB1 et copions le fichier de configuration par défaut.


root@bt:~# ssh root@192.168.1.34 
root@192.168.1.34's password:  
Linux proxmox 2.6.32-19-pve #1 SMP Mon Mar 18 06:41:32 CET 2013 
x86_64 
 
The programs included with the Debian GNU/Linux system are free 
software; 
the exact distribution terms for each program are described in the 
individual files in /usr/share/doc/*/copyright. 
 
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
permitted by applicable law. 
Last login: Sat Apr  6 10:42:07 2013 
root@proxmox:~# vzctl start 100 
Starting container ... 
Container is mounted 
Setting CPU units: 1000 
Setting CPUs: 1 
Configure veth devices: veth100.0  
Adding interface veth100.0 to bridge vmbr0 on CT0 for CT100 
Container start in progress... 
root@proxmox:~# vzctl enter 100 
entered into CT 100 
root@WEB1:/# cp /etc/apache2/sites-available/default 
/etc/apache2/sites-available/conf1 
root@WEB1:/# 
 

Si nous voulons travailler à plusieurs sur des épreuves web différentes, il peut être intéressant d’avoir chacun son dossier personnel contenant un répertoire www. Il faut alors faire pointer la racine du serveur Apache sur ce dossier. Comme expliqué au chapitre Installation des machines virtuelles et des services nécessaires, en travaillant avec des sous-domaines, nous pourrons faire pointer la racine de chaque VirtualHost à des endroits différents. Nous pouvons aussi jouer sur le port d’écoute. Ici, nous pourrions nous placer dans un cas plus simple mais nous laissons cette possibilité pour plus tard. En effet, nous considérons que nous sommes pour le moment seuls à écrire des épreuves....