<<игра с лучшим отношением к игрокам

О багах (ошибках) в Carnage

Данная статья компиляция предыдущих, удаленных, мне кажется многим будет интересна тема ошибок в онлайновых играх, поэтому она имеет место быть.

Рассказывать об ошибках (они же дыры, они же баги), дело, в принципе, неблагодарное, тем не менее, я попытаюсь отразить основную суть. Прежде всего, ошибки можно поделить на 3 категории:

  • Ошибки которые приносят вред серверу
  • Ошибки которые приносят вред пользователю сервера
  • Ошибки которые приносят вред и пользователю, и серверу

    Расскажу вкратце и в примерах по каждому из пунктов.

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

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

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

    Весьма приблизительно, и условно, но, надеюсь, общее представление об ошибках Вы получили.

    Отмечу, что в Carnage подобных ошибок (в особенности типа 2 и 3) было немало.

    Примечание: все ошибки давно исправлены (и переданы администрации сразу после обнаружения), не пытайтесь их использовать!

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

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

    Эта информация указывалась в поле UserAgent (т.е. под каким браузером заходит посетитель, какие расширения стоят). В итоге при тестировании идентификатора я попробовал указать в UserAgent что-то вроде <script>alert('');</script> - этот безобидный скрипт выводит пустое сообщение. К моему удивлению он сработал.

    Как это можно было использовать: данную информацию видят инквизиторы и администрация, путем специально сформированного кода можно было

  • Захватить контроль над персонажем (инк.\админ.) под которым открыли информацию

  • Перехватить управление компьютером с которого открыли информацию

    Я сознательно опускаю подробности, как именно реализуются эти пункты.

    Еще одним интересным багом была особенность ремонтной мастерской - она позволяла не только чинить вещи, но и портить их. Как это использовать? - Скажите вы. Очень просто. При починке на отрицательное число на счет персонажа добавлялась положительная сумма во флоринах (мы ведь портим, а не чиним - следовательно с нас не снимают деньги - наоборот!). Неплохой способ стать олигархом в короткие сроки, не так ли? ;)


    Ранее мы говорили об XSS в UserAgent, очень интересная ошибка, которая вызвала у меня удивление - в коммерческих проектах как правило принято проверять эту переменную, но перейдем к следующей порции ошибок. Прежде всего, поговорим еще немного об XSS, как я ранее отмечал, в проекте их было множество. Все дело в том, что некоторые переменные, переданные в ссылке, не проверяются на фильтрацию специальных символов, таких как <, >, ", ' и ряд других. Это приводит к тому, что можно сформировать такую ссылку, при нажатии на которую пользователь получит совсем не то, что ожидает, и, как уже говорилось, хакер может:

  • Захватить контроль над персонажем который открыл ссылку
  • Перехватить управление компьютером с которого ссылку открыли
    Подобная вещь, например, проходила на ЦП, вместо ника нападения указывалось специальное выражение, затем эту ссылку можно было послать любому другому персонажу, и если он нажимал на нее (а любопытных большинство), то вполне могло произойти см. выше. Особенность от ссылки на любой другой сайт в том, что:
  • Человек мог потерять персонажа сразу же
  • Другой человек мог получить контроль над персонажем при этом не афишируя своего присутствия
  • Ссылка была кликабельной - т.е. человек мог нажать на нее, не нужно ни копировать, ни вставлять куда-то, нажимать enter...

    Я не буду рассказывать, как реализуется второй вариант в целях безопасности. Я не преследую цели рассказать КАК это делается, я объясняю ЧТО было в проекте.

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

    Одна из самых интересных ошибок, из тех, что я встречал, это свободное блокирование Carnage путем попытки напасть на себя. Достаточно было попытаться напасть кровавым нападением на себя и сервер просто уходил в ступор на 5 минут. Для всех игроков. Какие-то комментарии нужны? Ошибка была исправлена через 20 минут после того, как сообщил о ней.

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

    Честно скажу, на поиск данной ошибки меня навела статья Кости про БК, в котором эта ошибка была раньше. Традиционно я не буду писать, как получается - только по факту. У меня нет цели готовить армию ха(ц)керов-самоучек.

    В общем, как бы там ни было через банк можно было получать ЛЮБЫЕ суммы. Флорин, или сестерций - да чего угодно, собственно. Оделся немного, в счет оплаты бага, соответственно.


    На скриншоте видно, что сумма отрицательная на счете - это уже Дима постарался оперативно, отследил, так сказать, я и не стремился быть аккуратным - ошибки во зло проекту я не использовал НИКОГДА. Все ошибки сразу же после обнаружения тут же были переданы администрации проекта. Все ошибки на данный момент исправлены. Период их обнаружения в основном 2006 год. Публикация о них — декабрь 2007 года.




  • Если Вы хотите поддержать развитие сайта, то мои реквизиты WebMoney: Z841163224576 R345107266846 E571868106559. Других нет! Другие электронные деньги можно перевести через http://roboxchange.com/. © ALaKO, 2007-