Как я в 15 лет взломал хостинг

Был тёплый, солнечный обед, все шло своим чередом.

Я писал колесо фортуны в интернет-магазине для сети магазинов мяса, в котором можно выиграть продукт. Сайт писал на Blazor (не WebAssembly), и из-за некоторых его ограничений мне пришлось делать все через костыли (уже переписываю на React и Node).

Мне нужно было прочитать содержимое JS файла и затем выполнить на сайте. Я немного ошибся в пути к файлу и при выполнении возникла ошибка, что нет такой папки. Увидел такой путь в ошибке:

C:\HostingSpaces\user..\ShopWeb\...

user.. — логин моего аккаунта, ShopWeb — название проекта

Хм. Ну можно даже не пробовать посмотреть содержимое папок других пользователей, на хостинге же все права к папкам проставлены… Оказывается — ничего они не проставлены. Я мог получить доступ к большинству папок на этом сервере. Просто для интереса написал скрипт, который берет содержимое HostingSpaces и высвечивает название всех файлов внутри папки HostingSpaces и во всех вложениях.

IEnumerable list = Directory.EnumerateFileSystemEntries(@"C:\HostingSpaces", "*.*", SearchOption.AllDirectories);
IEnumerator listenum = list.GetEnumerator();
while (true)
{
  try
  {
  	bool x = listenum.MoveNext();
    if(x == false)
    {
      break;
    }
  }
  catch
  {
  	continue;
  }
  text += $"\n {listenum.Current} \n";
}
listenum.Reset();
Console.WriteLine(text);

На этом сервере были только ASP.NET Core сайты. Структура папок была одинаковой и скучной. Но у меня возник интерес к файлу appsettings.json. Этот файл в ASP.NET Core является стандартным местом для хранения строк подключения к базе данных, а также для разных API ключей!

Структура файла appsettings.jsonСтруктура файла appsettings.json

Сгенерировал список с содержимым файлов appsettings.json. Сижу, листаю этот огромный список. Везде было свойство ConnectionString и там строка подключения к реальным базам данных. И тут очень привлекли внимание два файла, в которых, кроме строки подключения было ещё какое-то свойство ScpLogin, куча API ключей, а также GitLab token. Я вспомнил, что административная панель моего хостинга базируется на SCP Manager.

Приблизительная структура ну уж очень интересных файлов appsettings.jsonПриблизительная структура ну уж очень интересных файлов appsettings.json

Попробовал зайти в панель управления с логинами и паролями из файлов. И. удалось! Я был очень удивлён. Эти два пользователя были с максимальными правами. Я мог посмотреть всех пользователей, заходить в их админки, перевести их на другой тариф, посмотреть заработки компании, смотреть support-сообщения и даже выключать и управлять виртуальными машинами и серверами. Со своего ASP.NET проекта я мог выполнить cmd команды. Я попробовал создать пользователя, но у пользователя, где выполняется сайт не было прав администратора.

Пришла идея настроить RDP, потом посмотрел, что порт открыт. То есть RDP уже был включён. Но, к сожалению, RDP уязвимости я еще не умею использовать))) Но мне хватило и этого.

Вывод

Поскольку это все смог сделать школьник в 9-ом классе, то это очень серьезная уязвимость хостинга, а если кто-то будет делать это с плохими намерениями, то это может принести очень большой ущерб как компании, так и пользователям! Теперь я буду проверять это на каждом хостинге и вам советую.

Пока не знаю как сообщить хостинг-компании, а то ещё забанят.

© Habrahabr.ru