
# 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)
WebアプリケーションがAES‑CBCを使用してデータを復号し、パディングが有効かどうかを漏洩します。攻撃者は改変した暗号文を送信し、サーバーのエラーレスポンスに基づいて、鍵を知らなくても任意のデータを反復的に復号または暗号化できます。
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
オラクルの検出により脆弱性が確認されます。完全なエクスプロイトには、padbusterのようなツールが使用されます。