Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня я для тебя разберу сложную машину Breadcrumbs площадки Hack The Box. На ее примере мы проэксплуатируем LFI, чтобы прочесть исходники сайта, затем подберем JWT для авторизации в качестве админа. После проникновения на сервер пореверсим самописный менеджер паролей и проведем в нем SQL-инъекцию для получения рута. В общем, скучать не придется!
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Машина имеет IP-адрес 10.10.10.228, который я добавляю в /etc/hosts
, чтобы можно было обращаться к данном хосту по имени.
10.10.10.228 breadcrumbs.htb
Любая атака начинается со сканирования открытых на хосте портов. Делаем это при помощи скрипта, где через Nmap производится обычное быстрое сканирование портов, а затем из вывода берутся все порты и повторяется сканирование только обнаруженных портов со скриптами (опция -A).
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Результат работы скрипта
Как это обычно бывает на машинах с Windows, по результатам сканирования имеем много открытых портов:
Остальное не представляет для нас интереса.
На SSH нам сейчас ловить нечего, поскольку учеток у нас нет, да и SMB для анонима интереса не представляет. Раз есть веб‑сайт, начинать лучше всего с него.
Сайт позволяет искать книги по библиотеке.
Тестовый поиск
Дополнительная информация по выбранной книге
Анализировать страницы лучше всего через Burp Suite, который сохранит и наглядно отобразит все запросы и ответы.
Просматривая страницы, обратим внимание на способ запроса книги: название HTML-файла с книгой передается исполняемому файлу, который затем включит этот файл в ответ.
Запрос книги, представленный Burp
Это потенциальная уязвимость LFI, которую стоит проверить. Есть хорошее средство для тестов LFI — LFI Suite. Но так как оно работает медленно, то возьмем из него только словарь и выполним тест с помощью Burp Intruder (в версии Pro ставим 120 потоков).
Burp Intruder, вкладка Position
Burp Intruder, вкладка Payload
Burp Intruder, вкладка Options
Результат атаки
Фильтруем по размеру ответа и видим, что удалось прочитать файл access.log
. А чуть ниже в тексте ошибки отмечаем для себя полный путь к веб‑приложению.
Ошибка чтения файла environ
Давай взглянем, что интересного может дать код в файле bookController.php
. Для этого передадим следующее значение параметра:
book=../includes/bookController.php&method=1
Часть исходного кода bookController.php
Так, в файле происходит включение файла db.php
, в котором обычно подключается база данных, и при этом, скорее всего, используются учетные данные, хранящиеся в открытом виде. Проверяем, запросив book=../db/db.php&method=1
.
Часть исходного кода db.php
Так мы находим учетку от базы данных. Но что с ней теперь делать, если к доступным нам сервисам она не подходит? Поищем, нет ли еще чего‑нибудь на сайте.
Для перебора путей с целью поиска скрытых страниц (тех, на которые снаружи нет ссылок) обычно используют программы вроде dirsearch, dirb или более быстрый gobuster. Но я последнее время использую встроенные средства Burp Suite. Перехватываем запрос в Burp Proxy и отправляем в Burp Intruder. Затем отмечаем позицию для перебора, выставляем словарь и количество потоков, после чего выполняем атаку.
Burp Intruder, вкладка Positions
Burp Intruder, вкладка Payloads
Burp Intruder, вкладка Options
Результат атаки
Так мы находим несколько директорий, часть из которых нам уже известна. Но мы еще не были в каталоге portal
, а после перехода нас редиректит на http://breadcrumbs.htb/portal/login.php
.
Форма авторизации
Удобно, что мы можем посмотреть исходник этого файла, сделав запрос book=../portal/login.php&method=1
.
Исходный код login.php
В исходном коде видим подключение еще одного нового для нас файла — authController.php
. Тем же способом глянем и его.
Исходный код authController.php
А вот уже здесь находим прямую ссылку на admins.php
, перейдя по которой найдем очень много пользователей. У нас есть пароль для подключения к базе данных, однако это нам никак не помогает, и мы вынуждены идти дальше.
Список пользователей сайта
В исходном коде находим уже больше интересной информации.
Исходный код admins.php
В коде мы видим использование JWT, секретный ключ и вызов функции makesession
. Ее код находим в подключаемом файле cookie.php
.
Исходный код cookie.php
JSON Web Token (JWT) состоит из трех частей: заголовка (header), полезной нагрузки (payload) и подписи. Заголовок и полезная нагрузка представляют собой объекты JSON, при этом нагрузка может быть любой — это именно те критические данные, которые передаются приложению. А вот заголовок содержит определенные поля: алгоритм и тип токена. Третий элемент вычисляется на основании первых и зависит от выбранного алгоритма. Токены могут быть перекодированы в компактное представление: к заголовку и полезной нагрузке применяется алгоритм кодирования Base64-URL, после чего добавляется подпись и все три элемента разделяются точками.
Источник: xakep.ru