Node: 1

Всем привет! Сегодня мы с вами вместе поломаем виртуалку c VulnHub под названием Node.

Для тех, кто не в курсе: VulnHub - это ресурс, предоставляющий образы виртуальных машин с "зашитыми" уязвимостями. Цель: установить образ, взломать и найти все флаги (подобно CTF). Подобного рода материалы позволяют получить практический опыт в ИБ и администрировании, а также познавательно-развлекательно провести время.

Начинаем ломать

Итак, после запуска машины, мы видим её в нашей локальной сети с адресом 192.168.3.27. Давайте попробуем подключится к ней по ssh. Видим, поле ввода пароля. Попробуем перебрать пару-тройку вариантов, например, root, toor, admin. Как видно, всё не так просто:

image1

При обращении по http нас тоже ничего хорошего не ожидает.

image2

Прежде чем пытаться решать вопрос "грубой силой", посмотрим, что же крутится на этой тачке?

Для этого поможет наш старый друг nmap.

image3

Итак, в итоге видим, что на 22 порту крутится найденный нами ssh, а также какое-то приложение на Node.js на 3000 порту. Тулза нам подсказывает путь /login.

Что ж, давайте взглянем, что там у нас:

image4

Потыкав иконки и прочее, ничего интересного не было найдено, кроме кнопки для входа. Отправляемся туда!

Попробуем какие-нибудь дефолтные учетные данные, но нас опять ждет неудача. ПоMITMив запрос, были замечены различные типы возвращаемых ошибок. Например, если имена пользователей были tom, mark (их видно на главное странице), то возвращалась одна ошибка, а если имена отличались, то другая. Как оказалось далее, это был ложный вектор атаки.

image5

Давайте зайдем в исходники страницы. Изучив содержимое, натыкаемся на интересные строки.

image6

Посмотрев, какие js-ресурсы подгружаются, удалось найти путь /api/users/latest, где хранится информация о последних попытках входа.

image7

Недолго думая, идем на папку выше:

image8

Итак, у нас есть логин и захешированный пароль администратора. Идём на tunnelsup.com (или другой аналогичный ресурс) и там определяем тип.

image9

Отлично, теперь гуглим "sha256 crack online". Натыкаемся на crackstation.net, где получаем прообраз хэша.

image10

Итак, данные для входа под админом - myP14ceAdm1nAcc0uNT:manchester

В админке ничего интересного, кроме кнопки Download Backup.

image11

После нажатия получаем текстовый файлик на 3 мегабайта, в котором что-то очень сильно напоминающее base64.

image12

Видим, что это у нас zip архив, попробуем открыть.

image13

Архив защищен паролем. Пробуем угадать, но у опять ничего не выходит. Кажется пришло время побрутить!

Для этого используем какой-нибудь переборщик паролей для zipов. Например, fcrackzip.
Запускаем его вместе с rockyou (самый популярный словарь паролей):

image14

Не прошло и секунды, как пароль был найден. Давайте теперь заглянем во внутрь архива.

image15

Видим много чего интересного, но первым делом на глаза попадаются данные того самого Марка с главной страницы - mark:5AYRft73VtFpc84k. Давайте теперь попробуем использовать все найденные креды на ssh. С админом идея провалилась, а вот Марк подошел.

image16

Полазив в ближайшем окружении, находим у Тома файл user, который мы не можем читать.

image17

Посмотрим запущенные в системе процессы. Заметим, что от пользователя tom запущенно 2 node приложения.

image23

Заглянем в /var/scheduler/app.js:

image24

Давайте разбираться, что здесь происходит.

Скрипт подключается к Mongo базе scheduler и выполняет всё, что лежит в коллекции tasks в значении cmd, далее сон. Попробуем пробросить reverse shell?

Для начала подключимся к Mongo.
image25

Заранее создадим файл со следующим содержанием:
image26-1

Теперь давайте внесем таск:
image27

Далее ловим сессию у себя:
image28

И читаем файл:
image29

Теперь давайте посмотрим, что есть в папке root.
image30

Недостаточно прав, попробуем повысить права на машине. Для начала посмотрим что за система на тачке:

image18

Сразу же находим эксплойт на exploit-db.com.

image19

В папке /tmp создаем С-шный файл и компилируем его:

image20

В итоге получаем root права на тачке:

image21

Теперь можем делать с тачкой всё, что хотим!
image22

Got it!:)

К стати говоря, подобный чит можно было испольщовать ещё на этапе с Markом. Действия аналогичны, описанным выше.

image31

Shortcut

Итак, подытожим всё вышеописанное.

Мы просканировали порты виртуалки и выяснили, что 22 и 3000 открыты. На 22 стандартно висел ssh, на 3000 приложение на Node. Исследуя приложение, мы в исходных кодах нашли путь к логу последних попыток входа, откуда обнаружили путь до лога с учетными данными администратора. Получив по хешу пароль, мы залогинились и выкачали бекап сайта (через функционал приложения), представляющий собой запароленный zip архив в base64. Архив взломали перебором по популярному словарю "rockyou". В одном из основных файлов приложения мы нашли креды подключения к базе данных, которые совпали с данными от ssh. После изучения файлов и процессов, пробросили reverse shell, который будет исполен другим пользователем посредством чтения и исполнения команд из доступной нам базы данных. На тачке у скомпрометированных пользователей были ограниченные права, что обходилось выполнением публичного эксплойта для используемого на машине ядра. В результате, успешное повышение прав до root дало возможность вытащить флаги из файлов.

Использованые техники/уязвимости для решения

  • Information disclosure
  • Brute force
  • Local privilege escalation

C этой тачкой вроде бы всё, ждите новые writeup'ы, оставляйте комментарии и делитесь в социальных сетях! Всем успехов и спасибо за уделенное время!:)