
पता लगाएं और साफ करें wp2shell (CVE-2026-63030) WordPress समझौते — बल्क में चलाने योग्य, डिफ़ॉल्ट रूप से केवल-पढ़ने योग्य
एक या कई WordPress साइटों पर wp2shell (CVE‑2026‑63030) समझौते का पता लगाएं और सफाई करें।
wp2shell प्री‑ऑथेंटिकेशन रिमोट‑कोड‑एक्ज़ीक्यूशन भेद्यता है जिसे WordPress 7.0.2 / 6.9.5 / 6.8.6 (2026‑07‑17) में ठीक किया गया था। एक सार्वजनिक PoC एक दिन के भीतर सामने आया और ~48 घंटों के भीतर बड़े पैमाने पर शोषण शुरू हो गया। पैचिंग इस छेद को बंद कर देती है — लेकिन जिस साइट का पैचिंग से पहले शोषण हुआ था, वह पहले से ही समझौता-ग्रस्त है, और अपडेट करना हमलावर की पर्सिस्टेंस को नहीं हटाता।
यह टूल उस पर्सिस्टेंस को ढूंढता और हटाता है। यह एक एकल, कम‑निर्भरता वाली Bash स्क्रिप्ट है जो डिफ़ॉल्ट रूप से केवल‑पढ़ने (read‑only) मोड में चलती है और एक ही पास में हज़ारों साइटों को स्कैन कर सकती है।
⚠️ यह रक्षात्मक टूलिंग है। इसमें कोई एक्सप्लॉइट कोड नहीं है।
--cleanचलाने से पहले साइट का स्नैपशॉट लें।
शोषण के बाद, wp2shell टूलिंग आमतौर पर दो पर्सिस्टेंस आर्टिफ़ैक्ट छोड़ती है, जिन दोनों को यह टूल ढूंढता है:
user_login = wpsvc_<hex> / wp2_<hex> / w2s_<hex>, या हमलावर डोमेन पर एक ईमेल (@wp2shell.*, @shellcode.*, @wordpress-svc.internal, @wordpress-noreply.net, @x.lol), जिसके पास administrator भूमिका हो। (नोट: @system.local कुछ मैनेज्ड होस्ट्स पर एक वैध प्लेसहोल्डर एडमिन ईमेल है — इसे जानबूझकर IOC के रूप में नहीं माना जाता।)wp-content/plugins/<plausible-name>-<6hex>/<same>.php: एक छोटी (~1.3 KB) PHP फ़ाइल जिसमें नकली Author: WordPress.org Community हेडर है, जो एक टोकन के पीछे सुरक्षित है और ?c=<command> इंटरफ़ेस उजागर करती है।यह सामान्य मामले का भी पता लगाता है: wp-content/ के अंतर्गत कोई भी छोटी PHP फ़ाइल जो $_GET['c'] को किसी कमांड/eval सिंक में पाइप करती है।
curl -fsSLO https://raw.githubusercontent.com/InstaWP/wp2shell-scan/main/wp2shell-scan.sh
chmod +x wp2shell-scan.sh
इसके लिए bash, find, grep, और एक mysql/mariadb क्लाइंट आवश्यक है। WP‑CLI का उपयोग तब किया जाता है जब यह मौजूद हो (उपयोगकर्ता को हटाने का अधिक साफ़ तरीका) लेकिन यह अनिवार्य नहीं है — webshell का पता लगाने के लिए किसी डेटाबेस की आवश्यकता नहीं होती।
# Scan ONE site (read-only)
./wp2shell-scan.sh --path /var/www/example.com
# Scan EVERY WordPress install under a base directory (bulk)
./wp2shell-scan.sh --base /var/www
./wp2shell-scan.sh --base /home # shared hosting
# Auto-detect common layouts (/var/www/*, /home/*/public_html, ...)
./wp2shell-scan.sh
# Machine-readable
./wp2shell-scan.sh --base /var/www --json > report.json
# CLEAN — quarantine + remove backdoors, rotate wp-config salts (logs everyone out)
./wp2shell-scan.sh --base /var/www --clean --yes
# Vet a BACKUP / SNAPSHOT / TEMPLATE dump before restoring it (see warning below)
./wp2shell-scan.sh --sql /path/to/backup.sql
हटाए गए आर्टिफ़ैक्ट्स को क्वारंटीन डायरेक्टरी में ले जाया जाता है (सीधे हटाया नहीं जाता) ताकि आपके पास साक्ष्य बना रहे। जब समझौता पाया जाता है (scan) या साफ़ किया जाता है (clean) तो एग्ज़िट कोड 1 होता है, और जब साफ़ हो तो 0 — यह cron/CI के लिए उपयोगी है।
[COMPROMISED] /var/www/example.com — 2 backdoor admin(s), 2 webshell(s)
admin: ID=41 wpsvc_2e1487df8abb <[email protected]> (2026-07-19 06:41:48)
webshell: .../wp-content/plugins/security-headers-manager-8d1d21/security-headers-manager-8d1d21.php
[clean] /var/www/other-site.com
----------------------------------------------------------------
scanned=812 clean=811 compromised=1 cleaned=0
किसी लाइव साइट को साफ़ करना आपके बैकअप को साफ़ नहीं करता। साइट के compromised होने के दौरान लिया गया बैकअप, स्नैपशॉट, या स्टेजिंग/ब्लूप्रिंट टेम्पलेट में अभी भी हमलावर का एडमिन अकाउंट मौजूद रहता है — उसे रिस्टोर करने (या उससे नई साइट प्रोविज़न करने) से तुरंत फिर से संक्रमण हो जाता है। हमने यह कड़वा अनुभव भुगता है: हर प्रभावित लाइव साइट को साफ़ करने के बाद भी, बैकडोर वाली बिल्कुल नई साइटें लगातार प्रकट होती रहीं क्योंकि उन्हें एक ज़हरीले टेम्पलेट स्नैपशॉट से प्रोविज़न किया जा रहा था।
किसी डंप को रिस्टोर करने से पहले उसकी जाँच करें:
./wp2shell-scan.sh --sql /path/to/backup.sql
./wp2shell-scan.sh --sql backup1.sql --sql backup2.sql.gz # repeatable, .gz supported
यदि कोई भी डंप ज़हरीला है तो एग्ज़िट कोड 1 होता है। यदि ऐसा है: इसे पुनर्स्थापित न करें — पहले लाइव साइट को साफ़ करें, फिर एक नया बैकअप लें, और अपनी एक्सपोज़र विंडो के दौरान बनाए गए किसी भी स्नैपशॉट या टेम्पलेट को हटाएँ/बदलें।
--clean एडमिन + वेबशेल को हटाता है और सॉल्ट्स को रोटेट करता है। आपको अभी भी करना होगा:
wp core verify-checksums)।?c= कमांड मानों को रिकॉर्ड करते हैं।/wp-json/batch/v1, ?rest_route=/batch/v1, जिसमें %2f‑एन्कोडेड भी शामिल है)। यदि कोई CDN REST पाथ को पास होने दे सकता है तो इसे ओरिजिन पर रखें।रोगी एडमिन:
SELECT u.ID,u.user_login,u.user_email,u.user_registered
FROM wp_users u JOIN wp_usermeta m ON u.ID=m.user_id
WHERE m.meta_key='wp_capabilities' AND m.meta_value LIKE '%administrator%'
ORDER BY u.user_registered DESC;
वेबशेल प्लगइन्स:
find wp-content/plugins -maxdepth 1 -type d -regextype posix-extended -regex '.*-[0-9a-f]{6}$'
grep -rl "\$_GET\['c'\]" wp-content/plugins/
CLEANUP-WITH-CLAUDE.md देखें, जिसमें एक तैयार-से-पेस्ट करने योग्य प्रॉम्प्ट है जो Claude Code (या किसी भी सक्षम कोडिंग एजेंट) को एक ही साइट पर वही डिटेक्शन और क्लीनअप करवाता है, जिसमें प्रत्येक विनाशकारी चरण से पहले मानवीय पुष्टि शामिल है।
MIT — देखें LICENSE। जैसा है वैसा ही प्रदान किया गया, कोई वारंटी नहीं। InstaWP की टीम द्वारा एक लाइव घटना के दौरान बनाया और परखा गया।