Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка. Сканирование портов
Машина имеет IP-адрес 10.10.10.228, который я добавляю в /
, чтобы можно было обращаться к данному хосту по имени.
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, по результатам сканирования имеем много открытых портов:
- порт 22 — служба SSH;
- порт 80 — веб‑сервер Apache 2.4.46;
- порт 135 — служба MS RPC;
- порт 139 — служба имен NetBIOS;
- порт 443 — веб‑сервер Apache 2.4.46;
- порт 445 — служба SMB;
- порт 3306 — служба MySQL.
Остальное не представляет для нас интереса.
На SSH нам сейчас ловить нечего, поскольку учеток у нас нет, да и SMB для анонима интереса не представляет. Раз есть веб‑сайт, начинать лучше всего с него.
Сайт позволяет искать книги по библиотеке.


Анализировать страницы лучше всего через Burp Suite, который сохранит и наглядно отобразит все запросы и ответы.
Просматривая страницы, обратим внимание на способ запроса книги: название HTML-файла с книгой передается исполняемому файлу, который затем включит этот файл в ответ.

Точка входа. Эксплуатация LFI
Это потенциальная уязвимость LFI, которую стоит проверить. Есть хорошее средство для тестов LFI — LFI Suite. Но так как оно работает медленно, то возьмем из него только словарь и выполним тест с помощью Burp Intruder (в версии Pro ставим 120 потоков).




Фильтруем по размеру ответа и видим, что удалось прочитать файл access.
. А чуть ниже в тексте ошибки отмечаем для себя полный путь к веб‑приложению.

Давай взглянем, что интересного может дать код в файле bookController.
. Для этого передадим следующее значение параметра:
book=../includes/bookController.php&method=1

Так, в файле происходит включение файла db.
, в котором обычно подключается база данных, и при этом, скорее всего, используются учетные данные, хранящиеся в открытом виде. Проверяем, запросив book=../
.

Так мы находим учетку от базы данных. Но что с ней теперь делать, если к доступным нам сервисам она не подходит? Поищем, нет ли еще чего‑нибудь на сайте.
Для перебора путей с целью поиска скрытых страниц (тех, на которые снаружи нет ссылок) обычно используют программы вроде dirsearch, dirb или более быстрый gobuster. Но я последнее время использую встроенные средства Burp Suite. Перехватываем запрос в Burp Proxy и отправляем в Burp Intruder. Затем отмечаем позицию для перебора, выставляем словарь и количество потоков, после чего выполняем атаку.




Так мы находим несколько директорий, часть из которых нам уже известна. Но мы еще не были в каталоге portal
, а после перехода нас редиректит на http://
.

Удобно, что мы можем посмотреть исходник этого файла, сделав запрос book=../
.

В исходном коде видим подключение еще одного нового для нас файла — authController.
. Тем же способом глянем и его.

А вот уже здесь находим прямую ссылку на admins.
, перейдя по которой найдем очень много пользователей. У нас есть пароль для подключения к базе данных, однако это нам никак не помогает, и мы вынуждены идти дальше.

В исходном коде находим уже больше интересной информации.


В коде мы видим использование JWT, секретный ключ и вызов функции makesession
. Ее код находим в подключаемом файле cookie.
.

Точка опоры
JSON Web Token
JSON Web Token (JWT) состоит из трех частей: заголовка (header), полезной нагрузки (payload) и подписи. Заголовок и полезная нагрузка представляют собой объекты JSON, при этом нагрузка может быть любой — это именно те критические данные, которые передаются приложению. А вот заголовок содержит определенные поля: алгоритм и тип токена. Третий элемент вычисляется на основании первых и зависит от выбранного алгоритма. Токены могут быть перекодированы в компактное представление: к заголовку и полезной нагрузке применяется алгоритм кодирования Base64-URL, после чего добавляется подпись и все три элемента разделяются точками.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»