
CVE-2025-22783 का PoC
वर्डप्रेस प्लगइन
घटक नाम SEO Plugin by Squirrly SEO
असुरक्षित संस्करण <= 12.4.01
घटक स्लग squirrly-seo
घटक लिंक https://wordpress.org/plugins/squirrly-seo/
असुरक्षा वर्ग A3: इंजेक्शन
असुरक्षा प्रकार SQL इंजेक्शन
योगदानकर्ता +
Squirrly SEO द्वारा SEO प्लगइन आपको एक आंतरिक लिंकिंग सुविधा के माध्यम से अपनी वेबसाइट के SEO को बेहतर बनाने की अनुमति देता है जो आपको विशिष्ट कीवर्ड के आधार पर स्रोत और लक्ष्य पृष्ठों का चयन करने देता है। आप आंतरिक लिंक प्रबंधन पृष्ठ (/wp-admin/admin.php?page=sq_focuspages&tab=innerlinks) के माध्यम से प्रत्येक लिंक के कीवर्ड, स्रोत पृष्ठ, लक्ष्य पृष्ठ और स्थिति का प्रबंधन कर सकते हैं।
Squirrly SEO प्लगइन के संस्करण 12.4.01 और उससे नीचे में, आप आंतरिक लिंक प्रबंधन पृष्ठ पर बनाए गए आंतरिक लिंक खोज सकते हैं। एक SQL इंजेक्शन कमजोरी तब होती है जब उपयोगकर्ताओं (योगदानकर्ता+) द्वारा दर्ज किए गए खोज शब्द बिना सत्यापन के डेटाबेस क्वेरी में पास कर दिए जाते हैं।
जबकि खोज परिणाम सीधे आंतरिक लिंक प्रबंधन पृष्ठ पर प्रदर्शित नहीं होते हैं, SLEEP फ़ंक्शन जैसी समय-आधारित SQL इंजेक्शन तकनीकों का उपयोग करके डेटाबेस जानकारी निकाली जा सकती है।
लक्ष्य साइट पर योगदानकर्ता या उच्च विशेषाधिकार वाले खाते से लॉग इन करें जहाँ Squirrly SEO प्लगइन संस्करण 12.4.01 या उससे कम स्थापित है।
फिर, जब आप नीचे दिए गए URL तक पहुँचते हैं, तो चूँकि SQL इंजेक्शन पेलोड में IF स्टेटमेंट की स्थिति '1=1' हमेशा सत्य होती है, SLEEP(5) फ़ंक्शन निष्पादित होगा और पृष्ठ 5 सेकंड के बाद लोड होगा।
http://localhost:8080/wp-admin/admin.php?page=sq_focuspages&tab=innerlinks&stype&squery='+AND+1%3D2)+UNION+SELECT+(IF(1=1,SLEEP(5),1)),2,3,4,5,6,7%23
दूसरी ओर, यदि आप IF स्टेटमेंट की स्थिति को '1=2' में बदलते हैं, तो परिणाम मान गलत होने के कारण पृष्ठ तुरंत लोड हो जाएगा।
http://localhost:8080/wp-admin/admin.php?page=sq_focuspages&tab=innerlinks&stype&squery='+AND+1%3D2)+UNION+SELECT+(IF(1=2,SLEEP(5),1)),2,3,4,5,6,7%23
Squirrly SEO प्लगइन के आंतरिक लिंक प्रबंधन पृष्ठ (/wp-admin/admin.php?page=sq_focuspages&tab=innerlinks) पर, आंतरिक लिंक खोजते समय, यह /wp-content/plugins/squirrly-seo/models/Qss.php फ़ाइल में getSqInnerlinks फ़ंक्शन को कॉल करके डेटाबेस से क्वेरी करता है।

इस बिंदु पर, हम देख सकते हैं कि वेरिएबल $query_where सीधे SQL क्वेरी में डाला जाता है। आइए देखें कि वेरिएबल $query_where का मान कैसे बनाया जाता है:
$search में आंतरिक लिंक खोज के दौरान दर्ज किया गया खोज शब्द होता है, और उपयोगकर्ता इनपुट डेटा को संसाधित करने के लिए sanitize_text_field फ़ंक्शन का उपयोग किया जाता है।$search का उपयोग शर्त खंड के भाग के रूप में किया जाता है और वेरिएबल $query_where में संग्रहीत किया जाता है।$query_where में अतिरिक्त शर्तें जोड़ी जाती हैं, और apply_filters फ़ंक्शन के माध्यम से फ़िल्टर लागू किए जाते हैं।इसलिए, जबकि आंतरिक लिंक खोज के दौरान उपयोगकर्ताओं द्वारा दर्ज किया गया खोज शब्द sanitize_text_field फ़ंक्शन द्वारा संसाधित किया जाता है, यह फ़ंक्शन SQL इंजेक्शन हमलों को नहीं रोक सकता है। SQL क्वेरी में उपयोग किए जाने वाले विशेष वर्ण (एकल उद्धरण ('), टिप्पणियाँ (#), आदि) फ़िल्टर नहीं होते हैं, और जब SQL इंजेक्शन पेलोड वाला वेरिएबल $search उचित एस्केपिंग के बिना डेटाबेस क्वेरी में पास हो जाता है, तो SQL इंजेक्शन कमजोरी उत्पन्न होती है।
⚠️ कार्यान्वित PoC कोड कमजोरी पुनरुत्पादन के लिए आवश्यक न्यूनतम विशेषाधिकार (योगदानकर्ता+) वाला खाता बनाने के लिए एक व्यवस्थापक खाते से लॉग इन करता है, और फिर उस खाते का उपयोग करके कमजोरी को ट्रिगर करता है।

इसके बाद, PoC कोड चलाने के लिए निम्न कमांड दर्ज करें।
आवश्यक मॉड्यूलrequests
python poc.py
