Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.10.249 pikaboo.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Мы нашли три открытых порта: 21 (служба VSFTPD 3.0.3), 22 (служба SSH) и 80 (веб‑сервер nginx 1.14.2). На SSH без учетных данных стучаться бесполезно, но и на FTP нам делать нечего: Nmap уже проверил возможность анонимного входа и не обнаружил ее.
Брут FTP
Можно пробовать перебрать популярные логины для FTP. Ты легко найдешь готовые списки запросом вроде ftp
. Для этого будем использовать hydra (не путать с Ghidra). Опцией -t
установим 32 потока.
hydra -L ftp_username.txt -P ftp_password.txt -t 32 pikaboo.htb ftp
Из этого ничего не вышло, поэтому перейдем к вебу.
Сканирование веб-контента
Смотрим сайт и обнаруживаем, что он еще в разработке, о чем свидетельствуют сообщения «PokeAPI Integration - Coming soon!» на некоторых страницах.
Только при переходе к странице администратора нас встретит HTTP-аутентификация. Если отказаться от проверки учетных данных, получим следующее сообщение об ошибке доступа.
В этой ошибке интересно сообщение об использовании веб‑сервера Apache на порте 81. При этом обращались мы к порту 80, на котором работает веб‑сервер nginx (по крайней мере, нам об этом сообщил Nmap). Похоже, при обращении к каталогу администратора работает какая‑то внутренняя переадресация между серверами.
Точка входа
Уязвимость nginx path traversal
Если сталкиваешься с веб‑сервером nginx, всегда стоит искать уязвимость обхода путей. Она появляется при неправильно настроенных алиасах. Nginx alias — это некий псевдоним, который позволяет скрыть реальное местоположение объекта. Он задается в директиве location
. К примеру, следующая конфигурация установит замену /
на /
:
location /img/ {
alias /web/data/images/;
}
При обращении к /
веб‑сервер вернет файл /
. Уязвимость появляется при неправильном указании location
, к примеру как в следующей конфигурации:
location /img {
alias /web/data/images/;
}
В этом случае, если мы обратимся к /
, сервер вместо того, чтобы вернуть файл /
, выполнит прямую замену алиаса и попытается вернуть /
, тем самым обходя каталог images
.
Давай воспользуемся обходом через каталог admin
и просканируем содержимое сайта. Для этого мы будем сканировать адрес /
. Так как при обращении к странице /
происходит редирект на другой сервер, мы сможем просмотреть именно веб‑контент внутреннего сервиса на порте 81.
Справка: сканирование веба c ffuf
Чтобы найти скрытое содержимое на сайтах, применяется сканирование методом перебора каталогов. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске укажем следующие параметры:
-
-w
— словарь (используем directory-list-2.3-medium из набора SecLists); -
-t
— количество потоков; -
-u
— URL; -
-fc
— исключить из результата ответы с кодом 403.
Команда получается следующая:
ffuf -u http://pikaboo.htb/admin../FUZZ -w /home/ralf/tmp/wordlists/Content/dirs/files_interesting.txt -t 200
В результате я нашел несколько интересных файлов. Среди них — очень важный файл server-status
, в котором отражаются все запросы к веб‑серверу Apache. Он и раскрывает нам при обращении к http://
незнакомые до этого момента каталоги. В том числе http://
.
Мы нашли несколько страниц, на которые можем перейти. Если заглянуть в Burp History, то мы увидим, что желаемая страница передается в качестве значения параметра page
. А это вероятная уязвимость включения файлов, которую следует проверить.
Точка опоры
Уязвимость LFI
При тесте Local File Inclusion можно просто отдать одному из сканеров директорий список с соответствующими нагрузками. Я для перебора использовал Burp Intruder со своими словарями (можешь поискать готовые на GitHub).
Первым делом определяем нагрузку, с помощью которой можно просмотреть доступный для всех системных пользователей файл на удаленном хосте. В результате перебора удалось прочитать файл /
через обход директорий последовательностью ../../../../..
.
На втором этапе в найденную нагрузку нужно подставлять самые важные системные файлы, информация из которых может помочь нам продвинуться дальше. Список опять же можно без проблем найти.
В результате атаки получаем всего пять доступных для просмотра файлов. Информация из них нам не особенно полезна, но лог службы FTP vsftpd.
все же окажет нам немалую услугу.
От LFI к RCE
Есть несколько способов получить удаленное выполнение кода (RCE), имея LFI, и один из них я сейчас покажу. Дело в том, что мы можем заставить веб‑сервер обратиться к файлу логов службы FTP и таким образом косвенно выполнить туда запись. Например, если мы попытаемся авторизоваться от лица пользователя test_test_test
, то эта строка попадет в этот лог. Таким образом, мы можем записать в файл код на PHP и, обратившись к этому файлу через веб‑сервер, выполнить его!
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»