
Démontre une attaque par oracle de padding contre le chiffrement AES-CBC à l'aide d'un point de terminaison Flask vulnérable et d'un script d'exploitation Python pour déchiffrer un texte chiffré arbitraire sans la clé.
# 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)
Une application web déchiffre des données avec AES‑CBC et révèle si le padding est valide. Un attaquant peut soumettre des textes chiffrés modifiés et, sur la base des réponses d'erreur du serveur, déchiffrer ou chiffrer de manière itérative des données arbitraires sans connaître la clé.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
La détection de l'oracle confirme la vulnérabilité; l'exploitation complète utilise des outils comme padbuster.