Security Web
2021/2022
[Link]
TP4 SQL & BoF & ToR
Exercise 1 (SQL Injection (6 points))
L’objectif est de trouver des attaques SQL à la main dans un premier temps sur une base
de données et dans un second temps de se servir des outils SQLMAP1 , JohnTheRipper2 et
HashCat3 pour hacker une autre base de données.
Mettre dans votre la varaible PATH a jour avec
PATH="$PATH:/home/prof/gudavala/bin"
PATH="$PATH:/home/prof/vdn/vdn/bin"
En mode grahique avec X2GO ou Guacamaol Connectez-vous à l’IUT avec https://
[Link]/#/ ou avec X2GO. Puis tapez ssh -X localhost. Pour
partager votre écran avec l’enseignant faire iut-vnc -a palafour
En mode texte Se connecter en ssh à l’IUT sur [Link], puis scanner
les machines allumées avec iut-scan et vous connecter en ssh à l’une d’entre elles. Pour
partager votre écran avec l’enseignant faire iut-tmux -a palafour
VDN Configuration Faire wget [Link]
Puis lancer vdn-start-secure-1
Récupérer le fichier
wget [Link]
Puis lancer dans un autre terminal le script baseConfigSecure-1 avec la commande
vdn-scripts $PWD/[Link]
cette commande prend un peu de temps.
Puis se connecter à la machine debian-1 il faut faire vdn-ssh root@debian-1
Docker Dans VDN en étant root télécharger le fichier suivant avec un wget :
[Link]
Pour lancer docker aller dans le répertoire SQLIA et faites docker-compose up ce qui va
lancee le site [Link]
Désactiver le proxy :
unset http_proxy
unset https_proxy
Pour le remettre il faut faire une fois l’exercice fini :
1
[Link]
2
[Link]
3
[Link]
1
export http_proxy=[Link]
export https_proxy=[Link]
Et tester que le site est accessible.
links [Link] pour tester en ligne de commande.
ou curl [Link]
Une fois docker quitté il faut faire docker-compose down --volumes pour arrêter pro-
prement le système.
1. Aller sur la page level0 et monter une attaque par SQL injection sur le site [Link]
pour se connecter comme user et comme admin. Sachant que la requête à la base de
données est :
SELECT * FROM users
WHERE ‘email‘ = ’" . $email . "’ AND ‘password‘ = ’" . $password . "’";
Et quel si le nombre de résultats de la requête est 1 alors l’utilisateur choisi peut se
connecter.
2. Installer SQLMAP en faisant un git clone de :
[Link] --depth=1 --single-branch --branch 1.5.9
Aller sur la page level1 et utiliser l’outil SQLMAP avec les options --data et ensuite
--dump (cette deuxième option est lente mais très efficace). Pour récuperer la totalité
de la BD.
Une fois le contenu de la BD obtenu, utiliser le dictionnaire [Link] extrait
de la base de donnés [Link] avec le logciel
JohnTheRipper ou Hashcat pour retoruver les mots de passe des deux utilisateurs de
ce niveau.
Remarque pour effeacer les résultats de sqlmap il faut faire sqlmap --purge.
Exercise 2 (BoF (4 points))
Compiler le code à l’IUT saisi dans un fichier file.c avec la commande gcc file.c
Ensuite exécuter le en tapant par exemple : ./[Link] 3
Question : Comment modifier la variable qui vaut 0, seulement en executant le programme
avec la bonne valeur? Expliquer votre raisonnement et votre approche.
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int modified;
char buffer[64];
2
modified = 0;
gets(buffer);
if(modified != 0) {
printf("you have changed the ’modified’ variable\n");
} else {
printf("Try again?\n");
}
return 0;
}
Exercise 3 (Side Channel (3 points))
Le fonction checkpassword en Python3 permet de tester si un mot de passe correspond au
mot de passe secret entré par l’utilisateur.
global password
def checkpassword(l):
for i in range(len(password)):
[Link](1)
if password[i]!= l[i]:
return(False)
return(True)
password=input("L’ordi va deviner votre code PIN de chiffres entre 0 et 9 de longeur 6 : ")
Coder un programme qui en moins de trois minutes permet à l’ordinateur de retrouver
le mot de passe saisi par l’utilisateur, sachant que le programme peut utiliser la fonction
checkpassword ci-dessus, bien entendu sans acceéder à la variable password.
Exercise 4 (ToR (3 points))
Une adresse IP donne beaucoup d’informations sur la localisation de l’utilisateur. Elle permet
aux sites web d’adapter la langue ou de vous rediriger vers un un serveur plus proche, mais
elle peut aussi être utilisée pour pister l’internaute. Pour protéger notre anonymat, nous
pouvons utiliser le navigateur web Tor.
1. Installer Tor browser sur votre ordinateur. [Link]
2. Allez sur un site web de votre choix avec Tor et avec un autre navigateur web (Firefox
ou Chromium par exemple). Que remarquez-vous ? Expliquez pourquoi.
3. Dans Tor, aller [Link] Page et cliquez sur le cadenas vert.
Vous pouvez voir le circuit utilisé par le navigateur web pour vous connecter au site
web. Comparez le circuit que vous avez utilisé avec le circuit utilisé par un autre groupe.
Que remarquez-vous ?
4. Dans Firefox (ou Chromium) aller : [Link] Allez sur le même site
Web avec le navigateur Tor. Que remarquez-vous ?
3
Maintenant, nous voulons accéder au Deep Web pour lire un article intéressant sur ”Com-
ment sortir de la matrice ? article sur ”Comment sortir de la matrice ?” (“How to Exit the
Matrix?”).
6. Dans Firefox, allez sur [Link] Ce site site Web référence les liens
dans .onion.
7. Toujours dans Firefox, cliquez sur le lien correspondant à “The Wiki caché”. Expliquez
pourquoi vous ne pouvez pas accéder à ce site Web à partir de Firefox.
8. Dans le navigateur web Tor, copiez le lien .onion du wiki caché. Vous remarquez
maintenant que vous pouvez accéder au wiki : vous vous êtes sur le Web profond
(OMG !).
9. Sur le wiki caché, vous pouvez cliquer sur le numéro 1 “The Matrix” dans la partie
”Choix des éditeurs”.
Exercise 5 (BoF le retour (4 points))
Compiler le code à l’IUT et déterminer quelle valeur peremet d’afficher “you have correctly
got the variable to the right value”? Expliquer votre raisonnement et votre approche.
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
if(argc == 1) {
printf("please specify an argument\n");
return 1;
}
modified = 0;
strcpy(buffer, argv[1]);
if(modified == 0x61626364) {
printf("you have correctly got the variable to the right value\n");
} else {
printf("Try again, you got %d\n", modified);
}
}