Это ферма Vampiraut из команды QarabagTeam для CTF соревнований формата Attack-Defense. Подробнее о соревнованиях вы можете прочитать here.
Ферма работает по принципу регулярного запуска написанных сплойтов для всех команд, парсингом результата работы, извлечением оттуда флагов и отправкой их в систему проверки. Ферма имеет удобный графический интерфейс для Windows. Она способна работать в нескольких потоках, обрабатывая каждую функцию системы в отдельном потоке.
Ферма написана на языке программирования C#, на платформе .NET 6.0, applications .NET Windows Form, тесты на ОС Windows 11 версии 21H2.
Пакеты nuget:
- Microsoft.Data.Sqlite
- Загрузите решение с GitHub
- Откройте VQTFarm.sln и запустите проект ИЛИ откройте VQTFarm.exe внутри каталога ..\VQTFarm\bin\Debug\net6.0-windows.
- Введите первые настройки в открывшемся окне
- Нажмите кнопку "Развернуть ферму".
В главном окне программы вы можете управлять необходимыми параметрами работы и настраивать их:
- Настройки - настройки фермы:
- Добавить команду вручную - ручное добавление команды в список атакуемых команд с указанием их IP и имени.
- Автоматическая генерация команд - автоматическая генерация команд в заданном диапазоне IP-адресов в список атакуемых команд с присвоением им IP-адреса и имени по умолчанию.
- Запустить/остановить ферму - включение/отключение программных потоков. Останавливает ферму, отключая отправку флагов и обновление таблиц.
- Включить автоматический парсинг команд - включение функции автоматического парсинга команд с борды при условии наличия рабочего скрипта. Обновляет данные команды один раз в раунд: их позицию, название, IP-адрес и флаг поинты.(рабочий скрипт должен быть выбран в начальном окне и добавлен в папку с соответствующими скриптами)
- Проверка подключения - включает функцию проверки доступности чек-системы. После нажатия вам нужно выбрать скрипт python.
- Показать - включает/отключает элементы рабочего окна. В дополнение к визуальному отключению их, это останавливает рабочий поток, связанный с этим элементом.
- Отключить всплывающие сообщения - включает/отключает отображение уведомлений, предупреждений и ошибок.
- Исправьте таблицы - исправляет ошибку с таблицами, когда они перестают отображать информацию.
- Справка - показывает информацию из этого блока.
- Ручная отправка - панель для отправки флагов вручную.
- Тест сплойта - проверка работоспособности сплойтов перед их добавлением в основной процесс, с выбором атакуемой команды.
- Команды - таблица с указанием команд (их позиция, название, IP, флаг поинты). Доступна пагинация.
- Статус флага - таблица, показывающая отправленные флаги (каким сплоитом он был получен, с какой команды, какой флаг, время отправки, статус и ответ от чек-системы). Также отображается общее количество отправленных флагов и принятых флагов. Доступна пагинация.
- Flag show filter - панель с настройками фильтра для отображения информации о флагах в таблице из предыдущего пункта.
Протоколы пишуться на языке программирования Python. После написания протокола этот файл следует добавить в соответствующую папку. Example:
import sys
from datetime import datetime
import requests
import sqlite3
'''
your import
'''
url = sys.argv[1]
flags = re.findall(r'[A-Z0-9]{31}=', sys.argv[2])
token = sys.argv[3]
team_name = sys.argv[4]
exploit_name = sys.argv[5]
'''
your request
'''
path = sys.argv[0]
while path[len(path) - 1] != '\\':
path = path[:-1]
path = path[:-1]
while path[len(path) - 1] != '\\':
path = path[:-1]
path = path + "FarmInfo.db"
conn = sqlite3.connect(path)
cur = conn.cursor()
#example for RuCTF protocol (can be rewrited)
STATUS = {
"ACCEPTED": ["Flag accepted!"],
"DENIED": ["Flag is invalid or too old."]
}
for item in r.json():
response = item['msg'].strip()
response = response.replace('[{}] '.format(item['flag']), '')
status = ""
for key in STATUS:
for i in range(len(STATUS[key])):
if STATUS[key][i] in response:
status = key
break
if status == "":
status = "INVALIDE"
mess = (None, exploit_name, team_name, item['flag'], str(datetime.now()), status, response)
cur.execute("INSERT INTO FlagHistorys VALUES (?, ?, ?, ?, ?, ?, ?);", mess)
conn.commit()
conn.close()
Сплойты пишуться на языке программирования Python. Они должены содержать импорт библиотеки "sys" и получение ip-адреса атакуемой команды через sys.argv[1]. Результат работы программы выводится с помощью print(flags), как вы пожелаете. После написания этот файл должен быть добавлен в папку Sploits. Example:
import sys
#your import
ip = sys.argv[1]
#your code is written here
print(flags) #as you wish
- Предстартовые настройки фермы
- Главное окно
Если у вас возникнут какие-либо проблемы - обращайтесь в telegram: @Grime_Reaper