Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Microsoft SQL Server
- Продвижение
- Пользователь mikasaAckerman
- Пользователь lorra199
- Локальное повышение привилегий
Сегодня я покажу, как через запросы к серверу MS SQL можно получить сессию на хосте. Но прежде используем ошибку в логике приложения и повысим привилегии на сайте через IDOR. А получив доступ к Windows, вытащим учетные данные пользователя из дампа оперативной памяти и захватим контроллер домена, применив технику RBCD.
Наша цель — получение прав суперпользователя на машине Freelancer с учебной площадки Hack The Box. Уровень задания — сложный.
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.5 freelancer.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).
Результат работы скрипта
По результатам сканирования имеем много открытых портов:
- 53 — DNS;
- 80 (HTTP) — веб‑сервер Nginx 1.25.5;
- 88 — Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC);
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — LDAP;
- 445 — SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 — служба удаленного управления WinRM;
- 9389 — веб‑службы AD DS.
На SMB анонимной аутентификации нет, поэтому посмотрим, что там на веб‑сервере.
Главная страница сайта
Точка входа
На сайте есть возможность регистрации и авторизации. Причем можно выбрать роль пользователя Freelancer или Employer. Первым делом я зарегистрировался с ролью Freelancer.
Форма регистрации Freelancer
Профиль пользователя
Потратив немного времени, чтобы осмотреться в доступном пользователю окружении, ничего интересного не находим. Взглянем на отличия в окружении у пользователей с ролью Employer. Для этого нужно зарегистрировать второй аккаунт, однако он по умолчанию почему‑то неактивен.
Сообщение о состоянии учетной записи
На сайте есть возможность восстановления пароля. Попробуем «восстановить» неактивную учетную запись. Для этого потребуется ответить на вопросы, указанные при регистрации аккаунта. После этого нам станет доступна форма изменения пароля.
Форма восстановления аккаунта
Форма изменения пароля
После смены пароля и повторной авторизации наша учетная запись неожиданно стала активна.
Профиль пользователя
Пунктов меню стало гораздо больше. Очень интересен раздел с QR-кодом.
Декодируем QR-код и получаем ссылку. При переходе по ссылке мы оказываемся в профиле пользователя.
История запросов в Burp History
Я запросил новый QR-код, разлогинился, перешел по ссылке из кода и снова оказался в профиле пользователя. Такая ссылка валидна всего один раз, но куда интереснее, из чего она состоит: в ней есть какие‑то данные в формате Base64. После декодирования предполагаем, что это идентификатор пользователя.
Декодированные данные в URI
В таких случаях стоит проверять, привязан ли код OTP к ID аккаунта или нет. Для этого я сделал еще один аккаунт, получил ссылку из QR-кода в первом аккаунте, поменял имеющийся в ней ID на ID второго аккаунта, перешел по этой ссылке и попал во второй аккаунт. Таким образом, мы имеем уязвимость Account Takeover и можем получить доступ к любой учетной записи.
Найти ссылки на другие аккаунты можно на страницах блога.
Переходим к любому из аккаунтов и получаем профиль пользователя. Куда интереснее то, что в URI профиля присутствует ID аккаунта.
Профиль пользователя
Точка опоры
Перебрать все аккаунты по ID можно с помощью Burp Intruder. Переправим запрос из Burp History в Burp Intruder комбинацией клавиш Ctrl-R.
Burp Intruder — вкладка Positions
Burp Intruder — вкладка Payloads