
CVE-2026-109618 / CVE-2026-109619 (PHP core RCE) के लिए गैर-विनाशकारी स्कैनर। crt.sh + subfinder के माध्यम से सबडोमेन रेकॉन, मजबूत बैनर ग्रैबिंग, संस्करण-आधारित पहचान।
CVE-2026-109618 (OOM भ्रष्टाचार के माध्यम से RCE) और CVE-2026-109619 (पुरानी वैश्विक स्थिति के माध्यम से RCE) के लिए गैर-विनाशकारी स्कैनर (ऑप्ट-इन प्रोब के साथ) — मुख्य PHP बग जिन्हें 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 में ठीक किया गया है।
✅ आधिकारिक php-src सलाहकारों के विरुद्ध सत्यापित (2026-10-21, गंभीर)। नीचे दिए गए CVE ID और ठीक किए गए संस्करण की तालिका अपस्ट्रीम से बिल्कुल मेल खाती है।
- CVE-2026-109618 — GHSA-w8hw-w9fx-j79w
- CVE-2026-109619 — GHSA-6wmf-4rv5-p3rp
| शाखा | प्रभावित | ठीक किया गया |
|---|---|---|
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.5 | < 8.5.12 | 8.5.12 |
| < 8.2 | EOL — कोई अपस्ट्रीम पैच नहीं | distro/OSV बैकपोर्ट जांचें |
| मोड | यह क्या करता है |
|---|---|
LOCAL | सटीक रनटाइम संस्करण, SAPI, memory_limit, post_max_size के लिए php -r |
REMOTE | X-Powered-By / Server हेडर और उजागर phpinfo() के माध्यम से संस्करण फिंगरप्रिंट |
PRESENCE | संस्करण के बिना PHP पहचान (PHPSESSID, .php संदर्भ, रीडायरेक्ट) |
BANNER | मजबूत रॉ-सॉकेट बैनर ग्रैब — HEAD/GET/OPTIONS + विकृत प्रोब, http/https, त्रुटि-पृष्ठ प्रकटीकरण |
RECON | crt.sh (प्रमाणपत्र पारदर्शिता) के माध्यम से सबडोमेन गणना, subfinder फ़ॉलबैक/मर्ज के साथ, फिर होस्ट्स को हल करते हुए फैन-आउट स्कैन |
PROBE | (ऑप्ट-इन) वर्कर अस्थिरता का निरीक्षण करने के लिए बड़े मल्टीपार्ट अनुरोध — DoS का कारण बन सकता है |
git clone https://github.com/JoasASantos/php2shell-scanner.git
cd php2shell-scanner
# stdlib only — no pip deps.
# Optional recon fallback: ProjectDiscovery subfinder
# brew install subfinder (or: go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest)
# Local runtime check
python3 php2shell_scan.py --local
# Single remote target, look for exposed phpinfo()
python3 php2shell_scan.py https://example.com --phpinfo-paths
# Subdomain recon (crt.sh + subfinder) then scan, 10 threads, JSON out
python3 php2shell_scan.py example.com --recon --threads 10 -o out.json
# Recon only, no scanning
python3 php2shell_scan.py example.com --recon-only
# Target list + forced robust banner grab
python3 php2shell_scan.py -f targets.txt --banner
# OPT-IN load probe (authorized use only — DoS risk)
python3 php2shell_scan.py https://example.com --probe --probe-count 5
| फ़्लैग | अर्थ |
|---|---|
--local | php बाइनरी के माध्यम से स्थानीय स्कैन |
--recon | प्रत्येक डोमेन को सबडोमेन में विस्तारित करें (crt.sh + subfinder), फिर रिज़ॉल्व होने वाले होस्ट्स को स्कैन करें |
--recon-only | केवल सबडोमेन की गणना करें, कोई स्कैनिंग नहीं |
--banner | प्रत्येक लक्ष्य पर मज़बूत रॉ-सॉकेट बैनर ग्रैब को बाध्य करें |
--phpinfo-paths | सामान्य रूप से उजागर phpinfo() पाथ्स की जाँच करें |
--deep-version | अतिरिक्त वर्ज़न तकनीकें: PHP ईस्टर एग्स + वर्ज़न-लीक फ़ाइलें (composer.json, .env, …) |
--origin-scan | Cloudflare/WAF के पीछे स्थित PHP ओरिजिन तक पहुँचें — वास्तविक Host हेडर के साथ सीधे-IP अनुरोध |
--shodan-key | ओरिजिन इंटेल के लिए Shodan API कुंजी (या env SHODAN_API_KEY); --origin-scan को सक्षम करता है |
--censys-id / --censys-secret | Censys API क्रेडेंशियल्स (या env CENSYS_API_ID / CENSYS_API_SECRET); --origin-scan को सक्षम करते हैं |
--probe | मल्टीपार्ट लोड प्रोब — DoS जोखिम, केवल अधिकृत |
--probe-count N | प्रोब अनुरोधों की संख्या (डिफ़ॉल्ट 5) |
--threads N / --timeout N | समवर्तीता / प्रति-अनुरोध टाइमआउट |
--insecure | TLS को मान्य न करें |
-o FILE / --csv FILE | JSON / CSV रिपोर्ट सहेजें |
वर्ज़न जाँच के अतिरिक्त, प्रत्येक लक्ष्य को निष्क्रिय संकेतों (सामान्य प्रतिक्रियाओं से) के साथ संवर्धित किया जाता है जो निर्णय को परिष्कृत करते हैं और झूठे सकारात्मक परिणामों को कम करते हैं:
fpm, mod_php) अनुरोध स्थिति का
पुनः उपयोग करते हैं → CVE-2026-109619 के प्रति उजागर; सादा cgi कहीं कम।ubuntu, +deb, .el8…) — बैकपोर्ट वर्ज़न बढ़ाए बिना
ठीक कर सकता है → विश्वास कम किया गया, "चेंजलॉग सत्यापित करें" नोट।post_max_size /
max_input_vars (CVE-2026-109618 के लिए OOM सतह), disable_functions।--deep-version)जब कोई बैनर वर्ज़न न हो: PHP ईस्टर एग्स (?=PHPE9568F34-... → expose_php=On
पर GIF/क्रेडिट्स) और वर्ज़न-लीक फ़ाइलें (composer.json, .env, …;
.env में PHP_VERSION = सटीक, "php": ">=8.2" कंस्ट्रेंट केवल ब्रांच को सीमित करता है)।
--origin-scan)CDN ओरिजिन को छिपाते हैं, इसलिए हेडर पढ़ने पर केवल एज दिखता है। --origin-scan:
www, गैर-प्रॉक्सीड प्रीफ़िक्स (origin.*, cpanel.*, mail.*…)
और रेकॉन सबडोमेन को रिज़ॉल्व करता है;Host + SNI के साथ अनुरोध करता है,
Server / X-Powered-By / त्रुटि पृष्ठों को सीधे ओरिजिन से पढ़ता है।पहले से उजागर IP को सीधा अनुरोध। केवल अधिकृत लक्ष्य।
क्रेडेंशियल-युक्त इंटेल उन IPs को जोड़ता है जिन्हें DNS कभी उजागर नहीं करता, साथ ही इंडेक्स्ड बैनर से PHP वर्ज़न (इंटेल के रूप में चिह्नित — पुराना हो सकता है):
--shodan-key / env SHODAN_API_KEY — hostname:<domain> द्वारा होस्ट।--censys-id + --censys-secret / env CENSYS_API_ID + CENSYS_API_SECRET
— TLS-सर्ट / DNS नाम द्वारा होस्ट।--origin-scan सक्षम करता है।export SHODAN_API_KEY=xxx CENSYS_API_ID=xxx CENSYS_API_SECRET=xxx
python3 php2shell_scan.py hackersec.com --origin-scan
| विश्वास | अर्थ |
|---|---|
HIGH | उजागर phpinfo() या PHP त्रुटि पृष्ठ से संस्करण |
MEDIUM | HTTP बैनर (expose_php=On) से संस्करण |
LOW | केवल अनुमान, या प्रॉक्सी के पीछे, या कोई डिस्ट्रो बैकपोर्ट लागू हो सकता है |
समेकित आउटपुट लक्ष्यों को गंभीरता के अनुसार समूहित करता है, VULNERABLE को विश्वास के अनुसार क्रमबद्ध करता है (HIGH पहले), और रिपोर्ट करने से पहले LOW/MEDIUM परिणामों को पुनः जाँचने के लिए चिह्नित करता है।
FIXED तालिका के विरुद्ध प्रति शाखा संस्करण तुलना:
< fixed → VULNERABLE>= fixed → PATCHED< 8.2 (EOL) → VULNERABLE_EOL (कोई अपस्ट्रीम पैच नहीं; डिस्ट्रो/OSV बैकपोर्ट जाँचें)केवल उन्हीं एसेट्स के विरुद्ध चलाएँ जिनके आप स्वामी हैं या जिन्हें परीक्षण करने की आपको स्पष्ट रूप से अनुमति है। --probe मोड नाज़ुक वर्कर्स को बाधित कर सकता है। आपके उपयोग की ज़िम्मेदारी आपकी है।
MIT