
إطار عمل C2 متعدد المشغلين مع وكلاء أصليين بلغة C وPython، وقنوات HTTP(S)، ومهام غير متزامنة، وواجهة ويب تفاعلية لعمليات فريق الاختراق.
Striker هو برنامج قيادة وتحكم (C2) بسيط.


هذا المشروع قيد التطوير النشط. معظم الميزات تجريبية، وسيأتي المزيد. توقع تغييرات جذرية.
أ) الوكلاء (Agents)
ب) الخلفية / خادم الفريق (Backend / Teamserver)
ج) واجهة المستخدم (User Interface)
انسخ المستودع؛
$ git clone https://github.com/4g3nt47/Striker.git
$ cd Striker
تنقسم قاعدة الشيفرة إلى 4 أقسام مستقلة؛
هذا يتعامل مع جميع منطق الخادم لكل من المشغلين والعملاء. وهو تطبيق NodeJS مصنوع باستخدام؛
express - لـ REST API.socket.io - للاتصال عبر Web Socket.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
هذه هي واجهة الويب التي يستخدمها المشغلون. وهي تطبيق ويب من صفحة واحدة مكتوب بلغة Svelte، والشيفرة المصدرية موجودة في دليل frontend/.
لإعداد الواجهة الأمامية؛
$ cd frontend
$ npm install
.env مع المتغير VITE_STRIKER_API مضبوطًا على عنوان URL الكامل لخادم C2 كما تم تكوينه أعلاه؛VITE_STRIKER_API=https://c2.striker.local
$ npm run build
سيقوم ما سبق بتجميع كل شيء في تطبيق ويب ثابت في دليل dist/. يمكنك نقل جميع الملفات بداخله إلى جذر الويب لخادم الويب الخاص بك، أو حتى استضافته باستخدام خادم HTTP أساسي مثل خادم بايثون؛
$ cd dist
$ python3 -m http.server 8000
Register.REGISTRATION_KEY في backend/.env).سيؤدي هذا إلى إنشاء حساب مستخدم عادي. ستحتاج إلى حساب مسؤول للوصول إلى بعض الميزات. يجب إنشاء حساب المسؤول الأول يدويًا، وبعد ذلك يمكنك ترقية حسابات الآخرين أو خفضها في علامة تبويب Users في واجهة الويب.
لإنشاء حساب المسؤول الأول؛
users واضبط حقل admin للمستخدم المستهدف على true;هناك طرق مختلفة للقيام بذلك. إذا كان لديك mongo متوفرًا في سطر الأوامر، يمكنك القيام بذلك باستخدام؛
$ mongo <your MongoDB connection URL>
> db.users.updateOne({username: "<your username>"}, {$set: {admin: true}})
يجب أن تحصل على الرد التالي إذا نجح الأمر؛
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
يمكنك الآن تسجيل الدخول :)
أ) إعادة التوجيه عبر أنبوب بسيط (Dumb Pipe Redirection)
يتوفر موجه أنبوب بسيط مكتوب لـ Striker في redirector/redirector.py. من الواضح أن هذا سيعمل فقط مع حركة HTTP العادية، أو مع HTTPS عند تعطيل التحقق من SSL (يمكنك القيام بذلك عن طريق تمكين ماكرو INSECURE_SSL في وكيل C).
المثال التالي يستمع على المنفذ 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...
ب) خادم Nginx العكسي كموجه (Nginx Reverse Proxy as Redirector)
$ sudo apt install nginx
/etc/nginx/sites-available/striker)؛العناصر النائبة؛
<domain-name> - هذا هو اسم المضيف الكامل (FQDN) لخادمك، ويجب أن يتطابق مع الموجود في شهادة SSL الخاصة بك.<ssl-cert> - ملف شهادة SSL المستخدم.<ssl-key> - ملف مفتاح SSL المستخدم.<c2-server> - عنوان URL الكامل لخادم C2 لإعادة توجيه الطلبات إليه.تحذير: يجب أن يكون client_max_body_size كبيرًا بقدر الحجم المحدد بواسطة MAX_UPLOAD_SIZE في ملف backend/.env الخاص بك، وإلا ستفشل تحميلات الملفات الكبيرة.
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، ويمكن اختباره باستخدام (بافتراض أن اسم المضيف الكامل هو striker.local)؛
$ curl https://striker.local
إذا نجح الأمر، يجب أن تحصل على رد 404 الذي يستخدمه الخادم الخلفي، مثل؛
{"error":"Invalid route!"}
أ) وكيل C (The C Agent)