Статейка про некогда нашумевшие программы [Конкурс №58]
Статья была написана к конкурсу №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 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Чтобы его прочитать, вы должны заработать сообщения. Как это сделать бесплатно, описано в правилах форума. Как купить доступ, описано в Платных услугах.
Все наверное знают про две интересные программы под названием Admin Tools и RFC (программа, которая вытаскивает пароль и логин от базы), которые подпортили жизнь очень большому количеству нубо фришкам. Это можно судить по разделу с базами: https://www.rf-cheats.ru/forum/forum...460&order=desc
Ну а насчет этого ты не совсем прав) Большинство "баз" в этом разделе, либо начеканные, либо выкачанные через дыру IPB форума
Последний раз редактировалось Dino; 17.07.2015 в 21:50.
Причина: Добавлено сообщение
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Чтобы его прочитать, вы должны заработать сообщения. Как это сделать бесплатно, описано в правилах форума. Как купить доступ, описано в Платных услугах.
Установил соединение с аккаунт-сервером по порту 29000, отправил пакет {0x05, 0x00, 0x01, 0x1F, 0x00 }, и НЕ получил ответный пакетик c опкодом {0x01, 0x20}
Получил пакет 05 00 65 01 00. Что не так?
Понимаю, что некропостер, но пытаюсь допереть сам. Естественно хайд не вижу, поэтому сорсы мне не доступны. Но набросать в с++ проект и сам смог.
Давненько я сюда не заходил...
{0x65, 0x01} и {0x65, 0x02} это пакеты пинг-понга, они начинают сыпаться после установки соединения с периодичностью в 1сек. Если ответ не приходит сразу, то отправляй запрос с задержкой в 1-2сек после установки соединения, дай акксерверу время на завершение внутренних процессов. И читай все пакеты идущие в сторону твоей проги.
Спасибо попробую. Возможно я действительно не давал времени на ответ) думал пакет первым приходит. Попробую по приезду домой. Из за ситуации с КВ на вахте закрыли на 70 дней :(