TryHack3M: Subscribe
Can you help Hack3M reach 3M subscribers?
TryHackMe: Прохождение комнаты Subscribe.
Часть модуля TryHack3M Special.
Доступ к комнате доступен только для аккаунтов с премиальной подпиской.
Имеется сайт, который был взломан и на нём была отключена регистрация новых пользователей, необходимо восстановить доступ и вновь запустить регистрацию.
После необходимо изучить логи и обнаружить каким образом хакеры взломали веб-приложение.
Exploitation
What is the invite code for the hackme.thm website?
Прежде чем начать, необходимо не забыть добавить запись
<IP-адрес> hackme.thm
в/etc/hosts
, где <IP-адрес> – это адрес запущенной машины.
При открытии сайта имеется возможность регистрации и авторизации. При попытке регистрации указано, что регистрация отключена и вход возможен только по приглашениям.
Изучение исходного кода страницы приводит к скрипту invite.js
:
Похоже, имеется возможность получить пригласительный код на сайте capture3millionsubscribers.thm
. Поскольку предполагается, что сайт располагается по тому же самому IP адресу, что и hackme.thm
, запрос будет следующего вида:

Запрос возвращает код приглашения.
What is the password for the user guest@hackme.thm?
Ввод кода приглашения на странице регистрации http://hackme.thm/sign_up.php
выдает пару для гостевого входа на сервис: адрес электронной почты и пароль.
What is the secure token for accessing the admin panel?
После авторизации на сайте с полученными данными гостевого входа пользователь получает доступ к двум обучающим комнатам. Первая из них бесплатная, вторая же только для vip пользователей и попытка её открыть автоматически переводит на страницу подключить платную подписку.
Если изучить куки на сайте, можно обнаружить isVip
со значением false
. После изменения на true
, появляется возможность открыть вторую комнату.
В данной комнате при попытке запустить машину, появляется сообщение, что это возможно только для vip пользователей. Изучение скрипта показывает что необходимо в скрытом элементе с идентификатором isVIP установить значение в true
:
Теперь запуск машины приводит к появлению окна с консолью машины (для этого загружается BBF813FA941496FCE961EBA46D754FF3.php
). Изучение скрипта обработки команд дает подсказку какие команды можно использовать:
document;
Альтернативно можно выполнить команды напрямую с помощью curl
; интересным является содержимое файла config.php
, где содержится адрес панели для администрирования и код доступа в переменной $SECURE_TOKEN
:
"command=cat config.php"

What is the flag value after enabling the registration feature and getting 3M subscribers on the platform?
Для продолжения в файл
/etc/hosts
необходимо добавить запись дляadmin1337special.hackme.thm
соответствующий IP-адресу запущенной машины.
При попытке открыть адрес http://admin1337special.hackme.thm:40009
происходит автоматическое перенаправление на /public/html/
и выводится сообщение об отсутствии доступа.
С помощью ffuf
можно провести перебор на поиск дополнительных каталогов:
Если у вас в системе нет словарей (из коробки они имеются, например, в linux дистрибутивах Parrot и Kali), то их можно скачать в репозитории SecLists.

Обнаружены три дополнительных точки входа: login
, logout
и dashboard
.
При открытии адреса /public/html/login
будет запрошен код доступа, это ранее полученный код для доступа к панели администрирования. После его ввода появляется окно авторизации с требованием логина и пароля. Попытка ввода данных для гостевого входа ни к чему не приводит, появляется сообщение о неверном логине либо пароле.
Актуально как минимум для версии
tryhackm3v2.1
В комнате присутствует баг: если установить полученную ранее гостевую кукуPHPSESSID=n09umj5fvb260lm90l42sap8eh
, тогда сразу же будет открыт доступ к/dashboard
и прохождение комнаты, по сути, будет завершено.
Очевидно, что гостевой доступ не может предоставлять доступ к панели администратора, на практике же возможно и такое, собственно как в данном случае и получилось, когда все механизмы защиты оказались бесполезны в силу ошибки разработчиков.
Самая простая проверка на SQL-инъекции в виде ввода в поле логина ' or 1=1--
приводит к тому, что сообщение об ошибке не появляется. Форма авторизации уязвима и можно запустить полную проверку с помощью sqlmap
.
Для этого необходимо правильно сформировать POST запрос и сохранить в отдельный файл (req.txt
), запрос можно взять прямо из браузера (самые популярные браузеры имеют инструмент Web Inspector, где это возможно проделать на вкладке Network), либо перехватить с помощью Burp Suite.
POST /api/login.php HTTP/1.1
Host: admin1337special.hackme.thm:40009
Accept: */*
Content-Type: application/json
Сканирование:

В полученном списке баз данных особый интерес представляют две: hackme
и phpmyadmin
. Последняя, увы, пуста. А первая содержит полезные данные:
Database: hackme
Table: users
+----+------------------+------------+--------+--------+------------+----------+
| id | email | name | role | status | password | username |
+----+------------------+------------+--------+--------+------------+----------+
| 1 | admin@hackme.thm | Admin User | admin | 1 | <redacted> | admin |
+----+------------------+------------+--------+--------+------------+----------+
Database: hackme
Table: config
+----+--------+---------+
| id | title | value |
+----+--------+---------+
| 1 | signup | invite |
+----+--------+---------+
Получен логин и пароль администратора (role = admin
), так же в таблице config
можно заметить, что регистрация (title = signup
) заблокирована ибо в качестве её способа выбраны приглашения (value = invite
).
Используя полученные данные учётной записи можно авторизоваться на странице http://admin1337special.hackme.thm:40009/public/html/login
и получить доступ к настройке типа регистрации и выбрать пункт “Sign Up”.
Теперь достаточно открыть главную страницу сайта hackme.thm
и получить финальный флаг:
Актуально как минимум для версии
tryhackm3v2.1
Баг комнаты: следуя логике, на страницеhttp://hackme.thm/sign_up.php
должна была бы появиться форма для регистрации пользователей, однако там по-прежнему указано, что регистрация отключена и необходимо ввести код приглашения.
Detection. Investigating the Attack
How many logs are ingested in the Splunk instance?
В Splunk выбирается новый поиск (New Search), в поле ввода указывается символ “звездочка” и в фильтре пункт “All time”:
Прямо под запросом отображается количество записей (1).
What is the web hacking tool used by the attacker to exploit the vulnerability on the website?
В поле поиска задается статистика для поля user_agent
для отображения самых редких значений:
*| rare limit=20 user_agent

Сразу же бросается в глаза (2) использование популярного инструмента.
How many total events were observed related to the attack?
Там же указано и количество событий (3) связанных с использованием данного инструмента.
What is the observed IP address of the attacker?
Выбрав на предыдущем шаге запись с обнаруженным агентом, в поиске будут отображаться все события связанный только с ним. Соответственно сразу виден IP-адрес злоумышленника. Поиск записей только для данного адреса (4):
How many events were observed from the attacker’s IP?
Сразу под полем для поиска отображается количество событий (5) связанных с IP-адресом злоумышленника.
What is the table used by the attacker to execute the attack?
Под кнопкой поиска необходимо убедиться, что выбран умный режим (Smart Mode), тогда появляется возможность в левой части окна, где расположены все поля всех записей выбрать поле uri
, где сразу бросается в глаза используемый злоумышленником запрос для SQL-инъекции и имя таблицы из которой были получены данные:
SSywp=7014 AND 1=1 UNION ALL SELECT 1,username,password,2,3,4
FROM <REDACTED> WHERE role="admin" ORDER BY role LIMIT 1--/**/;
На этом всё,
другие части модуля здесь.