Skip to content
Snippets Groups Projects
Select Git revision
  • b3b6571eec4d1962b8a728f9b20019594d0f729f
  • main default protected
2 results

admin-bundle.js

Blame
  • server_xss.py 2.15 KiB
    #!/usr/bin/env python3
    
    import mysql.connector
    import cherrypy
    import config
    import re
    
    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)
                #https://realpython.com/prevent-python-sql-injection/
                postChaine = post["chaine"]
                x = re.search("^[a-zA-Z0-9]+$", postChaine)
    
                if x:
                    cursor.execute("INSERT INTO chaines (txt,who) VALUES(%s, %s)", (postChaine, cherrypy.request.remote.ip))
                    self.conn.commit()
                else:
                    cursor.close()
                    return "Error 400, bad query\n"
                
    
            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())