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

Точка входа
Регистрируемся и заходим на сайт. Нам открывается масса возможностей.

На сайте уже много аккаунтов. Можно переходить к аккаунтам, комментариям, ставить лайки и отправлять сообщения.

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

Чтобы поставить лайк или убрать его, отправляется запрос к API /, а чтобы получить список лайков — к API /.


В ответ от API / получаем список пользователей. Каждая запись содержит ID профиля, путь к аватарке и имя пользователя.

Попробуем в поле имени пользователя записать нагрузку для теста SSTI. И снова запросим список лайков.


В поле, где раньше было имя пользователя, теперь пусто — значит, в шаблоне ошибка. Вывод: SSTI есть.
Точка опоры
Теперь используем нагрузку {{ и в ответ от сервера вместо имени пользователя получаем закодированные данные.
<QuerySet [ <SocialUser: hexhunter>,
<SocialUser: shadowcaster>,
<SocialUser: blackhat_wolf>,
<SocialUser: glitch>,
<SocialUser: codebreaker>,
<SocialUser: shadowmancer>,
<SocialUser: whitehat>,
<SocialUser: brute_force>,
<SocialUser: shadowwalker>,
<SocialUser: {{ users }}>,
<SocialUser: 1234>
]>
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
