Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /
:
10.10.11.135 timing.htb
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Нашли два открытых порта:
На SSH нам ловить нечего, пропускаем его.
Поскольку вначале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но машины с HTB почти всегда можно пройти по‑другому. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Посмотрим, что нам покажет веб‑сервер. При обращении к нему происходит редирект на страницу /
, где нас встречает форма авторизации.
Понятно, что сайт не одностраничный, поэтому попробуем найти скрытые страницы. Так как первая страница была в формате PHP, остальные будем перебирать с таким же расширением. Я для этого воспользуюсь сканером ffuf.
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w
— словарь (я использую словари из набора SecLists);-t
— количество потоков;-u
— URL;-fc
— исключить из результата ответы с кодом 403.Запускаем его с нужными параметрами:
ffuf -uhttp://timing.htb/FUZZ -t 256 -wphp_files_common.txt
Результат сканирования файлов PHPНашли много файлов, теперь просканируем и скрытые каталоги.
ffuf -uhttp://timing.htb/FUZZ -t 256 -wdirectory_2.3_medium_lowercase.txt
Результат сканирования скрытых каталоговВ итоге находим каталоги для хранения скриптов и изображений. Больше нам ничего не доступно. Сканирование файлов бэкапов и поддоменов ничего не дало. Но мы еще не поискали параметры! Для сканирования логично выбрать страницу image.
, которая предположительно должна возвращать изображения. Так как мы не знаем, что будет передано в качестве значения параметра, попробуем передать само название страницы в надежде получить какую‑нибудь ошибку.
ffuf -u 'http://timing.htb/image.php?FUZZ=../image.php' -t 256 -wparameters.txt -fs 0
Результат сканирования параметраМы нашли один параметр — img
. То есть мы можем запросить файл с картинкой по его названию. Попробуем таким способом утащить какой‑нибудь системный файл, задав относительный путь.
Нас поймали за руку!
Здесь, судя по всему, используются какие‑то фильтры, которые мешают нам читать любой файл. Я попробовал разные варианты оберток для параметра и обнаружил, что срабатывает запрос вот такого вида:
/image.php?img=php://filter/convert.base64-encode/resource=index.php
Local file inclusion (LFI) — техника, которая используется для получения доступа к файлам в системе через веб‑сервер. Чтобы сервер отобразил файл, а не попытался его выполнить, ему нужно передать «обертку» — команды, которые закодируют файл. После его получения останется лишь раскодировать его обратно. Существует множество готовых оберток, которые ты можешь применять при пентесте.
Содержимое этой страницы, полученной в ответ, будет закодировано в Base64. Декодировать можно прямо Burp, нажав Ctrl-Shift-B.
Так как мы можем получить код любой страницы, идем по порядку и заглядываем в исходный код страницы login.
.
В нем ничего интересного нет, кроме подключения файла db_conn.
(строка 10). Здесь мы находим учетку для подключения к базе данных. Конечно же, просмотрим и его.
Пароль пока ни к чему не подошел, поэтому копаем дальше. Перейдем к файлам, о которых мы уже знаем. Начнем с upload.
.
В самом начале подключается файл admin_auth_check.
. Затем задаются необходимые параметры для загруженного файла, в том числе и file_name
. Имя файла создается по следующему алгоритму: берется строка '$file_hash'
, затем добавляется текущее время (результат выполнения функции time(
), все это конвертируется в хеш MD5, а дальше добавляется знак нижнего подчеркивания и имя файла, которое использовалось при загрузке. При этом файл должен иметь расширение jpg. А в файле admin_auth_check.
только сравнивается роль пользователя.
Если бы $file_hash
кто‑то по ошибке не обернул в кавычки, то подставилось бы значение переменной, полученное от PHP-функции uniqid(
. Разгадать уникальный идентификатор у нас бы не вышло, а без него единственной преградой будет вывод функции time(
.
Впрочем, пока что здесь больше ничего не сделать, и придется брутить форму авторизации. Для начала найдем имена пользователей, к примеру в файле /
.
|
|