World of Warcraft: как ломали пиратки (Взлом)

Рейтинг:  3 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда не активнаЗвезда не активна
 

logo vzlom wow

Продолжение позновательной экскурсии о способах взлома пиратских серверов world of warcraft. Эта статья является третьей, две другие можно посмотреть по ссылкам, которые я укажу ниже.

 ЗАМЕНА ФАЙЛОВ КЛИЕНТА

В предыдущей статье мною описывались способы взлома, так вот подобный способ эксплуатации уязвимостей с подменой пакетов очень похож на подмену пакетов, с той разницей, что тут
осуществляли подмену файлов на клиенте. Стоит сделать отступление и сказать, что многие файлы на сервере и клиенте были связаны один в один (карты, DBC-файлы — информация о спеллах, музыке и других вещах), в том числе и MPQ-файлы. Можно было их распаковать и найти в них много интересного. Начали появляться измененные MPQ-файлы, где были среди прочего заменены ID спеллов. При их использовании на сервер отправлялся другой пакет.

WEB?!

armory wow

Конечно же, любой уважающий себя сервер WoW должен был иметь сайт. Логично, что, допустив ошибку в коде на сайте, можно было получить некоторый доступ к базе.

Чаще всего базой для сервера WoW выбиралась всем известная MySQL, то есть к одному серверу БД подключался и сайт (где был скрипт регистрации, мониторинга и прочее), и сервер.

На сайтах, посвященных серверам WoW, можно было найти различные поделки от энтузиастов. Обычно это просто рипнутый дизайн с официальной странички WoW Blizzard и свой серверный код (в большинстве своем PHP). Были и просто ужасные подделки, которые хорошо работали, но я сам порой находил в них за 5–10 минут SQL-инъекции и репортил разработчикам (при этом, конечно, не используя вообще их скрипты).

Но были и разработки от действительно хороших программистов (надо сказать, что среди community встречалось очень много талантливых людей с опытом, в том числе разработчики из банков в Швейцарии и не только). И, по моему скромному мнению, одна из самых серьезных работ — это скрипт armory от Shadez. Армори (оружейная) — это обширная база данных с прозрачным и удобным интерфейсом, по которой можно производить поиск.

Все данные поступают напрямую из игровых миров, поэтому в армори можно найти самую полную и свежую информацию о персонажах, командах Арены, гильдиях, предметах и наградах для фракций World of Warcraft. И написан скрипт правда хорошо, практически с полной функциональностью официального армори, с применением ООП, шаблонизатора и так далее. И у него была недописанная админка с… SQL-инъекцией, которая всплыла довольно поздно, когда скрипт уже был установлен на множестве серверов.

Наверное, это один из самых громких и массовых взломов серверов WoW через веб.

 

АТАКИ ИЗКЛИЕНТА


worken WPEЗапущенный WPE ивыбор фильтров

А как насчет атаки на сервер прямо из клиента WoW? Ведь клиент отправляет данные, сервер сохраняет их в базе… SQL-базе. Тикет https://github.com/TrinityCore/TrinityCore/issues/4287, следующий код был на серверной стороне

bool ObjectMgr::AddGameTele(GameTele
& tele)
{
...
WorldDatabase.PExecute("INSERT INTO game_tele (id, position_x, position_y,position_z, orientation, map, name)
VALUES (%u, %f, %f, %f, %f, %d, '%s')",
new_id, tele.position_x, tele.
position_y, tele.position_z, tele.
orientation, tele.mapId, tele.name.
c_str());
..

}

Данная команда (по дефолту) требовала некоторый уровень доступа (что-то типа модератора). Она добавляла место для телепорта на текущую позицию с заданным именем.

Стоишь в данной точке карты, пишешь в чат .tele add namefortele, а потом просто в нуж-ный момент .tele namefortele и оказываешься на этой позиции. Как можешь заметить, все переменные, кроме последней, рассчитывались на серверной стороне. И последнюю переменную сервер должен был принять и положить в базу от клиента.

Из-за отсутствующего экранирования спецсимволов была возможна атака с вектором:

.tele add namefortele') %Injection_Here% -- - !

Не правда ли, это не так привычно — использовать SQL-инъекцию не через браузер/Burp/sqlmap? :)

Фикс был логичен, добавить escape, присущий текущему подключению к базе:

std::string safeName(tele.name);
WorldDatabase.escape_string(safeName);


и заменив в запросе

tele.name.c_str()

на

safeName.c_str()

НЕТИПИЧНЫЕ РАСШИРЕНИЯ

wow attack

WoW — легко расширяемая игра. В ней возможно «законное» подключение аддонов, написанных на Lua. В итоге было множество реализаций для автоматического выполнения некоторых действий (например, рыбалки. Кинул удочку, кликнул в нужный момент, вытащил рыбу). Довольно много таких аддонов можно было просто найти в Сети.

ЧТО ДЕЛАЛИ ЕЩЕ?

Дюпали вещи (копирование вещей в рюкзаке, через WPE), находили бажные квесты (берешь дейли-квест, оказывается, что ничего делать не надо, сдаешь. И так каждый день), находили бажных мобов (с малым количеством здоровья / малой атакой) и разные другие вещи, но это уже не совсем технические аспекты атак, которые мы рассматриваем.

ОТСТУПЛЕНИЕ

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

В момент, когда WoW достигла своей, наверное, максимальной популярности (конец патча WotLK, переход на Cataclysm), разработчики начали с каждым патчем (которые выходили примерно раз в месяц-три) рандомно менять опкоды между клиентом и сервером, что полностью рушило уже имеющийся, наработанный за несколько лет и постоянно пополняемый протокол.

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

И плюс они убрали возможность свободно менять realmlist.wtf. Да, это исправлялось небольшим патчем EXE-файла, но на этой почве начались разногласия между разработчиками — до этого, все эти годы, не надо было изменять клиент (бинарную структуру), что никак не нарушало лицензию Blizzard. Плюс официально запретили снифать трафик между сервером и клиентом, извлекать данные из кеша и другое (да, об этом никто бы и не узнал, но снова — нарушение лицензии). Это и многое другое затормозило разработку подобных эмуляторов с отставанием примерно на год, но потом все же появились инструменты (с открытым кодом) для автоматизации парсинга опкодов и обхода других костылей. Но провал в разработке случился громадный.

Кстати, из забавного. Порой в опкодах можно было найти «приветы» реверсерам от разработчиков WoW :).

Или, когда выходила Diablo 3 и еще не было официального релиза, а уже был эмулятор для бета-клиента (Mooege) с более-менее работающим протоколом и основной механикой, Blizzard просто взяли и закрыли «по-хорошему» эмулятор, договорившись об удалении репозитория на GitHub, всех веток форумов и роспуске команды. Они уже знали, насколько могут быть фанатичны и игроки, и комьюнити. Опыт нескольких лет с World of Warcraft.

FIN

durov

Надеюсь, тебе было интересно немного окунуться в другой мир — целую эпоху для open source комьюнити и для многих игроков (и вынести ценную инфу о взломе и защите онлайн-игр). Спасибо тебе за прочтение и спасибо всем тем, кто узнал меня в этой статье :). Были просто потрясающие времена, с тысячами игроков, и это было по-настоящему круто.

 

 

Поделитесь записью в соц. сетях:

Добавить комментарий

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