
विंडोज शेलकोड रनर और सहायक उपयोगिताओं का एक भंडार। एप्लिकेशन विभिन्न API कॉल या तकनीकों का उपयोग करके शेलकोड को लोड और निष्पादित करते हैं।
go-shellcode विंडोज शेलकोड रनर और सहायक उपयोगिताओं का एक भंडार है। एप्लिकेशन विभिन्न API कॉल या तकनीकों का उपयोग करके शेलकोड लोड और निष्पादित करते हैं।
उपलब्ध शेलकोड रनर में शामिल हैं:
यह एप्लिकेशन Kernel32.dll से विंडोज CreateFiber फ़ंक्शन का उपयोग करके इस एप्लिकेशन की प्रक्रिया के भीतर शेलकोड निष्पादित करता है। यह उपयोगी है जब आप रिमोट प्रक्रिया इंजेक्शन से बचना चाहते हैं और CreateThread को कॉल करने से बचना चाहते हैं। यह एप्लिकेशन golang.org/x/sys/windows पैकेज के फ़ंक्शंस का उपयोग नहीं करता। सबसे महत्वपूर्ण अंतर यह है कि यह एप्लिकेशन स्वयं सभी आवश्यक DLL और प्रक्रियाओं को लोड करता है और प्रक्रिया के Call() फ़ंक्शन का उपयोग करता है।
नोट: मैंने प्रक्रिया से बाहर निकलने का तरीका नहीं खोजा है और आपको इसे मैन्युअल रूप से समाप्त करना होगा।
एप्लिकेशन को प्रोजेक्ट की रूट डायरेक्टरी से विंडोज होस्ट पर निम्नलिखित कमांड के साथ संकलित किया जा सकता है:
set GOOS=windows GOARCH=amd64;go build -o CreateFiber.exe .\cmd\CreateFiber\main.go
यह एप्लिकेशन Kernel32.dll से विंडोज CreateProcess फ़ंक्शन का उपयोग करता है। प्रक्रिया को निलंबित अवस्था में बनाया जाता है, IMAGE_OPTIONAL_HEADER संरचना में AddressOfEntryPoint को चाइल्ड प्रक्रिया में शेलकोड निष्पादित करने के लिए अपडेट किया जाता है, और फिर प्रक्रिया को फिर से शुरू किया जाता है। यह एक प्रकार का प्रोसेस हॉलोइंग है लेकिन मौजूदा PE को मैप नहीं किया गया है और ThreadContext को अपडेट नहीं किया गया है। प्रदान की गई शेलकोड आर्किटेक्चर (जैसे x86 या x64) चाइल्ड प्रक्रिया की आर्किटेक्चर से मेल खाना चाहिए।
एप्लिकेशन को प्रोजेक्ट की रूट डायरेक्टरी से विंडोज होस्ट पर निम्नलिखित कमांड के साथ संकलित किया जा सकता है:
set GOOS=windows GOARCH=amd64;go build -o CreateProcess.exe .\cmd\CreateProcess\main.go
यह एप्लिकेशन Kernel32.dll से विंडोज CreateProcess फ़ंक्शन का उपयोग करता है। प्रक्रिया को निलंबित अवस्था में बनाया जाता है, IMAGE_OPTIONAL_HEADER संरचना में AddressOfEntryPoint को चाइल्ड प्रक्रिया में शेलकोड निष्पादित करने के लिए अपडेट किया जाता है, और फिर प्रक्रिया को फिर से शुरू किया जाता है। यह एक प्रकार का प्रोसेस हॉलोइंग है लेकिन मौजूदा PE को मैप नहीं किया गया है और ThreadContext को अपडेट नहीं किया गया है। प्रदान की गई शेलकोड आर्किटेक्चर (जैसे x86 या x64) चाइल्ड प्रक्रिया की आर्किटेक्चर से मेल खाना चाहिए।
यह एप्लिकेशन CreateProcess से भिन्न है क्योंकि यह चाइल्ड प्रक्रिया में STDOUT या STDERR पर लिखे गए किसी भी डेटा को एकत्र करेगा और उसे पैरेंट प्रक्रिया में वापस करेगा। डेटा को CreatePipe फ़ंक्शन का उपयोग करके एक अनाम पाइप बनाकर एकत्र किया जाता है जिस पर पैरेंट और चाइल्ड प्रक्रिया संचार करती हैं। यह उपयोगी है जब Donut जैसे टूल का उपयोग करके एक .NET असेंबली को चाइल्ड प्रक्रिया में शेलकोड के रूप में निष्पादित किया जाता है और निष्पादित प्रोग्राम का आउटपुट प्राप्त किया जाता है। Donut v0.9.3 के साथ Seatbelt चलाने के लिए स्थिति-स्वतंत्र शेलकोड उत्पन्न करने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है:
.\donut.exe -o donut_v0.9.3_Seatbelt.bin -x 2 -c Seatbelt.Program -m Main -p "ARPTable" Seatbelt.exe
एप्लिकेशन को प्रोजेक्ट की रूट डायरेक्टरी से विंडोज होस्ट पर निम्नलिखित कमांड के साथ संकलित किया जा सकता है:
set GOOS=windows GOARCH=amd64;go build -o CreateProcessWithPipe.exe .\cmd\CreateProcessWithPipe\main.go
यह एप्लिकेशन Kernel32.dll से विंडोज CreateRemoteThread फ़ंक्शन का उपयोग करके रिमोट प्रक्रिया में शेलकोड निष्पादित करता है। एप्लिकेशन के लिए आवश्यक है कि इंजेक्ट करने के लिए लक्ष्य प्रक्रिया पहले से चल रही हो। परीक्षण के लिए रनटाइम पर -pid कमांड लाइन फ़्लैग का उपयोग करके लक्ष्य प्रक्रिया पहचानकर्ता (PID) प्रदान किया जा सकता है। परिचालन उपयोग के लिए निम्नलिखित कोड लाइन में 0 को अपने लक्ष्य PID से बदलकर PID को हार्डकोड करें:
pid := flag.Int("pid", 0, "Process ID to inject shellcode into")
यह एप्लिकेशन जहाँ संभव हो, golang.org/x/sys/windows पैकेज के फ़ंक्शंस का उपयोग करता है, जैसे windows.OpenProcess()। एप्लिकेशन को प्रोजेक्ट की रूट डायरेक्टरी से विंडोज होस्ट पर निम्नलिखित कमांड के साथ संकलित किया जा सकता है:
set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThread.exe .\cmd\CreateRemoteThread\main.go
यह एप्लिकेशन Kernel32.dll से विंडोज CreateRemoteThread फ़ंक्शन का उपयोग करके रिमोट प्रक्रिया में शेलकोड निष्पादित करता है। एप्लिकेशन के लिए आवश्यक है कि इंजेक्ट करने के लिए लक्ष्य प्रक्रिया पहले से चल रही हो। परीक्षण के लिए रनटाइम पर -pid कमांड लाइन फ़्लैग का उपयोग करके लक्ष्य प्रक्रिया पहचानकर्ता (PID) प्रदान किया जा सकता है। परिचालन उपयोग के लिए निम्नलिखित कोड लाइन में 0 को अपने लक्ष्य PID से बदलकर PID को हार्डकोड करें:
pid := flag.Int("pid", 0, "Process ID to inject shellcode into")
यह एप्लिकेशन golang.org/x/sys/windows पैकेज के फ़ंक्शंस का उपयोग नहीं करता। सबसे महत्वपूर्ण अंतर यह है कि यह एप्लिकेशन स्वयं सभी आवश्यक DLL और प्रक्रियाओं को लोड करता है और प्रक्रिया के Call() फ़ंक्शन का उपयोग करता है। एप्लिकेशन को प्रोजेक्ट की रूट डायरेक्टरी से विंडोज होस्ट पर निम्नलिखित कमांड के साथ संकलित किया जा सकता है:
set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThreadNative.exe .\cmd\CreateRemoteThreadNative\main.go
यह एप्लिकेशन Kernel32.dll से विंडोज CreateThread फ़ंक्शन का उपयोग करके इस एप्लिकेशन की प्रक्रिया के भीतर शेलकोड निष्पादित करता है। यह उपयोगी है जब आप रिमोट प्रक्रिया इंजेक्शन से बचना चाहते हैं। यह एप्लिकेशन जहाँ संभव हो, golang.org/x/sys/windows पैकेज के फ़ंक्शंस का उपयोग करता है, जैसे windows.VirtualAlloc()। एप्लिकेशन को प्रोजेक्ट की रूट डायरेक्टरी से विंडोज होस्ट पर निम्नलिखित कमांड के साथ संकलित किया जा सकता है:
set GOOS=windows GOARCH=amd64;go build -o CreateThread.exe .\cmd\CreateThread\main.go