• XSS.stack #1 – первый литературный журнал от юзеров форума

чекер BruteCore - Универсальный брут/чекер

0xUser

RAM
Пользователь
Регистрация
30.07.2021
Сообщения
104
Реакции
284
Гарант сделки
1
1707040190035.png
Введение
Когда я только увидел что обьявлен новый конкурс на ХСС, сразу решил что буду участвовать. Однако возник вопрос, с каким проектом лучше всего зайти в конкурс. Я долго выбирал между тем, чтобы написать мессенджер на замену Токса с обнаруженной RCE, или же написать брут, которых я написал целую кучу и тележку на Delphi. Но понял, что начни делать я месседжер то я точно не успею, да и опыт написания брутов/чекеров у меня весьма обширный. Я писал их на любой вкус и цвет, разбирал мобильные приложения, разбирался в шифрования на различных сайтах. С учетом всех этих аспектов я понял, что я буду делать. Но вопрос был в другом, брут должен быть по настоящему уникальным, а не просто еще одним брутом под один сайт с загрузкой базы и проксей.

Преимущества:
1. Все в одном месте
Когда часто занимаешься написанием брутов, у тебя скапливается целая куча всего — скомпилированные бруты с результатами, исходники. Это всё разбросано по разным папкам и как-то неудобно. А если добавить к этому еще какую-то фичу, приходится заходить в каждый софт, дописывать и компилировать, что забирает уйму времени.
2. Современный стек
Обычно бруты пишут на Delphi или C#, но эти языки уже немного устарели для этой задачи. Либо же бруты пишут с использованием OpenBullet или Private Keeper, и таких была еще целая куча, но остальные как-то не сильно прижились. Я выбрал Golang за его выдающуюся производительность при высоких нагрузках и эффективную работу в многопоточке. Это может быть не тот же ООП-язык, но для поставленных целей он отлично подходит.
3. Кросс-платформенность
Большинство брутов создаются под Windows для удобства конечного пользователя. Но использование Golang позволяет компилировать его под различные операционные системы без проблем. Так что помимо Windows, мы можем легко работать на серверах под Linux, что добавляет гибкости и многофункциональности.
4. Web-морда вместо GUI
Те, кто брутит, обычно используют выделенные серверы с Windows, управляя ими через RDP. Это дорого и не всегда удобно. Работать с брутом как с веб-сайтом гораздо удобнее. Открываешь вкладку в браузере и работаешь там.
5. Сохранение всех настроек в пресеты
Для того чтобы не вводить настройки каждый раз заново, я реализовал пресеты. Указал источник прокси, их тип, и потом просто выбираешь этот пресет. Также сохраняется остаток, результаты можно скачать в txt или xlsx формате. Также если брут был остановлен по какой-либо причине его можно запустить повторно и не нужно брать остаток запихивать его по новому и прописывать все настройки снова, что как по мне тоже очень удобно.
6. Никаких ограничений ядра для разработчиков
В универсальных брутах накладываются определенные ограничения на разработчиков проектов. У меня модуль — это микросервис с одним эндпоинтом, и его можно написать на любом компилируемом языке. Входные данные в него, он выполняет свою магию и говорит гуд, бед, ошибка и так далее. Никаких ограничений ядра для разработчиков.

Инструкция по использованию
Алгоритм использования программы примерно следующий:
  1. Загружаете базку
  2. Создаете новый прокси пресет
  3. Подгружаете модуль
  4. Создаете сессию, выбираете то, что создали выше и после чего стартуете.
Теперь давайте пробежимся по каждому пункту подробнее

Комбо листы
1707040541328.png

Для удобства хранения баз данных я добавил возможность создавать папки и группировать базы внутри них. Учитывая, что баз данных может быть много и по разным темам, это сделает навигацию проще. Просто кликните правой кнопкой мыши в свободном месте и выберите "Создать папку" или "Создать комбо-лист".

Чтобы создать папку, достаточно ввести название папки в появившемся модальном окне после нажатия правой кнопки мыши.

Комбо-лист работает немного по-другому. Он позволяет объединить несколько файлов или ссылок, чтобы сформировать один общий список. Например, вы можете указать файл на сервере и ссылку на Sendspace, где также хранится база данных, и получить один комбо-лист с данными из нескольких источников. Вы также можете указать одну ссылку или файл, в зависимости от вашего удобства. При создании комбо-листа нужно указать тип данных, которые будут включены в него.

1707040590170.png

Пока что, в настоящее время можно только указывать прямые ссылки на файлы, что действительно удобно, если ваши базы данных хранятся в облаке. Второй вариант загрузки баз из файла, который находится на той же машине, где запущен софт. Пока не сделал возможность выбирать файл с той тачки, где сидит пользователь. Я решил не включать эту функцию пока что, потому что знаю, что некоторые пользователи загружают огромные базы с несколькими миллионами строк и оставляют это на ночь. Загрузить такие большие базы данных сюда было бы довольно сложно, поэтому я решил отложить эту функцию на потом. Однако, если вы запускаете софт на той же машине, где и находитесь вы, то указание пути к файлу не представляет проблем.
CombolistDirectLink.png

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

Прокси пресеты
Снимок экрана 2024-02-04 160122.png

Тут это выглядит примерно следующим образом, собственно имеет определенную схожесть с комбо-листами, только здесь я не стал делать папки. Как правило прокси грузят либо из файла, каждый раз разные, либо по АПИ ссылке всяких сервисов таких как адвансы, бесты или авм, вообщем по вкусу и цвету... и там уже они в режиме реального времени обновляются с какой-либо переодичностью. Бывали и такие случаи когда прокси записывают в файлик на диске и уже из него обновляют с определенной переодичностью в бруте. В этом плане использовать пресеты удобно использовать. На случай если это разовая загрузка из файла, в котором прокси быстро сдохнут, то можно не создавать пресет, а сразу грузить прокси в сессии, для этого есть отдельная кнопка в сессиях, выбираете ее и грузите там уже свой файл с диска.

Но все же давайте вернемся к пресетам.

ProxyPreset.png

При использовании пресета для загрузки прокси по ссылке или из файла на диске, вы указываете наименование пресета. Если прокси будут обновляться с определенной периодичностью, вы ставите галочку напротив интервала и указываете время в секундах.
Таймаут соединения с сайтом для прокси подразумевается как обычно, это время ожидания ответа от сервера при подключении к нему.
Как и в случае с комбо-листами, вы можете указать несколько источников, из которых будут браться прокси. Если файл находится на вашей тачке, то автообновление прокси для него не будет работать, и программа будет всегда брать данные из загруженного вами файла. Это вполне логично.
Для удаленных файлов и ссылок автообновление будет активно. Вы можете выбрать несколько типов прокси: HTTP/S, SOCKS4, SOCKS5. Это означает, что в одной сессии брута могут использоваться сразу несколько разных типов прокси. Это удобно, так как вы можете указать несколько ссылок с разными типами прокси, и программа будет использовать их все вместе.


Модули
1707041123799.png


Собственно сама вкладка очень простая, жмякаете добавить, загружаете файлик модуля и он подтягивает его в эту вкладку. А вот как делать сами модули, это уже отдельная история.
Модуль представляет собой независимый микросервис со своей собственной спецификацией написания. Хотя модуль можно писать на любом языке программирования, я бы все-таки рекомендовал использовать Go, поскольку он компилируется в единый исполняемый файл и легко запускается на любой платформе. Однако следует помнить, что если ваш BruteCore запущен на Linux, то модуль также должен быть скомпилирован под Linux, и аналогично для Windows.
Когда вы загружаете модуль, он запускается с параметром "-getinfo", и модуль должен вернуть JSON следующего формата:

JSON:
{
    "name": "TestModule", 
    "version": "1.0.0.0",
    "author": "0xUser",
    "data_type": 9
}

Поле "data_type" определяет тип данных комбо-листа, с которым работает модуль. Вот возможные значения:
Код:
4   DATA_TYPE EMAIL
5   DATA_TYPE USERNAME
6   DATA_TYPE PASSWORD
7   DATA_TYPE PIN
8   DATA_TYPE USERNAME:PASSWORD
9   DATA_TYPE EMAIL:PASSWORD
10  DATA_TYPE DATA

Все вышеперечисленные типы вы можете найти в таблице reference в БД которая лежит рядом с проектом. Если какого-либо поля из выше приведенного формата json нету в модуле, BruteCore установит значение none, как выше на картинке в поле “Версия”. Сами модули сохраняются в папке modules рядом с софтом.
Если какого-либо поля из вышеприведенного JSON отсутствует в модуле, BruteCore установит его значение в "none".
Модули сохраняются в папке "modules" рядом с программой.
При запуске модуля для перебора, он вызывается с аргументом "-port", указывающим порт, на котором должен быть запущен микросервис.
Модуль должен иметь эндпоинт POST "/ExecuteModule", который принимает JSON следующего формата:

JSON:
{
  "email": "0xUser@0xuser.cf",
  "username": "0xUser",
  "password": "xss.password",
  "pin": "1234",
  "data": "example_data",
  "timeout": 15000,
  "proxy_host": "127.0.0.1",
  "proxy_port": 8080,
  "proxy_type": 18
}

Практически все поля являются опциональными. Практически все поля являются опциональными, некоторые из них могут отсутствовать, например если брут идет без прокси то соответствующих полей в json не будет, если был выбран 9 тип комбо-листа то будут присутствовать поля email и password и уже соответственно по разным типам комбо-листа. Сервис проводит определенные действия с данными и возвращает JSON следующего вида:
JSON:
{
  "status": 25,
  "log": "proxy: 127.0.0.1:8080 \n some additional data in log"
}

Поле log является опциональным и впринципе может отсутствовать если оно вам не нужно. Статус может иметь следующие значения:

Код:
25  RESULT  Хорошие
26  RESULT  Плохие
27  RESULT  Ошибки Соединения
28  RESULT  Ошибки ПО
29  RESULT  Капча
30  RESULT  С балансом
31  RESULT  Пустышки
32    RESULT    Зарегестрирован
33    RESULT    Залимиченные

По идее всю основную работу делают модули, сам же БрутКор выступает в роли некоего оркестратора, который запускает нужный сервис, поддерживает его в рабочем состоянии, отправляет на него входные данные, дальше происходит модульная магия, “особые физико-математические вычисления” в результате которых мы и узнаем гуд, бэд это или еще что-то.
ВАЖНО!! Поскольку мы работает уже с скомпилированными модулями, там могут быть всякие “закладки”, ведь тут для разработчика нет абсолютно никаких ограничений в плане того какой код писать какие библиотеки использовать и т.д., поэтому стоит быть очень аккуратным и использовать модуль только от доверенных людей, либо писать модули самому. Береженного бог бережет!
Ниже в статье вы можете найти пример готового модуля и использовать его как шаблон для написания своих модулей.


Сессии
1707041569245.png

В сессиях все относительно просто, создаете новую сессию кнопочкой добавить потом нажимаете на стрелочку справа и переходите к деталям конкретной сессии.
1707041605852.png

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

Менять прокси лист, комбо лист или модуль во время перебора вообще не желательно. Но вы можете поменять количество потоков прям во время работы, софт автоматически подхватит количество потоков и при необходимости избавится от лишних, либо создаст новые неостающие. Что бы получить статистику по бруту нужно нажимать на кнопку обновить справа от слова статистика, да возможно это не удобно, может следовало сделать что бы он по вебсокетам обновлял статистику, ну хз, не захотел делать дополнительную нагрузку на софт. Результаты соответственно можно посмотреть нажав на кнопку результаты, откроется следующая вьюшка.
1707041652036.png

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

Результат можно скачать в друх форматах, либо txt, либо xlsx, думаю кто работал с экселем обязательно заценит. Если по гудам были какие-то логи то они будут в правой колонки с логом. Тут уже зависит от проекта который вы запускаете.

Инструкция по использованию


Устанавливаем Node.js с официальнго сайта https://nodejs.org/en/download.
Устанавливаем Vue-cli командой npm install -g @vue/cli.
Устанавливаем Golang с официального сайта https://go.dev/doc/install.
Качаем исходник фронтенда и бэкенда.
В папке с фронтом запускаем npm i в папке с бэком go mod tidy и go mod vendor.
Если планируете запускать BruteCore у себя на тачке локально, то нужно сделать следующее:

  1. В папке с фронтом запускаете команду npm run serve
  2. В папке с бэком запускаете команду go run .
  3. Переходите в браузере по localhost:8080
  4. Готово
Если будете запускать BruteCore на сервере, то нужно сделать следующее:
  1. В папке с фронтом, в файле src\main.js, на 12 строке меняете http://127.0.0.1:985 на свой домен или адрес сервера (например: http://0xuser.cf, http://255.255.255.255)
  2. В папке с фронтом запускаете npm run build, вьюшка соберет все исходники и создастся папка dist, в которой будут лежать все необходимое для фронта.
  3. В папке с исходник бекенда, в файле “.env” меняем значения AUTH_ADMIN_LOGIN, AUTH_ADMIN_PASSWORD, AUTH_VIEWER_LOGIN, AUTH_VIEWER_PASSWORD, JWT_KEY на свои, также нам нужно поменять значение JWT_KEY на любую строку, это ключ которым будут шифроваться jwt токены на сервере.
  4. В папке с бэком устанавливаем переменные окружения “set goos=linux, set goarch=amd64”, если на вашем серваке какая-то другая архитектура, то указываете свою архитектуру.
  5. Собираем бэк командой “go build main.go”
По итогу мы имеем папку dist с фронтом и исполняемый файл для linux с бэкендом. Теперь мы заходим на наш сервак и обновляем имеющиеся на нем пакеты до последней версии командами:
sudo apt update
sudo apt upgrade
Накатываем nginx командой:
sudo apt nginx
Копируем содержимое папки dist в папку /var/www/front.brutecore
Копируем скомпилированный main, .env, BruteCore.sqlite в папку /var/www/back.bruteforce
После запускаем команду chmod +x main
В папке /etc/nginx/sites-available создаем файл brutecore со следующим содержимым, где server_name localhost, “localhost” меняем на свой домен или адрес сервера:
NGINX:
server {
    listen      80;
    server_name localhost;
    charset utf-8;
    root    /var/www/front.brutecore;
    index   index.html;

    #Always serve index.html for any request
    location /Health { 
        proxy_pass http://127.0.0.1:985/Health;
    }

    location /api {
        proxy_pass http://127.0.0.1:985/api;
    }   

    location / {
        root /var/www/front.brutecore;
        try_files $uri  /index.html;
    }

    error_log  /var/log/nginx/vue-app-error.log;
    access_log /var/log/nginx/vue-app-access.log;
}
Дальше выполняем команду:
sudo ln -s /etc/nginx/sites-available/brutecore /etc/nginx/sites-enabled/
Также редактируем файл /etc/nginx/nginx.conf
Находим вот эти строки и раскоменчиваем их
Снимок экрана 2024-02-04 162041.png

Также нам надо рядом добавить строку: client_max_body_size 20M;
Это нужно что бы nginx сжимал стили и прочие скрипты, а также что бы мы могли без проблем загружать модули на сервер.

Перезапускаем nginx командой: sudo systemctl restart nginx
После чего запускаем бэкенд комагдой sudo nohup ./main &, и переходим в браузере по адресу нашего сервера или домена. Если все сделали правильно, то должно появиться окно входа и мы без проблем в нем авторизовываемся.
Если после входа в Учетку будете получать ошибку “failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub” то тогда нужно установить гошку на сервак, потом установить туда же gcc/g++ компилятор командой sudo apt-get install build-essential и после чего уже билдить приложение на серваке и оно будет работать.

Все исходники можно скачать по ссылке https://www.sendspace.com/file/2ujpbd
Специально развернул демку что бы можно было посмотреть как оно выглядит уже задеплоенное http://45.83.122.198/ Логин XSSViewer, Пароль: xss.is1pass
 

Вложения

  • 1707041138281.png
    1707041138281.png
    43.8 КБ · Просмотры: 178
Выглядит многообещающе, хвалю за старания.
Спасибо
А отдельно модули прикупить можно у тебя?)
Напиши в ЛС там и обсудим
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Интересный софт нужно бкдет сравнить с булкой
 
Хороший софт, однозначно будут использовать. Только сборка немного сложная. Можно как-то сократить количество действий которое нужно сделать для разворачивания софта?
 
Хороший софт, однозначно будут использовать. Только сборка немного сложная. Можно как-то сократить количество действий которое нужно сделать для разворачивания софта?
По идее можно запихнуть статику в бэк
Завтра все соберу выложу, нужно будет лишь экзешник запустить и все
Если на серваке, то лучше все таки будет через nginx запускать
 
По идее можно запихнуть статику в бэк
Завтра все соберу выложу, нужно будет лишь экзешник запустить и все
Если на серваке, то лучше все таки будет через nginx запускать
Спасибо за статью, однозначно лайк!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А что конкретно он брутит то?) Понятно что м:пассам а что именно, чет ни слова не нашел
Делаешь модуль под любой нужный сервис и потом чекаешь
 
А что конкретно он брутит то?) Понятно что м:пассам а что именно, чет ни слова не нашел
Как выше сказали, нужно писать модуль и брутить что угодно. По идее это больше сделано как для удобства брута, т.к. можно на том же серваке под линуксом запустить и уже со своей основной тачки заходить как в браузере.
кстати со сборкой пробелм вообще не было, хотя может кому реально удобней батник сделать
Ну я вот как раз таки переживал что с этим у кого-то могут быть проблемы, рад что у тебя сборка прошла гладко
Хороший софт, однозначно будут использовать. Только сборка немного сложная. Можно как-то сократить количество действий которое нужно сделать для разворачивания софта?
Как и обещал вчера

Ссылка на версию софта уже с собранным в него же фронтом, теперь просто достаточно будет одну программу запустить и все https://www.sendspace.com/file/6p9v41

Сурцы с бэка можно скачать отсюда https://www.sendspace.com/file/s5n1ey
На фронте только изменения в файле main.js, но эти изменения нужно делать только если фронт в бэк вшиваете
JavaScript:
import { createApp } from 'vue'
import App from './App.vue'
import './assets/tailwind.css'
import router from './router'
import contextmenu from "v-contextmenu";
import "v-contextmenu/dist/themes/default.css";

const app = createApp(App)

app.use(router)
app.use(contextmenu)

const currentUrl = window.location.href;
const parsedUrl = new URL(currentUrl);

let prefix = parsedUrl.protocol + '//' + parsedUrl.hostname;
if (parsedUrl.port) {
  prefix += ':' + parsedUrl.port;
}

app.provide('server_addr', prefix)

app.mount('#app')
 
Я немного не понял, модули это что то типа проектов под кипер или опенн буллет? Т.е на каждый отдельный сайт нужно писать свой проект/модуль?
Да, все именно так
I posted your post here (https://teletype.in/@blackhunt/56XHJICdnGr) thanks for the very good post i hope you win
thank you. glad to get your wishes
 
Молодец, отличная работа!
Как вариант можно сделать дополнительные формы ввода на стадии управления сессией.
Что бы параметры форм ввода прописывались в модуле вместе с заголочной информацией о версии, авторе и т.д.
 
Молодец, отличная работа!
Как вариант можно сделать дополнительные формы ввода на стадии управления сессией.
Что бы параметры форм ввода прописывались в модуле вместе с заголочной информацией о версии, авторе и т.д.
Впринципе можно сделать, думаю проблемой не будет
 
а какой пасс и логин? а то чет не увидел
В .env файле логин и пасс, можешь на свои поменять
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх