
Demuestra un ataque de oráculo de relleno contra el cifrado AES-CBC utilizando un endpoint vulnerable de descifrado en Flask y un script de explotación en Python para descifrar texto cifrado arbitrario sin la clave.
# padding_oracle_server.py - Server that returns padding error
from flask import Flask, request
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os
key = os.urandom(16)
app = Flask(__name__)
@app.route('/decrypt', methods=['POST'])
def decrypt():
ct = bytes.fromhex(request.form['ciphertext'])
cipher = AES.new(key, AES.MODE_CBC, iv=ct[:16])
try:
pt = unpad(cipher.decrypt(ct[16:]), 16)
return "OK"
except ValueError:
return "Padding error", 400
if __name__ == '__main__':
app.run(port=5000)
Una aplicación web descifra datos mediante AES‑CBC y revela si el padding es válido. Un atacante puede enviar textos cifrados modificados y, basándose en las respuestas de error del servidor, descifrar o cifrar de forma iterativa datos arbitrarios sin conocer la clave.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
La detección del oráculo confirma la vulnerabilidad; la explotación completa utiliza herramientas como padbuster.