
Demonstriert einen Padding-Oracle-Angriff auf die AES-CBC-Verschlüsselung unter Verwendung eines verwundbaren Flask-Entschlüsselungs-Endpoints und eines Python-Exploit-Skripts, um beliebigen Chiffretext ohne den Schlüssel zu entschlüsseln.
# 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)
Eine Webanwendung entschlüsselt Daten mit AES‑CBC und gibt preis, ob das Padding gültig ist. Ein Angreifer kann modifizierte Chiffretexte übermitteln und anhand der Fehlerantworten des Servers iterativ beliebige Daten entschlüsseln oder verschlüsseln, ohne den Schlüssel zu kennen.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
Die Orakel-Erkennung bestätigt die Schwachstelle; die vollständige Ausnutzung erfolgt mit Werkzeugen wie padbuster.