« Atelier SysRes SE4 2025/2026 E7 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
 
(62 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Mettre en place les VMs ==


=== Création du pont: ===
=== Création du pont: ===
Ligne 72 : Ligne 74 :
</syntaxhighlight>
</syntaxhighlight>


=== Effraction WiFi ===
== Connectivité à internet ==
 
Tout d'abord je renomme ma machine par <code>C2</code>
 
Dans ma machine de service, dans <code>/etc/network/interfaces</code>:
<syntaxHighlight>
iface eth0 inet static
192.168.7.3
netmask 255.255.255.0
gateway 192.168.7.1
 
auto eth1
iface eth1 inet6 auto
</syntaxHighlight>
 
Dans ma machine mandataire, toujours dans <code>/etc/network/interfaces</code>:
<syntaxHighlight>
# The loopback network interface
auto lo
iface lo inet loopback
 
# Primary interface
auto eth0
iface eth0 inet static
    address 192.168.7.1/24
 
# Second interface
auto eth1
iface eth1 inet static
    address 193.48.57.170/27
    gateway 193.48.57.164
 
iface eth1 inet6 auto
</syntaxHighlight>Je peux ping la machine de mon binôme et google.
[[Fichier:Ping c2 vers rs7.png|centré|vignette|490x490px|Ping vers mon binôme]]
[[Fichier:Ping ipv4 c2.png|vignette|497x497px|Ping Ipv4|centré]][[Fichier:Ping ipv6 c2.png|vignette|796x796px|Ping Ipv6|centré]]
 
== SSH ==
Pour permettre la connexion via SSH, j'ai installé <code>ssh</code> et j'ai commenté la ligne <code>PermitRootLogin</code> dans <code>/etc/ssh/sshd_config</code>.
[[Fichier:Ssh C2.png|centré|vignette|632x632px|SSH vers ma machine]]
 
== DNS ==
 
Tout d'abord j'installe <code>bind9</code>.
 
=== Fichiers de configuration: ===
Dans <code>/etc/resolv.conf</code>:
<syntaxHighlight>
search c2vts.fr
nameserver 192.168.7.3
nameserver 192.168.7.2
 
nameserver 8.8.8.8
</syntaxHighlight>
 
Dans le fichier <code>/etc/bind/named.conf.local</code>:
<syntaxHighlight>
zone "c2vts.fr" {
    type primary;
    file "/etc/bind/zones/c2vts.zone";
    allow-transfer{secondaries;};
    also-notify{2001:660:4401:60a0:216:3eff:fee4:9c08;};
    key-directory "/etc/bind/keys";
};
 
acl "secondaries" {
    2001:660:4401:60a0:216:3eff:fed3:d693;
    2001:660:4401:60a0:216:3eff:fee4:9c08;
};
 
zone "rs7.online" {
    type secondary;
    file "/etc/bind/backup.c2vts.zone";
    primaries { 2001:660:4401:60a0:216:3eff:fed3:d693; };
};
</syntaxHighlight>
 
Je crée un fichier de zone <code>/etc/bind/zones/c2vts.zone</code>:
<syntaxHighlight>
$TTL 200
@      IN      SOA    ns.c2vts.fr. admin.c2vts.fr. (
        3610    ; Version
        21600  ; Refresh secondary    (6h)
        3600    ; Retry secondary      (1h)
        2592000 ; Expire if no refresh (30j)
        86400 ) ; Negative cache      (24h)
 
@        IN      NS      ns.c2vts.fr.
@        IN      NS      ns.rs7.online.
 
;Enregistrements A
ns      IN    A    193.48.57.170
@        IN    A    193.48.57.170
 
;Enregistrements AAAA
ns      IN    AAAA  2001:660:4401:60a0:216:3eff:fed3:58ae
@        IN    AAAA  2001:660:4401:60a0:216:3eff:fed3:58ae
 
;Enregistrements CNAME
www      IN    CNAME c2vts.fr.
 
</syntaxHighlight>
 
Pour vérifier le fichier de zone:
<code>named-checkzone c2vts.zone</code>
 
=== DNSSEC: ===
Pour activer le DNSSEC, il faut l'activer depuis Gandi et rajouter dans <code>named.conf.local</code>:
<syntaxHighlight>
zone "c2vts.zone"{
...
dnssec-policy "dnspol";
inline-signing yes;
...
};
 
dnssec-policy "dnspol" {
    keys {
        ksk key-directory lifetime unlimited algorithm 13;
        zsk key-directory lifetime unlimited algorithm 13;
    };
    nsec3param;
};
 
</syntaxHighlight>
 
Ne pas oublier de rendre propriétaire le dossier<code>keys</code> pour que bind écrive les clés.
<code>chown bind:bind /etc/bind/keys</code>
 
On relance bind avec <code>service named restart</code>
 
=== Propagation: ===
[[Fichier:Propagation A c2vts.fr.png|vignette|Propagation A|gauche|467x467px]]
[[Fichier:Propagation NS c2vts.fr.png|vignette|Propagation NS]]
[[Fichier:Propagation AAAA c2vts.fr.png|vignette|458x458px|Propagation AAAA|centré]]
 
 
[[Fichier:DNSSEC c2vts.fr.png|vignette|459x459px|DNSSEC|centré]]
 
== Fail2ban ==
J'installe <code>fail2ban</code> et pour bloquer les tentatives de connexion par SSH, dans <code>/etc/fail2ban/jail.local</code>:
<syntaxHighlight>
[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
findtime = 600
bantime  = 600
</syntaxHighlight>
 
Pour le DNS:
<syntaxHighlight>
[connect-refused]
enabled  = true
port    = domain
protocol = tcp
filter  = connect-refused
logpath  = /var/log/syslog
maxretry = 3
bantime  = 600
findtime = 600
</syntaxHighlight>
 
Je spécifie quel type de paquets vers mon DNS je veux bloquer dans <code>/etc/fail2ban/filter.d/connect-refused.conf</code>:
<syntaxHighlight>
[Definition]
failregex = .* client_ip=<HOST>.*(NXDOMAIN|SERVFAIL|REFUSED).*
ignoreregex =
</syntaxHighlight>
 
En redémarrant <code>fail2ban</code>, je peux voir l'état de mes règles avec <code>fail2ban-client status <NOM DE LA REGLE></code>:
[[Fichier:Fail2ban service c2.png|centré|vignette|425x425px|Etat du fail2ban]]
 
== HTTP ==
 
=== Apache2 ===
J'installe <code>Apache2</code> et j'active SSL avec <code>a2enmod ssl</code>.
 
Dans <code>/etc/apache2/ports.conf</code>:
<syntaxHighlight>
Listen 80
Listen 443
</syntaxHighlight>
 
=== Certificats SSL ===
J'ai généré mes certificats sur Gandi:
<code>c2vts.fr.crt c2vts.fr.key c2vts.fr.pem</code>
 
Mon fichier de configuration <code>/etc/apache2/sites-available/c2vts.fr.conf</code>:
<syntaxHighlight>
<VirtualHost *:80>
    ServerName c2vts.fr.
    ServerAlias www.c2vts.fr.
    Redirect permanent / https://c2vts.fr/
</VirtualHost>
 
<VirtualHost *:443>
    ServerName c2vts.fr.
    DocumentRoot /var/www/c2vts.fr
 
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/c2vts.fr.crt
    SSLCertificateKeyFile /etc/ssl/certs/c2vts.fr.key
    SSLCertificateChainFile /etc/ssl/certs/c2vts.fr.pem
    SSLVerifyClient None
 
    ProxyPass / https://c2vts.fr/
    ProxyPassReverse / https://c2vts.fr/
 
    <Directory /var/www/c2vts.fr>
          AllowOverride All
          Require all granted
    </Directory>
 
    ErrorLog ${APACHE_LOG_DIR}/c2vts.fr_error.log
    CustomLog ${APACHE_LOG_DIR}/c2vts.fr_access.log combined
 
</VirtualHost>
</syntaxHighlight>
 
== Effraction WiFi ==
 
=== WEP ===
J'utilise une clef Wi-Pi qui a pour nom d'interface <code>wlx40a5ef0125e9</code>
J'utilise une clef Wi-Pi qui a pour nom d'interface <code>wlx40a5ef0125e9</code>


Ligne 79 : Ligne 306 :
On écoute tout le traffic avec <code>airodump-ng wlx40a5ef0125e9</code> pour repérer le BSSID et le canal de diffusion du point d'accès à cracker, en l'occurence, <code>cracotte07</code> qui diffuse sur le canal 4 et son BSSID est <code>04:DA:D2:9C:50:56</code>.
On écoute tout le traffic avec <code>airodump-ng wlx40a5ef0125e9</code> pour repérer le BSSID et le canal de diffusion du point d'accès à cracker, en l'occurence, <code>cracotte07</code> qui diffuse sur le canal 4 et son BSSID est <code>04:DA:D2:9C:50:56</code>.


Ensuite on fait une fausse authentification pour s'associer au point, pour cela il suffit de faire <code></code>.
Ensuite on fait une fausse authentification pour s'associer au point, pour cela il suffit de faire <code>aireplay-ng --fakeauth 0 -a 04:DA:D2:9C:50:56 wlx40a5ef0125e9</code>.


On peut maintenant préparer l'injection ARP avec <code>aireplay-ng --arpreplay -b 04:DA:D2:9C:50:56 wlx40a5ef0125e9</code>
On peut maintenant préparer l'injection ARP avec <code>aireplay-ng --arpreplay -b 04:DA:D2:9C:50:56 wlx40a5ef0125e9</code>
Ligne 87 : Ligne 314 :
Enfin, on lance le crackage avec <code>aircrack-ng output.cap</code> et plus qu'à attendre la fin du décryptage.
Enfin, on lance le crackage avec <code>aircrack-ng output.cap</code> et plus qu'à attendre la fin du décryptage.


[[Fichier:Screenshot 2026-02-10 16-02-57.png|vignette|Clef WEP trouvée]]
[[Fichier:Screenshot 2026-02-10 16-02-57.png|vignette|Clef WEP trouvée|centré|567x567px]]
 
=== WPA ===
Pour la clef WPA, on récupère le BSSID et le canal du réseau <code>krakotte07</code> comme avec le WEP, puis on lance le airodump.
 
La différence avec le WEP c'est qu'ici, on déconnecte des utilisateurs jusqu'à obtenir notre handshake WPA.
 
Suite à ça, comme on sait que la clef est une succession de 8 chiffres, j'ai crée un dictionnaire avec toutes les combinaisons de 8 chiffres possible <code>dico</code> puis j'ai lancé un crack par force brute avec <code>aircrack-ng -w wpa/dico kracotte07-01.cap</code>
 
Après un certain temps, la clef est trouvée.
[[Fichier:Wpa2 it.png|vignette|Clef WPA trouvée|centré|784x784px]]

Version actuelle datée du 28 février 2026 à 01:49

Mettre en place les VMs

Création du pont:

Dans capbreton, dans /etc/network/interfaces on renseigne notre pont pontclio

auto pontclio
iface pontclio inet manual
  bridge_ports none
  up ip link set $IFACE up
  down ip link set $IFACE down

Création des VM:

Pour créer nos VM avec xen:

xen-create-image --hostname=SE4.C2 --dir=/usr/local/xen --dist=excalibur --size=10GB --memory=1024M --bridge=pontclio --dhcp

Ensuite créer les partitions var et home:

lvcreate -L10G -nSE4.C2.home virtual
lvcreate -L10G -nSE4.C2.var virtual

Les ajouter dans le fichier /etc/xen/SE4.C2:

'phy:/dev/virtual/SE4.C2-home,xvda3,w',
'phy:/dev/virtual/SE4.C2-var,xvdb1,w',

Pour monter le /home et /var:

mkfs -t ext4 /dev/xvdb1
mount /dev/xvdb1 /mnt
mv /var/* /mnt
umount /mnt
mount -a
mkfs -t ext4 /dev/xvda3
mount -a

Configuration des VM:

rajouter un vif dans le fichier de configuration de la VM: dans /etc/xen/SE4.C2.cfg :

vif         = [ 'mac=00:16:3E:D3:58:AD,bridge=pontclio', #vif qu'on avait déjà
                'mac=00:16:3E:D3:58:AE,bridge=SE4' ]     #vif ajouté

Ensuite dans la VM ajouter les interfaces dans /etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.0.3/24
        gateway 192.168.0.1

iface eth1 inet6 auto

Relancer la VM puis après un ifup on remarque que nos interfaces sont actives :

root@C2:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:16:3e:d3:58:ad brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:16:3e:d3:58:ae brd ff:ff:ff:ff:ff:ff

Connectivité à internet

Tout d'abord je renomme ma machine par C2

Dans ma machine de service, dans /etc/network/interfaces:

iface eth0 inet static
192.168.7.3
netmask 255.255.255.0
gateway 192.168.7.1

auto eth1
iface eth1 inet6 auto

Dans ma machine mandataire, toujours dans /etc/network/interfaces:

# The loopback network interface
auto lo
iface lo inet loopback

# Primary interface
auto eth0
iface eth0 inet static
    address 192.168.7.1/24

# Second interface
auto eth1
iface eth1 inet static
    address 193.48.57.170/27
    gateway 193.48.57.164

iface eth1 inet6 auto

Je peux ping la machine de mon binôme et google.

Ping vers mon binôme
Ping Ipv4
Ping Ipv6

SSH

Pour permettre la connexion via SSH, j'ai installé ssh et j'ai commenté la ligne PermitRootLogin dans /etc/ssh/sshd_config.

SSH vers ma machine

DNS

Tout d'abord j'installe bind9.

Fichiers de configuration:

Dans /etc/resolv.conf:

search c2vts.fr
nameserver 192.168.7.3
nameserver 192.168.7.2

nameserver 8.8.8.8

Dans le fichier /etc/bind/named.conf.local:

zone "c2vts.fr" {
    type primary;
    file "/etc/bind/zones/c2vts.zone";
    allow-transfer{secondaries;};
    also-notify{2001:660:4401:60a0:216:3eff:fee4:9c08;};
    key-directory "/etc/bind/keys";
};

acl "secondaries" {
    2001:660:4401:60a0:216:3eff:fed3:d693;
    2001:660:4401:60a0:216:3eff:fee4:9c08;
};

zone "rs7.online" {
    type secondary;
    file "/etc/bind/backup.c2vts.zone";
    primaries { 2001:660:4401:60a0:216:3eff:fed3:d693; };
};

Je crée un fichier de zone /etc/bind/zones/c2vts.zone:

$TTL 200
@       IN      SOA     ns.c2vts.fr. admin.c2vts.fr. (
        3610    ; Version
        21600   ; Refresh secondary    (6h)
        3600    ; Retry secondary      (1h)
        2592000 ; Expire if no refresh (30j)
        86400 ) ; Negative cache       (24h)

@        IN      NS      ns.c2vts.fr.
@        IN      NS      ns.rs7.online.

;Enregistrements A 
ns       IN     A     193.48.57.170 
@        IN     A     193.48.57.170

;Enregistrements AAAA
ns       IN     AAAA  2001:660:4401:60a0:216:3eff:fed3:58ae
@        IN     AAAA  2001:660:4401:60a0:216:3eff:fed3:58ae

;Enregistrements CNAME
www      IN     CNAME c2vts.fr.

Pour vérifier le fichier de zone: named-checkzone c2vts.zone

DNSSEC:

Pour activer le DNSSEC, il faut l'activer depuis Gandi et rajouter dans named.conf.local:

zone "c2vts.zone"{
...
dnssec-policy "dnspol";
inline-signing yes;
...
};

dnssec-policy "dnspol" {
    keys {
        ksk key-directory lifetime unlimited algorithm 13;
        zsk key-directory lifetime unlimited algorithm 13;
    };
    nsec3param;
};

Ne pas oublier de rendre propriétaire le dossierkeys pour que bind écrive les clés. chown bind:bind /etc/bind/keys

On relance bind avec service named restart

Propagation:

Propagation A
Propagation NS
Propagation AAAA


DNSSEC

Fail2ban

J'installe fail2ban et pour bloquer les tentatives de connexion par SSH, dans /etc/fail2ban/jail.local:

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
findtime = 600
bantime  = 600

Pour le DNS:

[connect-refused]
enabled  = true
port     = domain
protocol = tcp
filter   = connect-refused
logpath  = /var/log/syslog
maxretry = 3
bantime  = 600
findtime = 600

Je spécifie quel type de paquets vers mon DNS je veux bloquer dans /etc/fail2ban/filter.d/connect-refused.conf:

[Definition]
failregex = .* client_ip=<HOST>.*(NXDOMAIN|SERVFAIL|REFUSED).*
ignoreregex =

En redémarrant fail2ban, je peux voir l'état de mes règles avec fail2ban-client status <NOM DE LA REGLE>:

Etat du fail2ban

HTTP

Apache2

J'installe Apache2 et j'active SSL avec a2enmod ssl.

Dans /etc/apache2/ports.conf:

Listen 80
Listen 443

Certificats SSL

J'ai généré mes certificats sur Gandi: c2vts.fr.crt c2vts.fr.key c2vts.fr.pem

Mon fichier de configuration /etc/apache2/sites-available/c2vts.fr.conf:

<VirtualHost *:80>
     ServerName c2vts.fr.
     ServerAlias www.c2vts.fr.
     Redirect permanent / https://c2vts.fr/
</VirtualHost>

<VirtualHost *:443>
     ServerName c2vts.fr.
     DocumentRoot /var/www/c2vts.fr

     SSLEngine on
     SSLCertificateFile /etc/ssl/certs/c2vts.fr.crt
     SSLCertificateKeyFile /etc/ssl/certs/c2vts.fr.key
     SSLCertificateChainFile /etc/ssl/certs/c2vts.fr.pem
     SSLVerifyClient None

     ProxyPass / https://c2vts.fr/
     ProxyPassReverse / https://c2vts.fr/

     <Directory /var/www/c2vts.fr>
          AllowOverride All
          Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/c2vts.fr_error.log
     CustomLog ${APACHE_LOG_DIR}/c2vts.fr_access.log combined

</VirtualHost>

Effraction WiFi

WEP

J'utilise une clef Wi-Pi qui a pour nom d'interface wlx40a5ef0125e9

Pour cracker la clef WPA, on met tout d'abord la Wi-Pi en mode monitor avec airmon-ng start wlx40a5ef0125e9.

On écoute tout le traffic avec airodump-ng wlx40a5ef0125e9 pour repérer le BSSID et le canal de diffusion du point d'accès à cracker, en l'occurence, cracotte07 qui diffuse sur le canal 4 et son BSSID est 04:DA:D2:9C:50:56.

Ensuite on fait une fausse authentification pour s'associer au point, pour cela il suffit de faire aireplay-ng --fakeauth 0 -a 04:DA:D2:9C:50:56 wlx40a5ef0125e9.

On peut maintenant préparer l'injection ARP avec aireplay-ng --arpreplay -b 04:DA:D2:9C:50:56 wlx40a5ef0125e9

Pour récuperer un paquet ARP, on déconnecte un utilisateur pour le forcer à se reconnecter avec aireplay-ng --deauth 0 -a 04:DA:D2:9C:50:56 wlx40a5ef0125e9.

Enfin, on lance le crackage avec aircrack-ng output.cap et plus qu'à attendre la fin du décryptage.

Clef WEP trouvée

WPA

Pour la clef WPA, on récupère le BSSID et le canal du réseau krakotte07 comme avec le WEP, puis on lance le airodump.

La différence avec le WEP c'est qu'ici, on déconnecte des utilisateurs jusqu'à obtenir notre handshake WPA.

Suite à ça, comme on sait que la clef est une succession de 8 chiffres, j'ai crée un dictionnaire avec toutes les combinaisons de 8 chiffres possible dico puis j'ai lancé un crack par force brute avec aircrack-ng -w wpa/dico kracotte07-01.cap

Après un certain temps, la clef est trouvée.

Clef WPA trouvée