
ज़िप फ़ाइलें बनाने के लिए Python3 उपयोगिता जो बाद में निकालने के लिए अतिरिक्त डेटा छिपाती हैं
यह Python उपयोगिता ऐसी zip फ़ाइलें बनाती है जिनमें फ़ाइल संरचना के भीतर अतिरिक्त डेटा एम्बेड होता है। यह अतिरिक्त डेटा zip की जाँच करने या डीकंप्रेस करने पर दिखाई नहीं देता/प्रदर्शित नहीं होता, लेकिन zip फ़ाइल के भीतर मौजूद Windows शॉर्टकट फ़ाइल (LNK) के माध्यम से powershell का उपयोग करके इसे प्राप्त किया जा सकता है।
स्क्रिप्ट को आपकी zip फ़ाइल / शॉर्टकट फ़ाइल / स्मगल की गई फ़ाइल के लिए एक नाम, साथ ही उस फ़ाइल/डेटा की आवश्यकता होती है जिसे आप स्मगल करना चाहते हैं:
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
यह स्क्रिप्ट फ़ोल्डर के भीतर important_data.zip उत्पन्न करेगा। इस zip फ़ाइल को Windows मशीन पर स्थानांतरित करें, zip पर डबल-क्लिक करें या इसे एक्सट्रैक्ट करें, और फिर उसमें मौजूद शॉर्टकट पर क्लिक करें। स्मगल करने के लिए दिया गया आपका डेटा zip फ़ाइल से प्राप्त किया जाएगा, डिस्क पर सहेजा जाएगा, और टेक्स्ट फ़ाइल के रूप में खोला जाएगा।
यह प्रोजेक्ट मेरे एक पुराने प्रोजेक्ट, lnk_generator का उपयोग करता है, जो आपको एक प्रीसेट टेम्पलेट का उपयोग करके मनमानी शॉर्टकट फ़ाइलें बनाने की अनुमति देता है। अधिक विवरण / अधिक संपूर्ण स्क्रिप्ट और शॉर्टकट फ़ाइलें बनाने के नोट्स के लिए उस रेपो को देखें।
स्मगल किया गया डेटा आर्काइव के भीतर मौजूद फ़ाइलों के डेटा और आर्काइव की सेंट्रल डायरेक्ट्री के बीच रखा जाता है, जो zip फ़ाइल के लिए एक प्रकार की विषय-सूची का कार्य करती है। इस सेंट्रल डायरेक्ट्री में आर्काइव के भीतर फ़ाइलों के ऑफ़सेट होते हैं, इसलिए जब हमारा इंजेक्ट किया गया डेटा zip के भीतर मौजूद होता है, तो यह सेंट्रल डायरेक्ट्री द्वारा ट्रैक या इंडेक्स नहीं किया जाता है और इस प्रकार इसे आसानी से देखा या एक्सट्रैक्ट नहीं किया जा सकता है। Python स्क्रिप्ट zip फ़ाइल के भीतर "End of Central Directory" ऑफ़सेट ढूंढती है और स्मगल किए गए डेटा को इंजेक्ट करने के बाद उसे सेंट्रल डायरेक्ट्री के नए स्थान के साथ अपडेट करती है। निम्नलिखित ग्राफिक बाईं ओर zip की सामान्य संरचना और दाईं ओर दिखाता है कि हमारा डेटा कहाँ डाला गया है:

स्मगल किए गए डेटा को powershell कमांड का उपयोग करके निकाला जाता है:
powershell.exe -w 1 -c "$name = \"testing\";$file = (get-childitem -Pa $Env:USERPROFILE -Re -Inc *$name.zip).fullname;$bytes=[System.IO.File]::ReadAllBytes($file);$size = (0..($bytes.Length - 4) | Where-Object {$bytes[$_] -eq 0x55 -and $bytes[$_+1] -eq 0x55 -and $bytes[$_+2] -eq 0x55 -and $bytes[$_+3] -eq 0x55 })[0] + 4;$length=12;$chunk=$bytes[$size..($size+$length-1)];$out = \"$Env:TEMP\$name.txt\";[System.IO.File]::WriteAllBytes($out,$chunk);Invoke-Item $out"
यह कमांड:
0x55/0x55/0x55/0x55) का पता लगाता हैयह POC काफी सामान्य छोड़ दिया गया है / इसे अन्य फ़ाइल प्रकारों का उपयोग करने के लिए हथियार बनाना / आदि पाठक के लिए एक अभ्यास के रूप में छोड़ा जाएगा।