Тогда, особо не надеясь на чудо, я решил проверить веб-морду на общеизвестные уязвимости. Joomla оказалась дырявой, как старое эмалированное ведро.

Для начала заглянул в исходный код главной страницы и открыл файл manifest.xml в каталоге администратора. Так я мгновенно узнал точную версию движка. Им оказалась доисторическая ветка 1.5, которую забросили ещё во времена зарождения мобильного интернета. С такой версией даже не нужно гадать: база данных потенциальных эксплойтов под неё занимала десятки страниц.

Запустил простенький скрипт-сканер, чтобы составить карту установленных расширений. Через полминуты на консоли высветился список сторонних плагинов, среди которых сиротливо висел старый компонент фотогалереи.

Судя по всему, его поставили лет десять назад, чтобы выкладывать размытые фотографии с институтских юбилеев и субботников.

Быстрый поиск по базе уязвимостей выдал нужную и древнюю CVE-шку. Этот плагин не фильтровал входящие GET-запросы, что позволяет провести классическую SQL-инъекцию.

Вместо стандартного идентификатора картинки я подставил в адресную строку специально сконфигурированную конструкцию с нужным оператором. Скрипт послушно выполнил команду прямо в теле базы данных MySQL, заставив движок сайта выплюнуть на экран содержимое системной таблицы jos userses.

Передо мной развернулся дамп с именами, почтовыми ящиками и заветной строкой администратора. Пароли, конечно, лежали в хэшах, но тридцать два шестнадцатеричных символа выдавали старый алгоритм MD5 в чистом виде, без какой-либо соли или динамических префиксов. В современных реалиях это даже не защита, а просто забавная математическая формальность.

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

Пароль администратора «nii2012». И это… нехорошо.

Безответственные мудаки, блядь! А если какой-то еблан, ну, скажем, завербованный подросток решит сломать им техпроцесс или спиздить чертежи и продать врагам? Ебаные ретрограды, сука!

Войдя в админку под легитимной учёткой, сразу полез в менеджер расширений. Панель управления Joomla снова встретила меня аскетичным интерфейсом родом из прошлого десятилетия. Раз сайт крутился на той же физической машине, что и видеосервер, мне нужно было заставить этот веб-движок выполнить код на уровне самой операционной системы Windows.

Написание простенького веб-шелла на PHP заняло от силы три минуты. Это был крошечный скрипт, текстовый файл, замаскированный под безобидный модуль календаря, который принимал системные команды через обычную адресную строку браузера.

Упаковал его в zip, нажал кнопку «Загрузить и установить» в панели управления и обратился к созданному каталогу напрямую.

Браузер моргнул, выдав пустой чёрный экран с одной-единственной строкой ввода. Набрал стандартную команду проверки текущих прав, whoami. Страница обновилась, и сервер послушно выплюнул ответ: nt authority\system. Максимальные права в системе.

Старая Windows Server 2003 даже не пикнула. В эти годы операционные системы доверяют процессам веб-серверов по умолчанию. И никаких современных антивирусных систем, способных отследить подозрительную активность дочерних процессов, здесь отродясь не водилось.

Я находился внутри системы с правами админа, но передо мной всё ещё слепая консоль. Скачивать гигабайты видеоархива через текстовые команды — то ещё удовольствие. Мне нужен полноценный графический интерфейс.

Для этого требовалось активировать встроенную службу удалённого рабочего стола, которую ленивый местный админ, скорее всего, даже не додумался отключить.

Через свой веб-шелл отправил команду в системный реестр Windows, принудительно активировав службу Terminal Services, и сразу же создал нового пользователя с правами локального администратора. Пароль, разумеется, придумал нормальный, а не как у этих мудаков.

Пришло время финального теста. Запустил стандартную утилиту подключения к удалённому рабочему столу у себя на компе, вбил внешний IP-адрес НИИ и порт. Экран моего ноута на секунду погас, а затем я увидел классический серый рабочий стол Windows Server 2003 с синей заставкой.

Прямо по центру экрана висел ярлык программы видеозахвата. Нажав на него, я получил доступ к сетке трансляции всех камер института. Архив записей лежал на диске D:\ в аккуратных папках, разбитых по датам. Найти нужный мне тридцатиминутный отрезок оставалось делом техники.

И вот это, блядь, что такое, а? Почему левый хер типа меня получил доступ к камерам режимного объекта? Просто нет слов. Я ведь сработал на уровне школоты, впервые занявшейся хакингом!

Запустил старый добрый Windows Media Player прямо внутри сессии удалённого стола. Картинка пошла рывками, но разобрать происходящее было можно.

Пару первых минут на экране ничего не происходило. Серое марево сумерек, пустой асфальт, редкие капли дождя на защитном стекле купола. Но ровно в нужный момент картинка взорвалась.

На экране это выглядело как кислотно-зелёный всполох, мгновенно ослепивший добрую треть кадра. Не модернизированный прибор рубанул на полной мощности. Сука!

Ещё на неоткалиброванном зелёном спектре это смотрелось не как случайный блик, а как падение метеорита или короткое замыкание высоковольтного кабеля прямо перед объективом. Пятно пульсировало, края ПЗС-матрицы камеры отчаянно пытались скомпенсировать пересвет, вытягивая экспозицию, из-за чего остальная часть кадра провалилась в глухую непроглядную тьму.

Перемотал на несколько секунд вперёд. Зелень ушла, но оставила прямо по центру оптической оси камеры след. Через весь экран теперь тянулась жирная мёртвая фиолетовая полоса — классический след выжженных КМОП-регистров. Из-за избыточной мощности сфокусированного луча кремний физически деградировал. Камера была необратимо испорчена.

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

Глава 9

Июнь 2012 года. Воронеж, Москва, Российская федерация.

— Кирилл, я не могу тебя сейчас отпустить. Испытания вышли на финишную прямую. Почти всю работу делаешь ты с Осиповым. А он взял больничный.

Началось в колхозе утро! Вернее, в НИИ, хотя разница небольшая. Уровень управления и применимые технологий примерно одинаковые. Бардак и упадок, если быть точным. Ещё кое-кто не хочет держать слово.

Заглянул с утра в бокс Казарцева и положил ему на стол заявление на небольшой отпуск. У меня ещё с прошлого года осталось несколько дней. Намедни бухгалтерия потребовала решить этот вопрос. Вроде всё удачно сложилось, и тут вдруг препоны на ровном месте.

Я смотрел на толстое лицо начальника, заставив того заёрзать в кресле. Это он моего взгляда испугался? Есть такое дело. Недобрый у меня взгляд. Надо снизить накал агрессивности, мне с Ильичём ещё работать. И вообще, в сторону эмоции, пусть даже изо рта у шефа несёт со страшной силой.

Он, вообще-то, на моей стороне. Это Сергей Осипов подгадил. Подпевала Бузникина, такой же болван и бездельник, переложивший на Кирилла всю работу с тестированием образца микросхемы. Я привёл товарища в чувство, заставив шевелиться. Но этот склизкий тип всячески затягивал процесс, а теперь соскочил на больничный.

— Михаил Ильич, не буду напоминать о достигнутых соглашениях. Я бы пошёл вам на встречу, но мне действительно нужны три-четыре дня. Предлагаю совместить их с выходными, получится два дня, — после моих слов шеф немного расслабился. — Насчёт Осипова давайте решать. Мало того, что он саботирует процесс. Так теперь якобы заболел. Хотя все прекрасно знают, что Серёжа забухал. Или поехал копать картошку к маме в Урюпинск.