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