
Demonstra um ataque de padding oracle contra a criptografia AES-CBC usando um endpoint de descriptografia Flask vulnerável e um script de exploit em Python para descriptografar texto cifrado arbitrário sem a chave.
# 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)
Um aplicativo web descriptografa dados usando AES‑CBC e revela se o padding é válido. Um atacante pode enviar textos cifrados modificados e, com base nas respostas de erro do servidor, descriptografar ou criptografar iterativamente dados arbitrários sem conhecer a chave.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
A detecção do oráculo confirma a vulnerabilidade; a exploração completa usa ferramentas como padbuster.