![](/uploads/posts/2022-08/03.png)
Разведка
Добавляем IP-адрес машины в /
:
10.10.11.135 timing.htb
И запускаем сканирование портов.
![Результат работы скрипта Результат работы скрипта](/uploads/posts/2022-08/02.png)
Нашли два открытых порта:
- 22 — служба OpenSSH 7.6p1;
- 80 — веб‑сервер Apache 2.4.29.
На SSH нам ловить нечего, пропускаем его.
Посмотрим, что нам покажет веб‑сервер. При обращении к нему происходит редирект на страницу /
, где нас встречает форма авторизации.
![Форма авторизации Форма авторизации](/uploads/posts/2022-08/03.png)
Понятно, что сайт не одностраничный, поэтому попробуем найти скрытые страницы. Так как первая страница была в формате PHP, остальные будем перебирать с таким же расширением. Я для этого воспользуюсь сканером ffuf.
Запускаем его с нужными параметрами:
ffuf -uhttp://timing.htb/FUZZ -t 256 -wphp_files_common.txt
![Результат сканирования файлов PHP Результат сканирования файлов PHP](/uploads/posts/2022-08/04.png)
Нашли много файлов, теперь просканируем и скрытые каталоги.
ffuf -uhttp://timing.htb/FUZZ -t 256 -wdirectory_2.3_medium_lowercase.txt
![Результат сканирования скрытых каталогов Результат сканирования скрытых каталогов](/uploads/posts/2022-08/05.png)
В итоге находим каталоги для хранения скриптов и изображений. Больше нам ничего не доступно. Сканирование файлов бэкапов и поддоменов ничего не дало. Но мы еще не поискали параметры! Для сканирования логично выбрать страницу image.
, которая предположительно должна возвращать изображения. Так как мы не знаем, что будет передано в качестве значения параметра, попробуем передать само название страницы в надежде получить какую‑нибудь ошибку.
ffuf -u http://timing.htb/image.php?FUZZ=../image.php -t 256 -wparameters.txt -fs 0
![Результат сканирования параметра Результат сканирования параметра](/uploads/posts/2022-08/06.png)
Мы нашли один параметр — img
. То есть мы можем запросить файл с картинкой по его названию. Попробуем таким способом утащить какой‑нибудь системный файл, задав относительный путь.
![Сообщение, что обнаружена атака Сообщение, что обнаружена атака](/uploads/posts/2022-08/07.png)
Нас поймали за руку!
Точка входа
Здесь, судя по всему, используются какие‑то фильтры, которые мешают нам читать любой файл. Я попробовал разные варианты оберток для параметра и обнаружил, что срабатывает запрос вот такого вида:
/image.php?img=php://filter/convert.base64-encode/resource=index.php
Содержимое этой страницы, полученной в ответ, будет закодировано в Base64. Декодировать можно прямо Burp, нажав Ctrl-Shift-B.
![Получение кода страницы index.php Получение кода страницы index.php](/uploads/posts/2022-08/08.png)
Так как мы можем получить код любой страницы, идем по порядку и заглядываем в исходный код страницы login.
.
![Исходный код login.php Исходный код login.php](/uploads/posts/2022-08/09.png)
В нем ничего интересного нет, кроме подключения файла db_conn.
(строка 10). Здесь мы находим учетку для подключения к базе данных. Конечно же, просмотрим и его.
![Исходный код db_conn.php Исходный код db_conn.php](/uploads/posts/2022-08/10.png)
Пароль пока ни к чему не подошел, поэтому копаем дальше. Перейдем к файлам, о которых мы уже знаем. Начнем с upload.
.
![Исходный код upload.php Исходный код upload.php](/uploads/posts/2022-08/11.png)
В самом начале подключается файл admin_auth_check.
. Затем задаются необходимые параметры для загруженного файла, в том числе и file_name
. Имя файла создается по следующему алгоритму: берется строка $file_hash
, затем добавляется текущее время (результат выполнения функции time(
), все это конвертируется в хеш MD5, а дальше добавляется знак нижнего подчеркивания и имя файла, которое использовалось при загрузке. При этом файл должен иметь расширение jpg. А в файле admin_auth_check.
только сравнивается роль пользователя.
Если бы $file_hash
кто‑то по ошибке не обернул в кавычки, то подставилось бы значение переменной, полученное от PHP-функции uniqid(
. Разгадать уникальный идентификатор у нас бы не вышло, а без него единственной преградой будет вывод функции time(
.
![Исходный код admin_auth_check.php Исходный код admin_auth_check.php](/uploads/posts/2022-08/12.png)
Впрочем, пока что здесь больше ничего не сделать, и придется брутить форму авторизации. Для начала найдем имена пользователей, к примеру в файле /
.
![Содержимое файла /etc/passwd Содержимое файла /etc/passwd](/uploads/posts/2022-08/13.png)
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.