
PoC لـ "DEF CON 32 - حقن SQL ليس ميتًا: تهريب الاستعلامات على مستوى البروتوكول - Paul Gerste"
تطبيق ويب بسيط مع وظيفة تسجيل الدخول. يمكن للمسؤولين فقط تسجيل الدخول.
يستخدم هذا التطبيق PostgreSQL و pgx v5.5.3 (إصدار قابل للاستغلال).
يحاول المهاجم تسجيل الدخول عن طريق إدراج سجلات خبيثة في جدول المستخدمين. ومع ذلك، نظرًا لاستخدام العناصر النائبة، فإن حقن SQL التقليدي لا يعمل.
PostgreSQL Message Formats: https://www.postgresql.org/docs/17/protocol-message-formats.html
يعتمد الاستغلال على تنسيق الرسالة الذي يرسله pgx إلى خادم قاعدة البيانات عند تنفيذ SQL.
بشكل افتراضي، يرسل pgx عبارة مُجهزة مع P(Parse) ثم يرسل المعاملات مع B(Bind).
إذا تم تعيين التكوين التالي، يرسل pgx الاستعلام المُدرج مع Q(Query):
cfg.ConnConfig.DefaultQueryExecMode = pgx.QueryExecModeSimpleProtocol
يمكنك عرض الرسائل الفعلية باستخدام tcpdump مع خيار -X.
Q_simple.py: يسبب تجاوزًا مع Q(Query). يفترض أن المهاجم لديه معرفة كاملة بالاستعلام الجاري تنفيذه (إذا كان الصندوق أسود، فالتخمين القسري مطلوب).Q_nop_sled.py: يسبب تجاوزًا مع Q(Query). ينجح في الاستغلال خلال 5 محاولات.B_simple.py: يسبب تجاوزًا مع B(Bind). يفترض أن المهاجم لديه معرفة كاملة بالاستعلام الجاري تنفيذه (في رأيي، استغلال B(Bind) صعب في سيناريوهات الصندوق الأسود).