![](/uploads/posts/2022-08/04.png)
Содержание статьи
Разведка. Сканирование портов
Машина имеет IP-адрес 10.10.10.228, который я добавляю в /
, чтобы можно было обращаться к данному хосту по имени.
10.10.10.228 breadcrumbs.htb
Любая атака начинается со сканирования открытых на хосте портов. Делаем это при помощи скрипта, где через Nmap производится обычное быстрое сканирование портов, а затем из вывода берутся все порты и повторяется сканирование только обнаруженных портов со скриптами (опция -A).
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d / -f 1 | tr \n , | sed s/,$//)
nmap -p$ports -A $1
![Результат работы скрипта Результат работы скрипта](/uploads/posts/2022-08/02.jpg)
Как это обычно бывает на машинах с Windows, по результатам сканирования имеем много открытых портов:
- порт 22 — служба SSH;
- порт 80 — веб‑сервер Apache 2.4.46;
- порт 135 — служба MS RPC;
- порт 139 — служба имен NetBIOS;
- порт 443 — веб‑сервер Apache 2.4.46;
- порт 445 — служба SMB;
- порт 3306 — служба MySQL.
Остальное не представляет для нас интереса.
На SSH нам сейчас ловить нечего, поскольку учеток у нас нет, да и SMB для анонима интереса не представляет. Раз есть веб‑сайт, начинать лучше всего с него.
Сайт позволяет искать книги по библиотеке.
![Тестовый поиск Тестовый поиск](/uploads/posts/2022-08/04.png)
![Дополнительная информация по выбранной книге Дополнительная информация по выбранной книге](/uploads/posts/2022-08/05.png)
Анализировать страницы лучше всего через Burp Suite, который сохранит и наглядно отобразит все запросы и ответы.
Просматривая страницы, обратим внимание на способ запроса книги: название HTML-файла с книгой передается исполняемому файлу, который затем включит этот файл в ответ.
![Запрос книги, представленный Burp Запрос книги, представленный Burp](/uploads/posts/2022-08/06.png)
Точка входа. Эксплуатация LFI
Это потенциальная уязвимость LFI, которую стоит проверить. Есть хорошее средство для тестов LFI — LFI Suite. Но так как оно работает медленно, то возьмем из него только словарь и выполним тест с помощью Burp Intruder (в версии Pro ставим 120 потоков).
![Burp Intruder, вкладка Position Burp Intruder, вкладка Position](/uploads/posts/2022-08/07.png)
![Burp Intruder, вкладка Payload Burp Intruder, вкладка Payload](/uploads/posts/2022-08/08.png)
![Burp Intruder, вкладка Options Burp Intruder, вкладка Options](/uploads/posts/2022-08/09.png)
![Результат атаки Результат атаки](/uploads/posts/2022-08/10.png)
Фильтруем по размеру ответа и видим, что удалось прочитать файл access.
. А чуть ниже в тексте ошибки отмечаем для себя полный путь к веб‑приложению.
![Ошибка чтения файла environ Ошибка чтения файла environ](/uploads/posts/2022-08/11.png)
Давай взглянем, что интересного может дать код в файле bookController.
. Для этого передадим следующее значение параметра:
book=../includes/bookController.php&method=1
![Часть исходного кода bookController.php Часть исходного кода bookController.php](/uploads/posts/2022-08/12.png)
Так, в файле происходит включение файла db.
, в котором обычно подключается база данных, и при этом, скорее всего, используются учетные данные, хранящиеся в открытом виде. Проверяем, запросив book=../
.
![Часть исходного кода db.php Часть исходного кода db.php](/uploads/posts/2022-08/13.png)
Так мы находим учетку от базы данных. Но что с ней теперь делать, если к доступным нам сервисам она не подходит? Поищем, нет ли еще чего‑нибудь на сайте.
Для перебора путей с целью поиска скрытых страниц (тех, на которые снаружи нет ссылок) обычно используют программы вроде dirsearch, dirb или более быстрый gobuster. Но я последнее время использую встроенные средства Burp Suite. Перехватываем запрос в Burp Proxy и отправляем в Burp Intruder. Затем отмечаем позицию для перебора, выставляем словарь и количество потоков, после чего выполняем атаку.
![Burp Intruder, вкладка Positions Burp Intruder, вкладка Positions](/uploads/posts/2022-08/14.png)
![Burp Intruder, вкладка Payloads Burp Intruder, вкладка Payloads](/uploads/posts/2022-08/15.png)
![Burp Intruder, вкладка Options Burp Intruder, вкладка Options](/uploads/posts/2022-08/16.png)
![Результат атаки Результат атаки](/uploads/posts/2022-08/17.png)
Так мы находим несколько директорий, часть из которых нам уже известна. Но мы еще не были в каталоге portal
, а после перехода нас редиректит на http://
.
![Форма авторизации Форма авторизации](/uploads/posts/2022-08/18.png)
Удобно, что мы можем посмотреть исходник этого файла, сделав запрос book=../
.
![Исходный код login.php Исходный код login.php](/uploads/posts/2022-08/19.png)
В исходном коде видим подключение еще одного нового для нас файла — authController.
. Тем же способом глянем и его.
![Исходный код authController.php Исходный код authController.php](/uploads/posts/2022-08/20.png)
А вот уже здесь находим прямую ссылку на admins.
, перейдя по которой найдем очень много пользователей. У нас есть пароль для подключения к базе данных, однако это нам никак не помогает, и мы вынуждены идти дальше.
![Список пользователей сайта Список пользователей сайта](/uploads/posts/2022-08/21.png)
В исходном коде находим уже больше интересной информации.
![](/uploads/posts/2022-08/22.png)
![Исходный код admins.php Исходный код admins.php](/uploads/posts/2022-08/23.png)
В коде мы видим использование JWT, секретный ключ и вызов функции makesession
. Ее код находим в подключаемом файле cookie.
.
![Исходный код cookie.php Исходный код cookie.php](/uploads/posts/2022-08/24.png)
Точка опоры
JSON Web Token
JSON Web Token (JWT) состоит из трех частей: заголовка (header), полезной нагрузки (payload) и подписи. Заголовок и полезная нагрузка представляют собой объекты JSON, при этом нагрузка может быть любой — это именно те критические данные, которые передаются приложению. А вот заголовок содержит определенные поля: алгоритм и тип токена. Третий элемент вычисляется на основании первых и зависит от выбранного алгоритма. Токены могут быть перекодированы в компактное представление: к заголовку и полезной нагрузке применяется алгоритм кодирования Base64-URL, после чего добавляется подпись и все три элемента разделяются точками.
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.