Vous êtes sur la page 1sur 3

Security Web

2023/2024

P.Lafourcade, G.Marcadet, M.Puys


TP3 SQL & BoF

Avant de commencer, assuez-vous d’avoir sur vdn, le réseau secure. Si ce n’est pas la
cas, comme pour le TP précédent, entrez la commande suivante sur votre machine (pas dans
vdn):

rm -f ~/.vdnrc && vdn-set-network-dir ~/vdn/vdn/networks/secure

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.
Dans VDN en étant root télécharger le fichier suivant avec:

wget https://sancy.iut.uca.fr/~lafourcade/SECWEB/SQLIA.tar

Pour lancer docker aller dans le répertoire SQLIA et faites docker-compose up ce qui va lancee
le site http://172.19.19.19:8080/.

Désactiver le proxy: Vérifier que le proxy soit coupé, car il bloque une partie des requêtes
en HTTP. Il faut au préalable désactiver le proxy via la commande suivante:

unset http_proxy && unset https_proxy

Une fois l’exercice terminé, il faut remettre le proxy à l’aide de la commande suivante:

export http_proxy=http://192.168.128.139:8080
export https_proxy=http://192.168.128.139:8080

Tester que le site est accessible avec links http://172.19.19.19:8080 en ligne de com-
mande, ou bien curl http://172.19.19.19:8080/ Une fois docker quitté il faut faire
docker-compose down --volumes pour arrêter proprement le système.

1. Aller sur la page level0 et monter une attaque par SQL injection sur le site myblog.com
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 . "’";

Quand le nombre de résultats de la requête est 1 alors l’utilisateur choisi peut se con-
necter.
1
https://sqlmap.org/
2
https://www.openwall.com/john/
3
https://hashcat.net/wiki/doku.php?id=example_hashes

1
2. Installer SQLMAP en faisant un git clone de :

https://github.com/sqlmapproject/sqlmap.git --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 rockyou.txt disponible à

https://perso.limos.fr/~gamarcadet/enseignement/websec23/rockyou.txt.tar.gz

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 : ./a.out
Et en saisissant votre chaı̂ne de caractères sur la prochaine ligne.
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];

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 (5 points))


Le fonction checkpassword en Python3 permet de tester si un mot de passe correspond au
mot de passe secret entré par l’utilisateur.

2
global password

def checkpassword(l):
for i in range(len(password)):
time.sleep(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 (BoF le retour (5 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);
}
}

Vous aimerez peut-être aussi