
"DEF CON 32 - SQL Injection Isn't Dead Smuggling Queries at the Protocol Level - Paul Gerste" का PoC
लॉगिन कार्यक्षमता वाला एक सरल वेब एप्लिकेशन। केवल प्रशासक ही लॉगिन कर सकते हैं।
यह एप्लिकेशन PostgreSQL और pgx v5.5.3 (कमजोर संस्करण) का उपयोग करता है।
हमलावर दुर्भावनापूर्वक users तालिका में रिकॉर्ड डालकर लॉगिन करने का प्रयास करता है। हालाँकि, चूंकि प्लेसहोल्डर का उपयोग किया जाता है, पारंपरिक SQL इंजेक्शन काम नहीं करता है।
PostgreSQL संदेश प्रारूप: 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
आप -X विकल्प के साथ tcpdump का उपयोग करके वास्तविक संदेश देख सकते हैं।
Q_simple.py: Q(Query) के साथ ओवरफ्लो का कारण बनता है। मानता है कि हमलावर को निष्पादित होने वाली क्वेरी का पूरा ज्ञान है (यदि ब्लैक-बॉक्स है, तो ब्रूटफोर्स आवश्यक है)।Q_nop_sled.py: Q(Query) के साथ ओवरफ्लो का कारण बनता है। 5 प्रयासों में एक्सप्लॉइट सफल होता है।B_simple.py: B(Bind) के साथ ओवरफ्लो का कारण बनता है। मानता है कि हमलावर को निष्पादित होने वाली क्वेरी का पूरा ज्ञान है (मेरी राय में, ब्लैक-बॉक्स परिदृश्यों में B(Bind) एक्सप्लॉइट करना मुश्किल है)।