Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этой статье мы займемся эксплуатацией неправильно настроенных алиасов nginx, познакомимся с одной из техник получения RCE через локальное включение файлов, поработаем с LDAP в Linux и найдем уязвимость в пользовательском скрипте. Все это поможет нам захватить флаг рута на машине Pikaboo с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
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 default credentials github
. Для этого будем использовать 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, всегда стоит искать уязвимость обхода путей. Она появляется при неправильно настроенных алиасах. Nginx alias — это некий псевдоним, который позволяет скрыть реальное местоположение объекта. Он задается в директиве location
. К примеру, следующая конфигурация установит замену /img/
на /web/data/images/
:
location /img/ {
alias /web/data/images/;
}
При обращении к /img/test.png
веб‑сервер вернет файл /web/data/images/test.png
. Уязвимость появляется при неправильном указании location
, к примеру как в следующей конфигурации:
location /img {
alias /web/data/images/;
}
В этом случае, если мы обратимся к /img../test.png
, сервер вместо того, чтобы вернуть файл /web/data/images/test.png
, выполнит прямую замену алиаса и попытается вернуть /web/data/test.png
, тем самым обходя каталог images
.
Давай воспользуемся обходом через каталог admin
и просканируем содержимое сайта. Для этого мы будем сканировать адрес /admin../
. Так как при обращении к странице /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
Результат сканирования каталогов с помощью ffuf
В результате я нашел несколько интересных файлов. Среди них — очень важный файл server-status
, в котором отражаются все запросы к веб‑серверу Apache. Он и раскрывает нам при обращении к http://pikaboo.htb/admin../server-status
незнакомые до этого момента каталоги. В том числе http://pikaboo.htb/admin../admin_staging/
.
Содержимое файла server-status
Страница admin_staging
Мы нашли несколько страниц, на которые можем перейти. Если заглянуть в Burp History, то мы увидим, что желаемая страница передается в качестве значения параметра page
. А это вероятная уязвимость включения файлов, которую следует проверить.
Запрос в Burp History
При тесте Local File Inclusion можно просто отдать одному из сканеров директорий список с соответствующими нагрузками. Я для перебора использовал Burp Intruder со своими словарями (можешь поискать готовые на GitHub).
Первым делом определяем нагрузку, с помощью которой можно просмотреть доступный для всех системных пользователей файл на удаленном хосте. В результате перебора удалось прочитать файл /var/log/lastlog
через обход директорий последовательностью ../../../../../
.
Результат атаки через Burp Intruder
На втором этапе в найденную нагрузку нужно подставлять самые важные системные файлы, информация из которых может помочь нам продвинуться дальше. Список опять же можно без проблем найти.
Результат перебора важных файлов через LFI
В результате атаки получаем всего пять доступных для просмотра файлов. Информация из них нам не особенно полезна, но лог службы FTP vsftpd.log
все же окажет нам немалую услугу.
Есть несколько способов получить удаленное выполнение кода (RCE), имея LFI, и один из них я сейчас покажу. Дело в том, что мы можем заставить веб‑сервер обратиться к файлу логов службы FTP и таким образом косвенно выполнить туда запись. Например, если мы попытаемся авторизоваться от лица пользователя test_test_test
, то эта строка попадет в этот лог. Таким образом, мы можем записать в файл код на PHP и, обратившись к этому файлу через веб‑сервер, выполнить его!
Источник: xakep.ru