
विंडोज इम्प्लांट जो API हुकिंग (Detours) और DLL इंजेक्शन के माध्यम से RDP क्रेडेंशियल्स चुराता है, उपयोगकर्ता नाम और पासवर्ड को एक फ़ाइल में कैप्चर करता है, रेड-टीम पोस्ट-एक्सप्लॉइटेशन के लिए।
RDPCredentialStealer एक ऐसा इम्प्लांट है जो RDP में उपयोगकर्ताओं द्वारा दिए गए क्रेडेंशियल्स को C++ में Detours के साथ API हुकिंग का उपयोग करके चुराता है।
आइए इसे आज़माएं:
सबसे पहले मैं GitHub रिपॉजिटरी के DLL को C:\Users\Public\Music पथ पर स्थानांतरित करता हूं:

अब मैं एक RDP कनेक्टर विंडोज एप्लिकेशन खोलता हूं:

और अब मैं GitHub रिपॉजिटरी में EXE को निष्पादित करता हूं:

और जब मैं किसी rdp सर्वर में एक्सेस करने का प्रयास करता हूं:

मैं उपयोगकर्ता: s12User और पासवर्ड: passwdtest डालता हूं
और अब मैं फ़ाइल की जांच करता हूं: C:\Users\Public\Music\RDPCreds.txt

RDPCredStealerDLL:
यह कोड C++ में Detours लाइब्रेरी का उपयोग करके हुकिंग तकनीक का एक कार्यान्वयन है। यह विशेष रूप से credui.dll लाइब्रेरी से CredUnPackAuthenticationBufferW फ़ंक्शन को लक्षित करता है, जो क्रेडेंशियल ऑपरेशन में उपयोग किए जाने वाले प्रमाणीकरण बफर को अनपैक करने के लिए जिम्मेदार है। आइए कोड को चरण दर चरण समझें: आवश्यक हेडर फ़ाइलें शामिल की गई हैं, जैसे windows.h, wincred.h, detours.h, और अन्य। एक फ़ंक्शन पॉइंटर प्रकार CredUnPackAuthenticationBufferW_t परिभाषित किया गया है, जो मूल CredUnPackAuthenticationBufferW फ़ंक्शन के हस्ताक्षर का प्रतिनिधित्व करता है। फ़ंक्शन पॉइंटर pCredUnPackAuthenticationBufferW घोषित किया गया है, जिसका उपयोग मूल फ़ंक्शन के पते को संग्रहीत करने के लिए किया जाएगा।
MyCredUnPackAuthenticationBufferW फ़ंक्शन लागू किया गया है, जो मूल फ़ंक्शन के लिए हुक के रूप में कार्य करता है। जब हुक किया गया फ़ंक्शन आह्वान किया जाता है तो इसे कॉल किया जाता है। यह फ़ंक्शन पहले संग्रहीत फ़ंक्शन पॉइंटर pCredUnPackAuthenticationBufferW का उपयोग करके मूल फ़ंक्शन को कॉल करता है। फिर, यह प्राप्त उपयोगकर्ता नाम और पासवर्ड को वाइड स्ट्रिंग्स (LPWSTR) से UTF-8 एन्कोडेड स्ट्रिंग्स (std::string) में बदलता है।
अंत में, यह एपेंड मोड में एक फ़ाइल खोलता है और उसमें उपयोगकर्ता नाम और पासवर्ड लिखता है। DllMain फ़ंक्शन हुकिंग DLL के लिए प्रवेश बिंदु के रूप में कार्य करता है। जब DLL लोड या अनलोड किया जाता है तो इसे कॉल किया जाता है। जब ul_reason_for_call DLL_PROCESS_ATTACH होता है, जो इंगित करता है कि DLL लोड हो रहा है, तो यह LoadLibraryA का उपयोग करके credui.dll लाइब्रेरी को लोड करता है।
फिर, यह GetProcAddress का उपयोग करके मूल फ़ंक्शन CredUnPackAuthenticationBufferW का पता प्राप्त करता है। यदि सफल होता है, तो यह DetourTransactionBegin, DetourUpdateThread, और DetourAttach को कॉल करके हुकिंग प्रक्रिया शुरू करता है। जब ul_reason_for_call DLL_PROCESS_DETACH होता है, जो इंगित करता है कि DLL अनलोड हो रहा है, तो यह DetourTransactionBegin, DetourUpdateThread, और DetourDetach को कॉल करके हुकिंग प्रक्रिया को उलट देता है।
इस कोड का उद्देश्य CredUnPackAuthenticationBufferW फ़ंक्शन को हुक करना और उसे पास किए गए क्रेडेंशियल्स को इंटरसेप्ट करना है, जिससे हुकिंग कोड उपयोगकर्ता नाम और पासवर्ड को एक फ़ाइल में निकाल और लॉग कर सके। इस तकनीक का दुर्भावनापूर्ण उपयोग RDP क्रेडेंशियल जैसी संवेदनशील जानकारी को कैप्चर करने के लिए किया जा सकता है, जो एक महत्वपूर्ण सुरक्षा चिंता है।
Inject.h
यह कोड विंडोज ऑपरेटिंग सिस्टम पर एक लक्ष्य प्रक्रिया में DLL (डायनामिक लिंक लाइब्रेरी) इंजेक्ट करने के लिए फ़ंक्शन प्रदान करता है। आइए कोड को समझें और इसकी कार्यक्षमता को समझें:
आवश्यक हेडर फ़ाइलें शामिल की गई हैं, जैसे windows.h, stdio.h, और tlhelp32.h। ये हेडर विंडोज API के साथ इंटरैक्ट करने के लिए आवश्यक फ़ंक्शन और डेटा प्रकार प्रदान करते हैं।
getPIDbyProcName फ़ंक्शन इनपुट के रूप में एक प्रक्रिया नाम लेता है और संबंधित प्रक्रिया आईडी (PID) लौटाता है। यह वर्तमान प्रक्रियाओं का स्नैपशॉट बनाने के लिए CreateToolhelp32Snapshot फ़ंक्शन का उपयोग करता है, और फिर मेल खाने वाले नाम वाली प्रक्रिया खोजने के लिए Process32FirstW और Process32NextW फ़ंक्शन का उपयोग करके स्नैपशॉट के माध्यम से पुनरावृति करता है। यदि मिल जाता है, तो यह प्रक्रिया आईडी लौटाता है; अन्यथा, यह 0 लौटाता है।
DLLinjector फ़ंक्शन इनपुट के रूप में एक प्रक्रिया आईडी (pid) और एक DLL पथ लेता है। यह निर्दिष्ट DLL को लक्ष्य प्रक्रिया में इंजेक्ट करता है। यह इस प्रकार काम करता है: a. यह OpenProcess का उपयोग PROCESS_ALL_ACCESS फ्लैग के साथ लक्ष्य प्रक्रिया को खोलता है। b. यह GetModuleHandleW का उपयोग करके Kernel32 मॉड्यूल का हैंडल प्राप्त करता है। c. यह GetProcAddress का उपयोग करके Kernel32 के अंदर LoadLibraryW फ़ंक्शन का पता प्राप्त करता है। d. यह VirtualAllocEx का उपयोग करके लक्ष्य प्रक्रिया में मेमोरी आवंटित करता है। e. यह WriteProcessMemory का उपयोग करके DLL पथ को लक्ष्य प्रक्रिया में आवंटित मेमोरी में लिखता है। f. यह CreateRemoteThread का उपयोग करके लक्ष्य प्रक्रिया में एक रिमोट थ्रेड बनाता है और LoadLibraryW के पते और आवंटित मेमोरी को पैरामीटर के रूप में पास करता है। g. यदि थ्रेड निर्माण सफल होता है, तो यह true लौटाता है जो इंगित करता है कि DLL इंजेक्शन सफल रहा। main फ़ंक्शन इस कोड स्निपेट में प्रदान नहीं किया गया है। आप अपने स्वयं के एप्लिकेशन के अंदर इन फ़ंक्शन का उपयोग प्रक्रिया नाम और DLL पथ को इनपुट के रूप में प्रदान करके लक्ष्य प्रक्रिया में एक DLL इंजेक्ट करने के लिए कर सकते हैं।
कृपया ध्यान दें कि DLL इंजेक्शन एक तकनीक है जिसके विभिन्न अनुप्रयोग हैं, जिसमें वैध उपयोग के मामले (जैसे डिबगिंग और कार्यक्षमता का विस्तार) और दुर्भावनापूर्ण उद्देश्य (जैसे मैलवेयर इंजेक्ट करना या बिना प्राधिकरण के किसी प्रक्रिया के व्यवहार को संशोधित करना) शामिल हैं। ऐसी तकनीकों का उपयोग करने से पहले सावधानी बरतें और सुनिश्चित करें कि आपके पास उपयुक्त अनुमतियाँ और कानूनी अधिकार हैं।