Pull to refresh

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

Reading time3 min
Views8.9K

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

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

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

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

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

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

IEnumerable<string> list = Directory.EnumerateFileSystemEntries(@"C:\HostingSpaces", "*.*", SearchOption.AllDirectories);
IEnumerator<string> 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 ключей, ключ Wayforpay (Куда деньги, наверное, приходят. Я думаю их также можна вывести), а также GitLab token. Я вспомнил, что административная панель моего хостинга базируется на SCP Manager.

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

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

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

В папке SolidCP, лежит админка для пользователей(где можно управлять своими сайтами). Я думаю, что эта админка запущена с пользователя с правами администратора, т.е можно попытаться подменить exe файл с сайтом и управлять сервером полностью(настроить rdp, создать пользователя, зайти на роутер и проникнуть еще куда-то).

Вывод

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

UPD: Написал хостинг-провайдеру. Они ответили, поблагодарили, приехали домой, попросили расписаться, что не буду распространять данные, и подарили год хостинга бесплатно.

Ссылки на проект:

arthurlomakin11/ShopWeb (github.com) - это сам проект

arthurlomakin11/ShopWebData: Part of ShopWeb (github.com) - слой данных в проекте

arthurlomakin11/ShopWebApp (github.com) - декстопная программа

Tags:
Hubs:
Total votes 16: ↑10 and ↓6+7
Comments23

Articles