Статья была написана к
конкурсу №58 еще в начале 2014 года, но т.к. на конкурс практически небыло заявок, она не публиковалась. Публикую её практически в том-же виде, что и писал для конкурса.
Все наверное знают про две интересные программы под названием Admin Tools и RFC (программа, которая вытаскивает пароль и логин от базы), которые подпортили жизнь очень большому количеству нубо фришкам. Это можно судить по разделу с базами:
https://www.rf-cheats.ru/forum/forum...460&order=desc
В этой статье я хочу рассказать, каким образом были найдены данные уязвимости, рассказать о принципе их работы, а так же показать примеры их реализации.
В качестве примера выступают оригинальные исходники этих самых нашумевших программок.
Итак, пойдём по порядку. Программка Admin Tools.
Как появилась идея создать Admin Tools?
История создания этой программы началась еще в далеком 2008 году, в то время существовал такой “прекрасный” сервер, который назывался NovusGalaxy.
В то время у меня была сборка 5 апа с рабочим ContolServer’ом и Manage Tools.
Как-то я баловался с ГМ-чатом в MT, и написал туда комманду и к моему большому удивлению зона упала. После этого, я решил попробовать приконнектить эту громадную связку к серверу NovusGalaxy, и опять-же был очень удивлен тем, что это получилось.
К моему сожалению, эта связка была крайне неудобна и требовала наличие установленного SQL сервера, поэтому я решил ее “уменьшить”.
Первым делом, я наснифал пакетиков, разобрал их структуры (тогда я ещё незнал что есть замечательная штука под названием IDA, да и вообще был далёк от реверсинга и т.п.), после чего написал небольшую программку на Visual Basic 6 которая имела несколько функций:
- отправка сообщений в ГМ чат;
- включение/выключение логин и гейм-сервера;
- автоматическая отправка текста;
- Отправка GM комманд на включенный сервер;
А теперь перейдём к описанию уязвимости:
Данная уязвимость заключается в следующем: В игровом сервере имеется функция обработки ГМ комманд (ProcessCheatCommand), она имеет 2 параметра: указатель на класс игрока вызвавшего её (pOne) и комманда (pwszCommand).
При использовании в обычном режиме параметр pOne содержит указатель на класс вызвавшего игрока, однако при вызове функции из анализатора Account-Zone протокола туда передаётся NULL. А так как большая часть ГМ комманд РФки требует наличие валидного указателя pOne (т.к. исполняемый код комманд реализован именно в пространстве класса CPlayer, а он равен NULL), тут в процессе происходит исключение 0xC0000005 (ACCESS_VIOLATION) и он соответственно закрывается без сохранения последних данных.
Реализация:
После установки соединения с аккаунт-сервером необходимо послать пакет авторизации, а именно (опкоды 0x32 0x01 см. в примере Form1 ln. 214), затем можно посылать пакеты изменения состояния (опкоды 0x32 0x05 для зоны, 0x32 0x0B для логина) или ГМ чата (опкоды 0x32 0x07). Исходники содержат в себе все необходимые комментарии.
Как появилась идея создать RFC (RF Cracker)?
Данная уязвимость была найдена намерено в 2011. Меня попросили посодействовать в “убивании” одного сервера, на что я согласился.
На тот момент, я уже достаточно хорошо ориентировался в протоколах РФки, и знал что аккаунт-сервер передаёт логин и пароль от билинговой БД к зоне. После изучения анализатора аккаунт-сервера я пришел к выводу что можно без всяческих проблем одним пакетом (запросом) получить нужные мне данные (т.к. там нет проверки авторизации зоны на аккаунт-сервере).
Описание уязвимости:
У меня ОЧЕНЬ хорошие новости для тех, кто держит открытыми порты аккаунт-сервера!
Особенно, если открыт порт от SQL сервера + ко всему они очень любят использовать аккаунт sa (Server Admin), а имея доступ к SQL можно оперировать системой через коммандную строку используя системную хранимую процедуру xp_cmdshell (по умолчанию она выключена, но включить её не составит особого труда).
Соответственно вы получаете полноценный shell доступ на машинку, а там можно делать всё, что вашей душе угодно.
Например:
- Рекусивное форматирование
- Слив любых файлов (абсолютно любых)
- И вообще все, что можно сделать с помощью cmd
Реализация:
Устанавливаем соединение с аккаунт-сервером по порту 29000, отправляем пакет {0x05, 0x00, 0x01, 0x1F, 0x00 }, и получаем ответный пакетик c опкодом {0x01, 0x20} затем, просто выводим из него 4 строчки длинной 32 байта (DSN, DBName, Account, Password) и в конце int (порт SQL сервера). Разобрав пакет идём в SSMS (Sql Server Management Studio) и начинаем делать свои дела.
Во вложении исходники тех самых программ в первозданном виде.
Пароль к архиву:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Чтобы его прочитать, вы должны заработать сообщения. Как это сделать бесплатно, описано в правилах форума. Как купить доступ, описано в Платных услугах.
|