
Dimostra un attacco padding oracle contro la crittografia AES-CBC utilizzando un endpoint di decrittazione Flask vulnerabile e uno script di exploit Python per decrittare testo cifrato arbitrario senza la chiave.
# 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)
Un'applicazione web decripta i dati utilizzando AES‑CBC e rivela se il padding è valido. Un attaccante può inviare testi cifrati modificati e, in base alle risposte di errore del server, decriptare o cifrare iterativamente dati arbitrari senza conoscere la chiave.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
La rilevazione dell'oracolo conferma la vulnerabilità; lo sfruttamento completo utilizza strumenti come padbuster.