Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Центральной частью этого райтапа будет повышение привилегий в Linux через модуль PHP — мы проэксплуатируем бинарную уязвимость целочисленного переполнения в нем. На пути к этому используем баг HTTP request smuggling в Haproxy и через LFI прочитаем SSH-ключ пользователя.
Наша цель — получение прав суперпользователя на машине Ouija с учебной площадки Hack The Box. Уровень ее сложности — «сложный».
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
10.10.11.244 ouija.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
).
Результат работы скрипта
Сканер нашел три открытых порта:
На начальном этапе нам доступно два веб‑приложения.
Главная страница сайта ouija.htb
Главная страница сайта ouija.htb:3000
При просмотре истории запросов в Burp History можно увидеть запрос к домену gitea.ouija.htb
.
Burp History
Добавляем новый домен в /etc/hosts
и просматриваем доступные неавторизованному пользователю репозитории.
10.10.11.244 ouija.htb gitea.ouija.htb
Главная страница сайта gitea.ouija.htb
Доступен только один репозиторий, описание которого раскрывает некоторые используемые технологии. Отдельно отмечаем прокси‑сервер Haproxy.
Содержимое репозитория
Так как ничего интересного в самом репозитории найти не удалось, приступим к сканированию.
Справка: сканирование веба c feroxbuster
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов с целью поиска скрытой информации и недоступной обычным посетителям функций. Для этого можно использовать программы вроде dirsearch, dirb или ffuf. Я предпочитаю feroxbuster.
При запуске используем следующие параметры:
-u
— URL; -w
— словарь (я использую словари из набора Seclists); -t
— количество потоков; -d
— глубина сканирования. Задаем нужные параметры и запускаем сканер:
feroxbuster -u http://ouija.htb/ -t 128 -d 1 -w files_interesting.txt
Результат сканирования файлов с помощью feroxbuster
Страница server-status
содержит логи запросов. По логам снова делаем вывод о проксировании на порт 8080.
Содержимое файла server-status
Аналогично сканируем и каталоги на порте 3000, где работает API NodeJS.
feroxbuster -u http://ouija.htb:3000/ -t 128 -d 1 -w directory_2.3_medium_lowercase.txt
Результат сканирования файлов с помощью feroxbuster
Найденный страницы сообщают либо об ошибке, либо о том, что нужны дополнительные заголовки HTTP.
Содержимое страницы /register
Содержимое страницы /users
То, что мы нашли новый поддомен, указывает на то, что их может быть и больше двух. Так что давай расчехлим сканер fuff и запустим со следующими параметрами:
-u
— URL; -w
— словарь; -t
— количество потоков; -H
— HTTP-заголовок; -fs
— фильтр по размеру ответа. ffuf -u "http://ouija.htb" -H 'Host: FUZZ.ouija.htb' -t 128 -w subdomains-top1million-110000.txt -fs 10671
Результат сканирования поддоменов
Все поддомены, содержащие подстроку dev
, возвращают код 403. Это наводит на мысль о том, что используется фильтр.
Мы знаем о том, что используется Haproxy, а это значит, что для него можно поискать готовые эксплоиты. Проще всего это делать в Google.
Поиск эксплоитов Google
В первом найденном репозитории находим PoC.
PoC запрос
Выполняем подобный запрос, но в качестве целевого адреса указываем сайт на домене dev
.
POST /index.html HTTP/1.1 Host: ouija.htb Content-Length0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Content-Length: 38 GET http://dev.ouija.htb/ HTTP/1.1 h:GET / HTTP/1.1 Host: ouija.htb
Запрос на сервер
И в ответе получаем две страницы сразу: ouija.htb
и dev.ouija.htb
. На второй — два файла. Загружаем их запросами вроде следующего:
POST /index.html HTTP/1.1 Host: ouija.htb Content-Length0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Content-Length: 60 GET http://dev.ouija.htb/editor.php?file=app.js HTTP/1.1 h:GET / HTTP/1.1 Host: ouija.htb
Файл app.js
— это исходный код приложения, которое работает на порте 3000. API /file/get
представляет интерес (строки 58-76), хотя и содержит фильтр, который должен предотвратить локальное включение файлов (LFI). Наша главная проблема — в аутентификации, которую нужно пройти, не зная учетные данные.
Источник: xakep.ru