28. HackTheBox. Level Hard: Проходження Forwardslash. LFI, backup та шифрований том

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

У статті ви дізнаєтеся, як за допомогою спеціальних інструментів проводити розвідку й виявляти вразливості систем. Ви навчитеся використовувати LFI-атаки для отримання доступу до конфіденційних файлів, працювати з обліковими даними для входу в систему через SSH і розуміти, як досліджувати зашифровані томи VeraCrypt. Цей матеріал покаже, як комплексно підходити до тестування безпеки та ефективно аналізувати слабкі місця у веб-додатках і серверах.

Проходження Forwardslash

Продовження публікації рішень для машин, надісланих на доопрацювання з платформи HackTheBox. Хост містить важливі дані, доступ до яких можливий у приватній мережі з фахівцями, які мають ґрунтовні знання у сфері інформаційної безпеки.

Recon

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

10.10.10.183    forwardslash.htb

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

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

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

nmap -A forwardslash.htb -p22,80

На сервері працюють служба SSH та веб-сервер. Заходимо на веб-сервер і дивимося, що нам можуть запропонувати.

На цьому етапі повідомляється про вразливість хоста, із згадкою про XML та FTP. Для пошуку прихованих директорій використовується gobuster. У параметрах задається кількість потоків (128, опція -t), URL (-u), словник для перебору (-w) і розширення файлів, що нас цікавлять (-x).
gobuster dir -t 128 -u http://forwardslash.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,xml,txt

І знаходимо note.txt. Давайте прочитаємо.

Повідомляється про групу, яка зламала сайт і про те, що є бекап. Давайте пошукаємо піддомени. Як фільтр встановимо кількість символів не дорівнює 0.

wfuzz -H 'HOST:FUZZ.forwardslash.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u forwardslash.htb --hh 0

І ходимо піддомен backup. Додамо його у файл /etc/hosts.

10.10.10.183    backup.forwardslash.htb

Переберемо директорії і для цього домену.

gobuster dir -t 128 -u http://backup.forwardslash.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,xml,txt

І переходимо за цією адресою.

Entry Point

Нас зустрічає форма авторизації.

Також є можливість реєстрації. Давайте зареєструємось, а потім увійдемо.

Гуляючи посиланнями, знаходимо форми зміни імені, пароля, а також можна задати зображення профілю. Мабуть, зупинимося на ньому.

Повідомляють, що у зв’язку зі зломом цю функцію вимкнено. При цьому поле введення не доступне, швидше за все disabled в HTML.

Властивість видаляється з обох елементів. На локальній машині запускається веб-сервер, після чого у полі вказується посилання на файл test.txt.

Так як не ніяких фільтрів, спробуємо вектор LFI. Для зручності справ це в Burp Suite.

І є LFI!

USER

Давайте перевіримо конфігурації apache.

Але якщо спробувати прочитати файл php, він не буде представлений вам як текст. Натомість він буде виконаний.

Але ми можемо використовувати фільтри php, наприклад base64. Так, файл php спочатку кодується, а потім відображається на сторінці. Таким чином, він не буде виконаний.

php://filter/convert.base64-encode/resource=../../../../var/www/backup.forwardslash.htb/index.php

Виділимо потрібний фрагмент та натиснемо Ctrl+Shift+B.

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

Давайте поглянемо на /dev/index.php. І там знаходимо автентифікаційні дані користувача Chiv.

Цей користувач є в системі, це ми дізнаємося з /etc/passwd. Спробуємо ці дані для підключення SSH.

USER2

Для збору даних у системі використовуємо скрипт LinPEAS. І знаходимо у бекапах якусь записку.

Таким чином, у бекапах є старий конфіг з паролем. Він належить pain’у.

Так на програму backup стоїть SUID біт. Тобто ми можемо виконати програму від імені користувача pain.

Ми можемо зробити backup, але тільки певний рандомний файл.

Ми можемо зробити посилання на бекап конфігу, назвавши її як представлено із програми backup. Але ми маємо встигнути протягом кількох секунд. Тож зробимо скрипт. Спочатку отримаємо ім’я файлу.

Тепер додамо створення посилання та повторний бекап.

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

Змінимо користувача, ввівши цей пароль.

ROOT

Давайте глянемо налаштування суду виконання команд без пароля.

Таким чином, ми маємо шифрований том. Щоб розшифрувати та монтувати його, нам потрібен пароль.

Ми маємо шифртекст та програму.

Для дешифрування використовуємо наступний код.

def decrypt(key, msg):
key = list(key)
    msg = list(msg)
    for char_key in reversed(key):
        for i in reversed(range(len(msg))):
            if i == 0:
                tmp = ord(msg[i]) - (ord(char_key) + ord(msg[-1]))
            else:
                tmp = ord(msg[i]) - (ord(char_key) + ord(msg[i-1]))
            while tmp < 0:
                tmp += 256
            msg[i] = chr(tmp)
    return ''.join(msg)

ciphertext = open('ciphertext', 'r').read().rstrip()
for i in range(1, len(ciphertext)):
    for j in range(256):
        key = chr(j) * i
        text = decrypt(key, ciphertext)
        if ' the ' in text or ' to ' in text:
            print(key)
            print(text)
            exit()

І успішно дешифруємо повідомлення.

Подивимося, що в нас зазначеним шляхом.

Розшифруємо том.

І вмонтуємо його.

Там розташований ключ SSH.

Підключаємось та забираємо прапор.

Висновок

Ми провели сканування портів, знайшли приховані директорії та піддомени, використали уразливість LFI для читання конфіденційних файлів, знайшли облікові дані та отримали доступ через SSH. Потім вивчили систему за допомогою LinPEAS, використали SUID-біт для виконання програми від імені іншого користувача, розшифрували том і отримали доступ до ключа SSH, щоб забрати прапор.

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