
व्यवहार-प्रथम WordPress CVE-2026-64638 स्कैनर जो हानिरहित लॉगिन प्रोब का उपयोग करता है; सैनिटाइज़र व्यवहार को वर्गीकृत करता है और अधिकृत उपयोग के लिए केवल-अलर्ट PoC उत्पन्न करता है।
WordPress प्री-ऑथ XSS-से-RCE श्रृंखला के लिए व्यवहार-प्रथम मास स्कैनर और साक्ष्य-ग्रेड PoC जनरेटर, जो 500M+ वेबसाइटों को प्रभावित करती है।
केवल पहचान। कोई हथियारीकरण नहीं। बग बाउंटी कार्यक्रमों और ब्लू टीमों के लिए निर्मित।
यह क्या है? • त्वरित आरंभ • Shodan Dorks • उपयोग • निर्णय मैट्रिक्स • पहचान • FAQ
स्कैन करने से पहले इंटरनेट पर संभावित रूप से कमजोर WordPress इंस्टेंस खोजें:
http.component:"wordpress" -http.title:"Just a moment"
उन WordPress साइटों को ढूंढता है, जबकि Cloudflare की "I'm Under Attack" मोड / बॉट-सुरक्षा पेजों को बाहर करता है जो स्वचालित अनुरोधों को ब्लॉक या चुनौती देंगी।
http.component:"wordpress" http.title:"Log In"
केवल WordPress लॉगिन पेज लौटाता है — CVE-2026-64638 के लिए सटीक हमला सतह।
http.component:"wordpress" "wp-content" "?ver=7.0" -"?ver=7.0.3"
एसेट संस्करण फिंगरप्रिंटिंग द्वारा 7.0.3 पैच के बिना WordPress 7.0.x इंस्टेंस को चिह्नित करता है।
http.component:"wordpress" http.html:"wp-login.php"
उन साइटों को पकड़ता है जहां wp-login.php सुलभ है लेकिन वर्तमान पेज नहीं हो सकता — व्यापक कवरेज।
http.component:"wordpress" -http.title:"Just a moment" -http.title:"Attention Required" -org:"Cloudflare"
आक्रामक फ़िल्टर जो अधिकांश Cloudflare-समर्थित लक्ष्यों को हटा देता है। --active के साथ बड़े पैमाने पर स्कैन करते समय उपयोग करें — Cloudflare प्रोब अनुरोध को रेट-लिमिट या ब्लॉक कर देगा।
सुझाव:
shodan downloadके साथ Shodan परिणाम निर्यात करें और होस्टनामों को सीधेxss2shell_mass.py -iमें पाइप करें।
7 अगस्त, 2026 को, pwn.ai ने CVE-2026-64638 (XSS2Shell) का खुलासा किया — WordPress Core में एक क्रिटिकल प्री-ऑथेंटिकेशन क्रॉस-साइट स्क्रिप्टिंग भेद्यता जो सर्वर पर रिमोट कोड निष्पादन तक पूरी श्रृंखला बनाती है। [citation:pwn.ai blog]
यह बग PHP के strip_tags() और WordPress के wp_kses_post() के बीच पार्सर असहमति का फायदा उठाता है:
strip_tags() HTML टैग्स की पहचान के लिए < के तुरंत बाद आने वाले अक्षर का उपयोग करता है। < area id=...> (स्पेस के साथ) को पाठ माना जाता है — यह बच जाता है।wp_kses_post() (KSES) < area को एक मान्य <area> तत्व के रूप में पहचानता है — और <area> KSES में अनुमत-सूचीबद्ध है। [citation:pwn.ai blog]विशेष रूप से तैयार किए गए उपयोगकर्ता नाम < area id=ajaxurl href=/?rest_route=/&_method=GET&_jsonp=alert>... के साथ एक असफल लॉगिन दोनों सैनिटाइज़र को बायपास करता है, लॉगिन पेज पर लाइव DOM के रूप में रेंडर होता है, DOM क्लोबरिंग के माध्यम से WordPress के स्वयं के user-profile.js स्क्रिप्ट को हाईजैक करता है, और WordPress ओरिजिन में alert() फायर करता है — शून्य क्लिक, शून्य ऑथेंटिकेशन, शून्य कुकीज़ आवश्यक। [citation:pwn.ai blog]
लॉग-इन व्यवस्थापक तक बढ़ा दिया गया? वही प्रिमिटिव Same Origin Method Execution (SOME) के माध्यम से एप्लिकेशन पासवर्ड चुराता है, एक दुर्भावनापूर्ण प्लगइन अपलोड करता है, और www-data के रूप में PHP निष्पादित करता है। [citation:pwn.ai blog] [citation:hadrian.io blog]
प्रभावित: WordPress 6.4 से 7.0.2 तक — 7.0.3 में पैच किया गया, 4.7+ तक बैकपोर्ट के साथ।
प्रभाव: खुलासे के समय ~500 मिलियन वेबसाइटें। [citation:pwn.ai blog]
यह एक केवल-पहचान टूलकिट है। यह भेद्यता को हथियार नहीं बनाता — यह सुरक्षा शोधकर्ताओं, बग बाउंटी शिकारियों और ब्लू टीमों को निम्न के लिए आवश्यक सब कुछ देता है:
"एक संस्करण स्ट्रिंग बताती है कि कोड किस पैच स्तर पर होना चाहिए।
केवल लॉगिन-पेज सैनिटाइज़र व्यवहार बताता है कि बग फायर होता है या नहीं।"
प्रबंधित होस्ट संस्करण स्ट्रिंग्स को बदले बिना सुरक्षा पैच को चुपचाप बैकपोर्ट करते हैं। लॉगिन-हार्डनिंग प्लगइन्स त्रुटि संदेश को पूरी तरह से बदल देते हैं, जिससे असुरक्षित संस्करणों पर भी रिफ्लेक्शन चैनल समाप्त हो जाता है। केवल-संस्करण स्कैनर गलत सकारात्मक और गलत नकारात्मक उत्पन्न करते हैं। यह स्कैनर एक एकल हानिरहित प्रोब भेजता है और वास्तविक सैनिटाइज़र व्यवहार को वर्गीकृत करता है।
git clone https://github.com/jakestone/xss2shell.git
cd xss2shell
pip install -r requirements.txt
# Passive — no probes sent to target, version + endpoint fingerprinting only
python3 xss2shell_mass.py -i domains.txt -o results
# Active — sends ONE benign failed-login per host (authorized assets only!)
python3 xss2shell_mass.py -i domains.txt -o results --active --workers 80
# Single target
python3 make_poc.py --target https://blog.example.com
# Batch from scanner output
python3 make_poc.py --from-results results.csv -o pocs/
वीडियो रिकॉर्ड करते समय उत्पन्न .poc.html को अपने ब्राउज़र में खोलें → यदि alert() फायर होता है, तो आपने प्री-ऑथ XSS साक्ष्य कैप्चर कर लिया है।
xss2shell_mass.py)usage: xss2shell_mass.py [-h] -i INPUT [-o OUTPUT]
[--active] [--workers WORKERS]
[--timeout TIMEOUT] [--quiet]
?ver= पैराम्स, wp-content संदर्भ)user-profile.js गैजेट एनक्यूड, कोर एसेट संस्करण/?rest_route=/&_method=GET&_jsonp=<random> पर हानिरहित GET — क्या JSONP मार्ग खुला है?--active फ़्लैग)उपयोगकर्ता नाम < area id=<RANDOM> href=/x2s> के साथ एक एकल असफल लॉगिन भेजता है और HTML प्रतिक्रिया को वर्गीकृत करता है:
bypass — हमारे मार्कर के साथ वास्तविक <area> तत्व बच गया → strip_tags/KSES बेमेल की पुष्टि हुईescaped — मार्कर मौजूद है लेकिन एंटिटी-एन्कोडेड है → पैच या हार्डनिंग मौजूद हैstripped — डिफ़ॉल्ट WP त्रुटि दिखाई गई, टैग हटा दिए गए → acevomod या पैच किया गयाclosed — उपयोगकर्ता नाम का कोई रिफ्लेक्शन नहीं → लॉगिन-हार्डनिंग प्लगइन स्थापितmake_poc.py)usage: make_poc.py [-h] [--target TARGET] [--from-results FROM_RESULTS]
[-o OUTDIR]
प्रत्येक लक्ष्य के लिए प्रकाशित pwn.ai PoC पेज उत्पन्न करता है — सटीक HTML फॉर्म जो बिना पैच वाले WordPress पर alert() ट्रिगर करता है। तीन पेलोड वेरिएंट टिप्पणियों में शामिल हैं:
स्कैनर का निर्णय इंजन संस्करण वर्गीकरण (WordPress.org के stable-check API से) को व्यवहारिक साक्ष्य के साथ जोड़कर 10 अलग-अलग फैसले उत्पन्न करता है:
CSV कॉलम: host, url, status, checker_status, wp_version, branch_status, evidence, http, ms, error
checker_status कॉलम सीधे सहसंबंध के लिए pwn.ai सार्वजनिक चेकर की शब्दावली (vulnerable / patched / not_wordpress / unreachable / inconclusive / error) से मैप होता है।
यदि आप रक्षा पक्ष पर हैं, तो ये वे फोरेंसिक सिग्नल हैं जो यह भेद्यता छोड़ती है:
# Primary signal: encoded '<' in the log parameter
POST /wp-login.php → log=%3C... (URL-encoded < in username field)
# Higher confidence: paired with REST pivoting
GET /?rest_route=/&_method=GET&_jsonp=... # JSONP callback
GET /wp-json/wp/v2/statuses/publish?_jsonp=... # WAF-bypass variant
# Escalation stage indicators
GET /wp-admin/authorize-application.php?success_url=<off-origin>
POST /wp-admin/update.php?action=upload-plugin
GET /wp-content/plugins/<random>/shell.php
log पैरामीटर में %3C (URL-एन्कोडेड <) होने पर POST /wp-login.php को ब्लॉक करें। मान्य WordPress उपयोगकर्ता नामों में कभी भी कोण कोष्ठक नहीं होते। विशिष्ट टैग्स तक सीमित न करें — KSES < के बाद टैब, न्यूलाइन और कैरिज रिटर्न तथा किसी भी अनुमत-सूचीबद्ध टैग की अनुमति देता है, इसलिए टैग-विशिष्ट नियम को आसानी से बायपास किया जा सकता है। [citation:hadrian.io blog]
एस्केलेशन चरण में _jsonp= कॉलबैक प्रॉपर्टी ट्रैवर्सल के लिए डॉट्स का उपयोग करता है (जैसे, window.opener.approve.click)। डॉटेड JSONP कॉलबैक वाले REST अनुरोधों को शोषण के मजबूत संकेतक के रूप में चिह्नित करें। [citation:hadrian.io blog]
यह टूल केवल-पहचान के लिए है। यह निम्न नहीं करता:
✗ JSONP कॉलबैक को सार्वजनिक alert() से परे हथियार बनाना
✗ एडमिन-लुअर पेज या एप्लिकेशन पासवर्ड कैप्चर शामिल करना
✗ REST दुरुपयोग, प्लगइन अपलोड, या PHP शेल कोड शामिल करना
✗ प्रति स्कैन प्रति लक्ष्य एक से अधिक असफल लॉगिन निष्पादित करना
आपको निम्न करना होगा:
✓ केवल उन एसेट्स को स्कैन करना जिनके मालिक आप हैं या जिनके परीक्षण के लिए आपके पास लिखित प्राधिकरण है
✓ केवल अपने ही सर्वर पर अपने ही ब्राउज़र के लिए PoCs उत्पन्न करना
✓ PoC लिंक साइट एडमिन/उपयोगकर्ताओं को कभी न भेजना
✓ प्रोग्राम की लिखित मंजूरी के बिना alert() से आगे कभी न बढ़ना
✓ बग बाउंटी प्रोग्राम के दायरे और नियमों का पालन करना
यह टूलकिट अधिकृत सुरक्षा अनुसंधान, बग बाउंटी
कार्यक्रमों और रक्षात्मक डिटेक्शन इंजीनियरिंग के लिए मौजूद है। दुरुपयोग आपकी
ज़िम्मेदारी है।
xss2shell/
├── README.md ← You are here
├── xss2shell_mass.py ← Behavior-first mass scanner (v1.1.0)
├── make_poc.py ← Evidence-grade PoC page generator
├── requirements.txt ← Python dependencies (just `requests`)
├── .gitignore ← Ignores scan outputs and cache
└── example/
├── domains.txt ← Example input file
└── example_output.csv ← Example scan output
प्रश्न: WordPress संस्करण स्ट्रिंग की जांच ही क्यों नहीं करते?
उत्तर: प्रबंधित होस्ट (WP Engine, Kinsta, Pantheon, आदि) अक्सर संस्करण बदले बिना सुरक्षा पैच बैकपोर्ट करते हैं। लॉगिन-हार्डनिंग प्लगइन्स त्रुटि संदेश को पूरी तरह से बदल देते हैं। दोनों मामले केवल-संस्करण स्कैनर में गलत सकारात्मक और छिपे संस्करणों के लिए गलत नकारात्मक उत्पन्न करते हैं। यह स्कैनर वास्तविक सैनिटाइज़र व्यवहार का परीक्षण करता है।
प्रश्न: क्या --active प्रोब खतरनाक है?
उत्तर: नहीं। यह एक हानिरहित मार्कर उपयोगकर्ता नाम के साथ ठीक एक असफल लॉगिन भेजता है। यह JavaScript निष्पादित करने का प्रयास नहीं करता, मान्य उपयोगकर्ता नामों की गणना नहीं करता, और कोई वास्तविक शोषण ट्रिगर नहीं करता। यह एक मानक लॉगिन प्रयास से कम घुसपैठिया है।
प्रश्न: क्या इस टूल का उपयोग अनधिकृत स्कैनिंग के लिए किया जा सकता है?
उत्तर: नहीं। सक्रिय प्रोब /wp-login.php पर एक HTTP POST भेजता है, जो लक्ष्य सर्वर पर एक अनुरोध है। केवल उन एसेट्स पर उपयोग करें जिनके मालिक आप हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण है।
प्रश्न: vulnerable और confirmed_vulnerable के बीच क्या अंतर है?
उत्तर: vulnerable का अर्थ है कि WordPress.org API कहता है कि संस्करण असुरक्षित है, लेकिन हमने व्यवहारिक रूप से strip_tags/KSES बेमेल की पुष्टि नहीं की है। confirmed_vulnerable का अर्थ है कि हमने एक प्रोब भेजा और <area> तत्व दोनों सैनिटाइज़र से बच गया — प्रकाशित श्रृंखला फायर हो सकती है।
प्रश्न: क्या मैं इसका उपयोग अपने बग बाउंटी प्रोग्राम रिपोर्ट के लिए कर सकता हूं?
उत्तर: हां! checker_status कॉलम आसान सहसंबंध के लिए सीधे pwn.ai के सार्वजनिक चेकर शब्दावली से मैप होता है। पूर्ण रिपोर्ट के लिए स्कैन परिणामों को make_poc.py से PoC वीडियो साक्ष्य के साथ जोड़ें।
प्रश्न: क्या यह RCE श्रृंखला का पता लगाता है?
उत्तर: नहीं। यह टूलकिट प्री-ऑथ XSS प्रवेश बिंदु का पता लगाता है। पूर्ण RCE श्रृंखला के लिए एक लॉग-इन व्यवस्थापक, सक्षम एप्लिकेशन पासवर्ड, और प्लगइन अपलोड अनुमतियां आवश्यक हैं — ऐसी शर्तें जिनका यह स्कैनर मूल्यांकन नहीं करता। स्कैनर उस पर केंद्रित है जो बाहरी रूप से अवलोकन योग्य है: सैनिटाइज़र बायपास।
0xlipon द्वारा निर्मित • केवल-पहचान • केवल अधिकृत उपयोग के लिए
| संसाधन | लिंक |
|---|
| मूल खुलासा (pwn.ai) | pwn.ai/blog/xss2shell |
| Hadrian तकनीकी विश्लेषण | hadrian.io/blog/wordpress-xss2shell |
| WordPress सलाह (GHSA) | GHSA-52p2-r8wf-jcrf |
| SOME हमला अनुसंधान (2022) | pwn.ai/blog/bypass-csp-using-wordpress |
| WordPress 7.0.3 रिलीज़ | wordpress.org/news/2026/08/wordpress-7-0-3-release |
| फ़्लैग | विवरण |
|---|
-i, --input | फ़ाइल जिसमें प्रति पंक्ति एक होस्ट (सादा डोमेन या पूर्ण URL) |
-o, --output | आउटपुट फ़ाइलों के लिए आधार पथ (.csv + .json उत्पन्न करता है) |
--active | व्यवहारिक प्रोब सक्षम करें — प्रति होस्ट एक असफल लॉगिन |
--workers | थ्रेड पूल आकार (डिफ़ॉल्ट: 50, अच्छे कनेक्शन के लिए अधिकतम ~200) |
--timeout | HTTP टाइमआउट सेकंड में (डिफ़ॉल्ट: 10) |
--quiet | केवल confirmed_vulnerable, vulnerable, और likely_vulnerable प्रिंट करें |
| वेरिएंट | href मान | कब उपयोग करें |
|---|
| डिफ़ॉल्ट | /?rest_route=/&_method=GET&_jsonp=alert | मानक WordPress |
| एनवेलप | /?rest_route=/&_method=GET&_envelope=1&_jsonp=alert | REST 401 लौटाता है (200 में लपेटता है) |
| WAF पिवोट | /wp-json/wp/v2/statuses/publish?_jsonp=alert&_method=GET | ?rest_route= WAF द्वारा अवरुद्ध |
| फैसला | शर्तें |
|---|
confirmed_vulnerable 🔴 | संस्करण असुरक्षित है और प्रोब मार्कर <area> तत्व के रूप में बच गया और user-profile.js गैजेट मौजूद है |
vulnerable 🔴 | संस्करण wordpress.org के अनुसार असुरक्षित है; व्यवहारिक प्रोब नहीं चलाया गया (--active के साथ पुनः चलाएं) |
likely_vulnerable 🟠 | प्रोब मार्कर बच गया लेकिन user-profile.js एनक्यूड नहीं है (प्रकाशित ऑटो-फायर गैजेट गायब) |
mitigated 🟣 | संस्करण असुरक्षित है लेकिन प्रोब मार्कर एस्केप/स्ट्रिप/क्लोज़ हो गया (साइलेंट बैकपोर्ट या हार्डनिंग) |
likely_patched 🟢 | संस्करण छिपा/अज्ञात है लेकिन प्रोब मार्कर एस्केप/स्ट्रिप हो गया |
patched 🟢 | संस्करण latest या outdated है (सुरक्षा बैकपोर्ट हैं) |
not_wordpress ⚫ | कोई WordPress फिंगरप्रिंट नहीं मिला |
unreachable ⚫ | कनेक्शन विफल (टाइमआउट, SSL, DNS) |
inconclusive 🟡 | WAF ब्लॉक, Cloudflare चुनौती, बिना प्रोब के छिपा संस्करण, या लॉगिन पेज अनुपस्थित |
error 🟡 | स्कैन के दौरान अप्रत्याशित विफलता |