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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
NotSecDrv — CVE-2018-7249 के लिए एक PoC | Kitploit
उपकरण/GitHubGitHub/alonhr/notsecdrv
मेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणरिवर्स इंजीनियरिंगलर्निंग और शिक्षाबाइनरी शोषण
GitHubalonhr/notsecdrv

NotSecDrv

CVE-2018-7249 के लिए एक PoC

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

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

सभी देखें →

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

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

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

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

NotSecDrv - CVE-2018-7249 के लिए एक PoC कोड

सामान्य विवरण

Microsoft Windows Vista, Windows 7, Windows 8, और Windows 8.1 (KB3086255 से पहले) में शामिल secdrv.sys, और Macrovision SafeDisc में शामिल secdrv.sys में एक समस्या पाई गई। IOCTL 0xCA002813 के दो सावधानीपूर्वक समयबद्ध कॉल एक रेस कंडीशन का कारण बन सकते हैं जो use-after-free की ओर ले जाता है। शोषण होने पर, एक अनधिकृत हमलावर कर्नेल में मनमाना कोड चला सकता है।

यह कमजोरी Microsoft को रिपोर्ट की गई थी, और चूंकि यह अप-टू-डेट Windows मशीन (केवल KB3086255 से पहले के संस्करण) को प्रभावित नहीं करती है, वे कोई कार्रवाई नहीं करेंगे। Windows 7 x86 पर परीक्षण और शोषण सफलतापूर्वक किया गया।

इससे संबंधित भी है CVE-2018-7250।

स्क्रीनशॉट

वैकल्पिक पाठ

विवरण

यह दस्तावेज़ secdrv.sys ड्राइवर पर मेरे छोटे शोध का वर्णन करता है। ड्राइवर के सभी वर्णित व्यवहार रिवर्स इंजीनियर किए गए थे और गलत/असटीक हो सकते हैं।

IOCTL (0x0CA002813) के इनपुट बफर के ऑफसेट 0x4 में एक संख्या होती है जिसे मैं TYPE के रूप में संदर्भित करूंगा। इस IOCTL (0x0CA002813) का मुख्य हैंडलर फंक्शन, sub_11A88, तीन अलग-अलग प्रकार प्राप्त करता है: 0x96, 0x97 और 0x98।

  • 0x96 एक PagedPool chunk आवंटित करता है, इसे 0x64 आकार की एक सरणी में संग्रहीत करता है, इसे आरंभ करता है (कुछ हद तक :)), और इसका एक हिस्सा ऑफसेट 0x10 पर उपयोगकर्ता द्वारा प्रदान किए गए बफर में कॉपी करता है।
  • 0x97 पहले से आवंटित एक chunk का उपयोग करता है, जिसे 0x96 के साथ आवंटित किया गया था (यह एक टैग द्वारा उल्लिखित सरणी में सही chunk ढूंढता है), और इसका उपयोग उपयोगकर्ता इनपुट बफर को किसी प्रकार की संशोधित xor एन्क्रिप्शन रूटीन के साथ एन्क्रिप्ट करने के लिए करता है। फिर यह एक फंक्शन को कॉल करता है जो एक अन्य संरचना में संग्रहीत है, जो आवंटित chunk में एक फील्ड द्वारा इंगित की जाती है।
  • 0x98 0x96 के साथ आवंटित एक chunk को मुक्त करता है। यह आवंटन प्रक्रिया में दिए गए टैग को खोजकर सही chunk ढूंढता है।

सूचना लीक (CVE-2018-7250)

IOCTL प्रकार 0x96 द्वारा एक नया chunk आवंटित करने और इसे आरंभ करने के बाद, लेकिन पूरी तरह से नहीं, यह chunk को usermode में कॉपी करता है। नव आवंटित chunk में 16 बिट आरंभ नहीं किए गए थे, और पिछले PagedPool आवंटनों से डेटा शामिल करते हैं। फिर ये अप्रारंभीकृत बिट्स .text:00011BE9 पर REP MOVSD निर्देश द्वारा usermode में कॉपी हो जाते हैं। PoC कोड यहाँ।

मनमाना कोड निष्पादन (CVE-2018-7249)

जब IOCTL प्रकार 0x97 को कॉल किया जाता है, तो यह अपने टैग द्वारा पहले प्रकार 0x96 के साथ आवंटित आवश्यक chunk को ढूंढता है। यदि आवंटन पहले से IOCTL प्रकार 0x97 द्वारा मुक्त कर दिया गया है, तो DeviceIoControl एक त्रुटि लौटाता है। यहाँ कमजोरी यह है कि प्रकार 0x97 द्वारा उपयोग किया गया आवंटन, इसके संचालन के दौरान मुक्त किया जा सकता है (क्योंकि कोई सिंक्रनाइज़ेशन तंत्र उपयोग नहीं किया जाता है) इस प्रकार यदि रेस जीती जाती है तो इसका उपयोग-after-free होता है। यदि कोई हमलावर IOCTL प्रकार 0x97 के संचालन के दौरान (प्रकार 0x98 का उपयोग करके) chunk को मुक्त करने और ठीक उसी मेमोरी स्थान पर उसके नियंत्रण वाला एक नया chunk आवंटित करने में सफल हो जाता है, तो वह एक अन्य संरचना के लिए एक पॉइंटर को ओवरराइड कर सकता है, जिसमें एक फंक्शन पॉइंटर होता है जिसका उपयोग अंततः ड्राइवर के निष्पादन प्रवाह को हाईजैक करने और रिंग 0 में मनमाना कोड निष्पादित करने के लिए किया जा सकता है। क्योंकि एन्क्रिप्शन रूटीन एक उपयोगकर्ता द्वारा प्रदान किए गए बफर पर किया जाता है, जो आकार में बहुत बड़ा हो सकता है, एन्क्रिप्शन को निष्पादित होने में लंबा समय लग सकता है, इस प्रकार IOCTL प्रकार 0x98 के लिए उपयोग में रहते हुए chunk को मुक्त करने का एक उत्तम समय विंडो प्रदान करता है। समय विंडो इतनी लंबी (1 सेकंड से अधिक!) हो सकती है कि पहले प्रयास पर ही रेस को विश्वसनीय रूप से जीता जा सकता है। उपयोग-after-free .text:00011B68 पर शुरू होता है, और वास्तविक कॉल, जिसे शेलकोड पर कूदने के लिए हाईजैक किया जाएगा, .text:00011B86 पर होता है।

इस कमजोरी का सफलतापूर्वक शोषण करने के लिए उठाए गए कदम निम्नलिखित हैं:

  • हमारे द्वारा बाद में उपयोग करने की योजना वाले टैग के साथ सभी पिछले chunks को मुक्त करें, यह सुनिश्चित करते हुए कि सभी IOCTL एक ही PagedPool chunk पर काम करते हैं।
  • PagedPool को स्प्रे करें और ऐसे छेद बनाएं जो IOCTL प्रकार 0x96 (0x30 बाइट्स) में आवंटन के आकार से मेल खाते हों। मुक्त किए गए chunk के बजाय बाद में विश्वसनीय रूप से एक नकली प्रतिस्थापन आवंटित करने के लिए यह आवश्यक है।
  • IOCTL प्रकार 0x96 के साथ एक chunk आवंटित करें। यह chunk पहले बनाए गए छेदों में से एक में आवंटित किया जाएगा।
  • उपयोगकर्ता स्थान मेमोरी का एक बड़ा क्षेत्र आवंटित करें और IOCTL प्रकार 0x97 को कॉल करें। बड़ा मेमोरी क्षेत्र यह सुनिश्चित करेगा कि आवंटन को मुक्त करने वाले थ्रेड के पास रेस जीतने के लिए पर्याप्त समय हो।
  • एक नया थ्रेड शुरू करें जो IOCTL प्रकार 0x98 को कॉल करेगा और उस chunk को मुक्त करेगा जिस पर दूसरा थ्रेड काम कर रहा है।
  • नए थ्रेड से (chunk मुक्त होने के बाद) फिर से पूल को स्प्रे करें ताकि मुक्त chunk को हमलावर-नियंत्रित आवंटन से बदल दिया जाए। इस नकली chunk में आवश्यक संरचनाओं के लिए मान्य पॉइंटर होने चाहिए।
  • हमारे द्वारा बनाई गई नकली संरचना में फंक्शन पॉइंटर के सही ऑफसेट पर शेलकोड का पता रखें, और इसके कॉल होने की प्रतीक्षा करें (यह IOCTL प्रकार 0x97 से, एन्क्रिप्शन समाप्त होने के बाद कॉल किया जाएगा)।
  • आनंद लें!

परीक्षण वातावरण

OS: Windows 7 Kernel Version 7600 MP (1 procs) Free x86 compatible Built by: 7600.16385.x86fre.win7_rtm.090713-1255 VM: 4GB RAM, 1 CPU Hardware: Windows 10 Pro 64 bit, Motherboard Gigabyte Z370 HD3, 16GB RAM, Intel i5-8400 2.80GHz (6 CPUs)

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