
يوضح هجوم 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 ويُسرّب ما إذا كانت الحشوة (padding) صالحة أم لا. يمكن للمهاجم إرسال نصوص مشفّرة معدّلة، وبناءً على استجابات الأخطاء من الخادم، فك تشفير أو تشفير بيانات عشوائية بشكل تكرارّي دون معرفة المفتاح.
pip install flask pycryptodome
python padding_oracle_server.py
python exploit_padding_oracle.py
يؤكّد اكتشاف الوسيط (oracle) وجود الثغرة؛ ويستخدم الاستغلال الكامل أدوات مثل padbuster.