September 11, 2024

Разбор реализованных недопустимых событий на ВСКБ 2024

@fefuctf @collapsz


Вступление

Всем привет! 9-10 сентября в рамках Kazan Digital Week прошла Всероссийская Студенческая Кибербитва, по результатам которой составы ДВФУ LaCringe и FEFU Daemons заняли первые места в зачете красных и синих соответственно. В сегодняшнем материале предлагаю посмотреть на те 6 недопустимых событий, которые нам удалось реализовать за время соревнований. Приятного прочтения!

Сканирование периметра

Нам была предоставлена информация о скоупе внешнего периметра, со сканирования которого мы и начали – запустили nmap -A на всю подсеть по 24 маске:

nmap -A 10.14.100.0/24 -oN init

В результате получили внушительный текстовый файлик, содержащий результаты сканирования всех доступных в подсети хостов, которых оказалось 28:

# Nmap done at Mon Sep  9 03:07:23 2024 -- 256 IP addresses (28 hosts up) scanned in 866.37 seconds

Проанализировав найденные ресурсы, мы составили таблицу, где сопоставили айпи-адреса с их доменными именами

ip addresses

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

Кинотеатр Cinematrix. Изменение цен на билеты

Первым делом я решил начать с ресурса cinematrix.icp.

На главной странице располагалась информация об идущих фильмах и ценах на билеты, никакой полезной интерактивности веб-сайт не представлял, поэтому следующим этапом стало сканирование директорий, в результате которого были обнаружены следующие пути:

Путь /users:

/users

Путь /logs, содержавший информацию о наличии какого-то boolean параметра. После фаззинга параметров был найден параметр debug=True:

/logs?debug=True

В ходе анализа логов был найден JWT-токен пользователя Redactor. Мы использовали этот токен в качестве хедера Cookie и получили доступ к странице /redactor без авторизации:

/redactor

Форма выбора типа билета и ввода новой цены оказалось нефункциональной, однако это решилось при помощи удаления свойства disabled в html-коде соответствующих элементов. После этого появилась возможность выбрать тип билета и установить ему новую цену:

http request for a new price

Таким образом наше первое недопустимое событие было реализовано:

New price is set

Кинотеатр Cinematrix. Дефейс главной страницы

Дефейс – несанкционированное изменение содержимого страницы – было целью этого недопустимого события. Все шаги для его реализации были идентичны с предыдущим НС – взяли токен и получили доступ на страницу редактора, однако последний этап был иным: мы обратили внимание, как именно новая цена попадает в итоговый HTML-код и вместо цены ввели JS-код, заменяющий содержимое страницы:

Payload

В итоге получили следующий результат:

Defaced

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

Аэропорт EagleSky. Изменение цен на билеты

На сайте аэропорта располагалось табло рейсов, цены на эти рейсы и контакты.

В ходе изучения ресурса я обратил внимание, что запрос информации о рейсе на сайте реализован с использованием api: ресурс шлет запрос на /api/flight/info?id=1 и полученную оттуда информацию предоставляет пользователю:

api

Однако апишка оказалась уязвима к SQL-инъекции:

api 500

При помощи утилиты sqlmap эта уязвимость была подтверждена, а таблицы сдамплены:

sqlmap dump

После авторизации с админским паролем мы получили доступ к изменению цен на рейсы:

http new price

И это недопустимое событие оказалось реализовано:

new price

Cyberarena. Дефейс главной страницы сайта

В данном случае на ресурса располагалась информация об идущих матчах – команды, локация и счет. Практически параллельно с изучением сайта был запущен фаззинг директорий и вместо меди нашлось золото – открытый git.

fuzzing

Весь этот гит был сдамплен при помощи утилиты git-dumper

В ходе изучения содержимого гита была найдена ручка /manage/login.php

В самом файле содержался механизм авторизации на основе OTP – One Time Password.

OTP Auth

Сам код:

  <?php
    include "./core/config.php";

    $otp = substr(md5(strval(intval(time() / 60)) . "hexraysalwaysavailable"), 0, 6);

    if (isset($_POST['email'])) {
        echo $_POST['otp'];
        if ($_POST['otp'] == $otp) {

            $sql = "SELECT email FROM admins WHERE email=?";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("s", $_POST["email"]);
            $stmt->execute();
            $result = $stmt->get_result();
            $row = $result->fetch_row();
            if (isset($row['email'])) {
                session_start();
                $_SESSION["loggedin"] = true;

                header('Location: manage.php');
                exit;
            }
        }
    }
    ?>

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

OTP-Generator

Нашли в сурс-коде почту разработчика:

developer mail

И успешно авторизовались, используя эту почту и сгенерированный OTP.

После этого добавили новый матч и в качестве имени команд указали полезную нагрузку:

payload

Таким образом результат дефейса выглядел так:

defaced

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

Энергетическая компания TechEnergix. Утечка персональных данных клиентов

Данное недопустимое событие реализовалось на протяжении времени и в несколько этапов. Инфраструктура она такая =)

Здесь важно понимать, что помимо внешнего периметра у каждой организации был еще и внутренний – недоступный напрямую с впнов, выданных нам организаторами, поэтому попадать во внутреннюю сеть нужно было иначе. Как? Фишинг!

Мы изучили ресурсы компании и собрали список почт сотрудников:

mails

Далее мы подготовили фишинговое письмо hr.doc, являющееся маяком для нашего С2 фрейморвка:

Phishing

e.ivanov, открывший данный файл, сам того не зная, дал нам удаленный доступ к своему компьютеру, которым мы управляли посредством нашего С2:

C2 Reverse Shell

Мы закрепились внутри сети при помощи С2, пробросили туннели при помощи Ligolo и получили практически прямой доступ к внутренней сети организации TechEnergix – 10.38.100.0/24.

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

Advanced Network Scanner

На одной из шар был расположен скрипт Check_db.ps1, из которого мы получили креды:

Check_db.ps1

Далее на ADS01 была обнаружена уязвимая к Remote Code Execution версия базы данных Postgres. С использованием найденных на прошлом шаге кред был запущен эксплоит: python3 rc.py -i 10.38.100.6 -p 5432 -d clients -c "<command to execute>" -U postgres -P Str0ngP@ssw0rd123!

В результате работы которого мы получили таблицу персональных данных клиентов компании:

Персональные данные

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

IT-консалтинг CircuitMinds. Утечка персональных данных сотрудников

Реализация данного недопустимного события так же началась с поиска почт:

mail

Попытка заслать фишинг этому товарищу закончилась неудачей – нам ответили, что он принимает письма только от админа. Но для нас это не проблема =)

Подменив после from с личный почты на почту admin@circuitminds.icp при отправке письма мы успешно заслали Лебедеву письмо от имени админа, после чего получили доступ к его компьютеру (вновь посредством С2, да) :

reverse shell

Изучив машину пользователя, мы нашли зашифрованные пароли Firefox, которые успешно извлекли при помощи утилиты firepwd.

passwords

На внутреннем портале организации был развернут Bitrix24, креды к которому мы и нашли:

Bitrix Access

Изучив этот ресурс, мы получили информацию о сотрудниках:

Персональные данные

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

Заключение

На этих шести недопустимых событиях и закончилась наше выступление на ВСКБ в рамках Kazan Digital Week. Немного грустно, что спустя кучу времени у меня так и не удалось подступиться к банку и реализовать еще парочку НС в его инфраструктуре, но такое тоже бывает.

Дальше – больше =)