
Демонстрирует атаку padding oracle против шифрования AES-CBC с использованием уязвимой конечной точки дешифрования Flask и Python-скрипта эксплойта для дешифрования произвольного шифротекста без ключа.
# 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)
Веб-приложение расшифровывает данные с помощью AES‑CBC и раскрывает, является ли набивка допустимой. Злоумышленник может отправлять изменённые шифртексты и, основываясь на ответах сервера об ошибках, итеративно расшифровывать или шифровать произвольные данные, не зная ключа.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
Обнаружение оракула подтверждает уязвимость; полная эксплуатация использует такие инструменты, как padbuster.