Skip to content

Latest commit

 

History

History
122 lines (96 loc) · 8.05 KB

READMERus.md

File metadata and controls

122 lines (96 loc) · 8.05 KB

VQTFarm (Работа продолжается, поэтому может содержать ошибки!!!)

Это ферма Vampiraut из команды QarabagTeam для CTF соревнований формата Attack-Defense. Подробнее о соревнованиях вы можете прочитать here.

Ферма работает по принципу регулярного запуска написанных сплойтов для всех команд, парсингом результата работы, извлечением оттуда флагов и отправкой их в систему проверки. Ферма имеет удобный графический интерфейс для Windows. Она способна работать в нескольких потоках, обрабатывая каждую функцию системы в отдельном потоке.

Ферма написана на языке программирования C#, на платформе .NET 6.0, applications .NET Windows Form, тесты на ОС Windows 11 версии 21H2.

Требования

Пакеты nuget:

  1. Microsoft.Data.Sqlite

ЗАПУСК ФЕРМЫ

  1. Загрузите решение с GitHub
  2. Откройте VQTFarm.sln и запустите проект ИЛИ откройте VQTFarm.exe внутри каталога ..\VQTFarm\bin\Debug\net6.0-windows.
  3. Введите первые настройки в открывшемся окне
  4. Нажмите кнопку "Развернуть ферму".

Помощь

В главном окне программы вы можете управлять необходимыми параметрами работы и настраивать их:

  1. Настройки - настройки фермы:
    1. Добавить команду вручную - ручное добавление команды в список атакуемых команд с указанием их IP и имени.
    2. Автоматическая генерация команд - автоматическая генерация команд в заданном диапазоне IP-адресов в список атакуемых команд с присвоением им IP-адреса и имени по умолчанию.
    3. Запустить/остановить ферму - включение/отключение программных потоков. Останавливает ферму, отключая отправку флагов и обновление таблиц.
    4. Включить автоматический парсинг команд - включение функции автоматического парсинга команд с борды при условии наличия рабочего скрипта. Обновляет данные команды один раз в раунд: их позицию, название, IP-адрес и флаг поинты.(рабочий скрипт должен быть выбран в начальном окне и добавлен в папку с соответствующими скриптами)
    5. Проверка подключения - включает функцию проверки доступности чек-системы. После нажатия вам нужно выбрать скрипт python.
    6. Показать - включает/отключает элементы рабочего окна. В дополнение к визуальному отключению их, это останавливает рабочий поток, связанный с этим элементом.
    7. Отключить всплывающие сообщения - включает/отключает отображение уведомлений, предупреждений и ошибок.
    8. Исправьте таблицы - исправляет ошибку с таблицами, когда они перестают отображать информацию.
  2. Справка - показывает информацию из этого блока.
  3. Ручная отправка - панель для отправки флагов вручную.
  4. Тест сплойта - проверка работоспособности сплойтов перед их добавлением в основной процесс, с выбором атакуемой команды.
  5. Команды - таблица с указанием команд (их позиция, название, IP, флаг поинты). Доступна пагинация.
  6. Статус флага - таблица, показывающая отправленные флаги (каким сплоитом он был получен, с какой команды, какой флаг, время отправки, статус и ответ от чек-системы). Также отображается общее количество отправленных флагов и принятых флагов. Доступна пагинация.
  7. 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

Первый взгляд

  1. Предстартовые настройки фермы

Предустановленные настройки фермы

  1. Главное окно

Главное окно

Обратная связь

Если у вас возникнут какие-либо проблемы - обращайтесь в telegram: @Grime_Reaper

Продолжение скоро будет