
CVE-2025-22652 का PoC
WordPress प्लगिन
Component name Payment Forms for Paystack
Vulnerable version <= 4.0.1
Component slug payment-forms-for-paystack
Component link https://wordpress.org/plugins/payment-forms-for-paystack/
Vulnerability class A3: इंजेक्शन
Vulnerability type SQL इंजेक्शन
व्यवस्थापक
Payment Forms for Paystack प्लगिन के संस्करण 4.0.1 और उससे नीचे में, भुगतान फ़ॉर्म में भुगतान सूची देखते समय URL पैरामीटर order के लिए अपर्याप्त इनपुट सत्यापन और एस्केप प्रोसेसिंग के कारण एक SQL इंजेक्शन भेद्यता मौजूद है। इसके माध्यम से, व्यवस्थापक विशेषाधिकारों वाला एक हमलावर लक्ष्य साइट के डेटाबेस से सभी जानकारी निकाल सकता है।
हालाँकि यह भेद्यता सीधे डेटा क्वेरी करने की अनुमति नहीं देती है, फिर भी Time-based SQL इंजेक्शन तकनीकों का उपयोग करके डेटा निकाला जा सकता है।
एक WordPress साइट तैयार करें जिसमें Payment Forms for Paystack प्लगिन संस्करण 4.0.1 या उससे नीचे स्थापित हो।
चूंकि लुकअप करने के लिए आपको एक Paystack फ़ॉर्म जोड़ने की आवश्यकता है, इसलिए Paystack फ़ॉर्म जोड़ें मेनू (wp-admin/post-new.php?post_type=paystack_form) से एक फ़ॉर्म जोड़ें।

फ़ॉर्म जोड़ने के बाद, आप ShortCode देख सकते हैं, और नीचे दिए गए URL में URL पैरामीटर form में उस ShortCode की attribute ID डालने के बाद उसे एक्सेस करें।
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<Insertion Point>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1)
उदाहरण के लिए, यदि [pff-paystack id="13"] है, तो http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1) एक्सेस करें।

परिणामस्वरूप, URL पैरामीटर order में डाले गए SQL इंजेक्शन पेलोड में where 1=1 शर्त खंड हमेशा सत्य होने के कारण, आप पुष्टि कर सकते हैं कि फ़ंक्शन निष्पादित होता है और प्रतिक्रिया 5 सेकंड बाद आती है।
जब भेद्यता वाले URL का अनुरोध किया जाता है, तो फ़ाइल /wp-content/plugins/payment-forms-for-paystack/includes/classes/class-helpers.php में get_payments_by_id फ़ंक्शन कॉल किया जाता है।
इस बिंदु पर, URL पैरामीटर order को बिना किसी इनपुट सत्यापन या एस्केप प्रोसेसिंग के सीधे SQL क्वेरी में डाला जाता है और डेटाबेस पर निष्पादित किया जाता है।
इसलिए, जब SQL इंजेक्शन पेलोड , (select sleep(5) from dual where 1=1) को URL पैरामीटर order में डाला जाता है, तो नीचे दिखाई गई SQL क्वेरी निष्पादित होती है। इस बिंदु पर, पेलोड में शर्त खंड सत्य या असत्य होने के आधार पर, प्रतिक्रिया समय में अंतर होता है, और इस समय अंतर का उपयोग डेटाबेस से डेटा निकालने के लिए किया जा सकता है।
SELECT * FROM %i WHERE post_id = %d AND paid = %s ORDER BY %i , (select sleep(5) from dual where 1=1)
PoC कोड को किसी एडिटर में खोलें और WordPress साइट का पता और व्यवस्थापक क्रेडेंशियल दर्ज करें।

Required modulerequests
python poc.py

sleep(5)
दूसरी ओर, यदि आप order में डाले गए SQL इंजेक्शन पेलोड में शर्त खंड को where 1=2 में बदलते हैं, तो आप पुष्टि कर सकते हैं कि प्रतिक्रिया तुरंत आती है।
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<Insertion Point>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2)
उदाहरण के लिए, यदि [pff-paystack id="13"] है, तो http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2) एक्सेस करें।
