vic_npc

Python – Ataque de Deserialización Yaml (DES-Yaml)

Jun 28th, 2023
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.21 KB | Cybersecurity | 0 0
  1. # Importa las librerías necesarias
  2. from flask import Flask, render_template, redirect
  3. import yaml
  4. import base64
  5.  
  6. # Crea una instancia de la aplicación Flask. La aplicación buscará plantillas HTML en una carpeta llamada 'templates'
  7. # y archivos estáticos (como CSS y JavaScript) en una carpeta llamada 'static'.
  8. app = Flask(__name__, static_url_path='/static', static_folder='static')
  9.  
  10. # Habilita el modo de depuración para la aplicación Flask. Esto proporcionará más información en caso de que ocurra un error.
  11. app.config['DEBUG'] = True
  12.  
  13. # Define la ruta principal ("/") de la aplicación. Cuando un cliente solicite esta ruta, la aplicación redirigirá
  14. # al cliente a otra ruta con un código 302, que indica una redirección temporal.
  15. @app.route("/")
  16. def start():
  17.     return redirect("/information/eWFtbDogVGhlIGluZm9ybWF0aW9uIHBhZ2UgaXMgc3RpbGwgdW5kZXIgY29uc3RydWN0aW9uLCB1cGRhdGVzIGNvbWluZyBzb29uIQ==", code=302)
  18.  
  19. # Define una ruta que acepta una entrada como parte de la URL.
  20. # Este bloque intentará decodificar la entrada como un objeto serializado en base64, y luego deserializarlo usando YAML.
  21. @app.route("/information/<input>", methods=['GET'])
  22. def deserialization(input):
  23.     try:
  24.         # Si no hay ninguna entrada, se renderea la plantilla por defecto
  25.         if not input:
  26.             return render_template("information/index.html")
  27.        
  28.         # Decodifica la entrada de base64
  29.         yaml_file = base64.b64decode(input)
  30.  
  31.         # Intenta cargar el contenido YAML
  32.         content = yaml.load(yaml_file, Loader=yaml.FullLoader)
  33.     except:
  34.         # En caso de un error durante la decodificación o deserialización, se muestra un mensaje de error.
  35.         content = "The application was unable to deserialize the object!"
  36.        
  37.     # Renderiza la plantilla con el contenido deserializado
  38.     return render_template("index.html", content=content['yaml'])
  39.  
  40. # Define una página de error personalizada para el error 404 (No encontrado).
  41. @app.errorhandler(404)
  42. def page_not_found(e):
  43.     return render_template("404.html")
  44.  
  45. # Si este script se está ejecutando como el archivo principal, arranca la aplicación Flask.
  46. if __name__ == "__main__":
  47.     app.run(host='0.0.0.0')
  48.  
Add Comment
Please, Sign In to add comment