Давно хотел поработать со SCADA и данная машина показалась мне очень интересной. Первый write-up был уровень easy, теперь возьмем medium. Сам Industrial Intrusion CTF еще не начался и флаг здесь указывать не буду, потому надеюсь TryHackMe не будут сильно ругаться 🙂
Наша задача следующая — найти способ открыть ворота, минуя систему аутентификации по бейджу. Обращаем внимание на главную подсказку — обязательно проверьте все открытые порты. Начнем.
Быстро сканируем все порты, определяя версии сервисов и применяя скрипты для сбора дополнительной инфы
nmap -sC -sV -p- -T4 10.10.184.80
Видим следующее
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 60:bf:ec:ad:d7:e8:5d:d6:00:35:d7:88:44:62:58:87 (ECDSA)
|_ 256 d2:60:eb:70:dc:6f:21:f9:6a:ec:5f:05:2f:3e:68:45 (ED25519)
80/tcp open http Werkzeug httpd 3.1.3 (Python 3.12.3)
|_http-server-header: Werkzeug/3.1.3 Python/3.12.3
102/tcp open iso-tsap?
502/tcp open mbap?
1880/tcp open vsat-control?
8080/tcp open http Werkzeug httpd 2.3.7 (Python 3.12.3)
|_http-server-header: Werkzeug/2.3.7 Python/3.12.3
44818/tcp open EtherNetIP-2?
Теперь вы понимаете важность подсказки про порты?) Пройдемся по ним
Senior SCADA specialists прошу сильно не ругаться, если я буду в чем-то не прав 🙂
С 22 и 80 думаю все понятно, но что касательно остальных? Воспользовавшись поисковиком делаем короткую сводку
102 — применяется в промышленных системах для передачи данных между контроллерами
502 — стандартный порт для протокола Modbus (промышленные контроллеры, SCADA)
1880 — иногда используется для управления VSAT (спутниковые терминалы) или для Node-RED (IoT)
8080 — еще один http сервер на Python, в дальнейшем посмотрим что на нем
44818 — еще один порт каких-то промышленных контроллеров
Для начала посмотрим на 80 порт.
Видим страницу, которая говорит нам о том, что ворота закрыты

Попробуем зайти через браузер на 8080 и 1880
На порту 8080 видим OpenPLC Webserver — веб-интерфейс для управления и мониторинга программируемого логического контроллера OpenPLC.

В CTF бывает важно уметь отличать нужный вектор от ложного, я поискал разные CVE к нему, попробовал эксплойты, даже немного побрутил, но быстро понял, что стандартные openplc/openplc не подходят, а без них PoC’и не работали.
Идем дальше на 1880 и видим Node-RED — инструмент для визуального программирования, часто используемый для автоматизации и интеграции IoT-устройств. Пробуем залогиниться кредами из гугла, не получается, начинаем смотреть, что здесь вообще есть.

У нас есть Detector и Badge — смотрим на изображение на 80 порту и понимаем, что скорее всего эти штуки нужно как-то отключить, чтобы ворота открылись. Но как?
Просматриваем функции, смотрим разные кнопочки, но судя по всему так как мы не залогинены ничего не получается. Читаем документацию и находим следующее —
node-red-dashboard
Собственно дальше 2 варианта — первый применить что-то по типу gobuster
gobuster dir -u http://10.10.184.80:1880 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Видим вывод

Второй вариант — внимательно прочитать документацию и увидеть вот это

Переходим на страницу

Супер. Теперь как в кино — что отключать? Отключаем все 🙂
Возвращаемся на интерфейс на 1880 порту и видим как Motion Detector и Badge покраснели

Переходим на страницу на 80 порту и видим следующее

Ворота открыты и внизу наш флаг
Поздравляю. Надеюсь было полезно