div.main {margin-left: 20pt; margin-right: 20pt}Как был взломан fomenko.ru.
Жена завязла в онлайновых играх на
fomenko.ru, движимая несомненно достойной целью переплюнуть всех
игроков по очкам. У меня был план, как вытащить ее из этой трясины –
взять с нее обещание, что она бросит страдать ерундой сразу же, как
окажется на первой строчке таблицы рекордов. Ради своей благородной
цели мне потребовалось пострадать ерундой около получаса, о чем и
пишу.
Подобная игрушка не может быть защищена абсолютно
надежно, решение, сколько очков давать игроку, производится на его
компьютере, и всегда можно создать программу, имитирующую идеально
происходящую игру. А в нашем случае все оказалось намного проще –
состояние игры (очки) отсылалось на сервер лишь однажды, в конце.
Осталось лишь имитировать игру, завершившуюся с приятным глазу
результатом…
Первым делом я попытался имитировать отсылку
результатов игрушки, написав свою форму. Сервер ее вежливо
проигнорировал. Очевидно, проверяется, с какой страницы была
отослана форма с результатами, и левые данные обламывает. Молодцы,
ребята. Это я про программистов – они действительно сделали все
возможное, чтобы защититься от нехороших личностей вроде меня.
Переходим на более низкий уровень…
На униховом роутере,
который у меня звонит в интернет, занимается почтой и прочими
интересными вещами, запускаю tcpdump host fomenko.ru –I ppp0 –s
10000 –w file. Не вдаваясь в подробности: эта команда перехватывает
всю информацию, которая через модем идет на fomenko.ru, и пишет ее в
файл. Дальше сажусь играть, и срочно заваливаю все три жизни,
случайно набрав 60 очков.
Ищу в файле строчку POST. Так надо.
Вот что нахожу. POST /cgi-bin/gamesst.cgi HTTP/1.1 Accept:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-excel, application/msword, */* Referer:
http://fomenko.ru/games/plane/plane.htm? Accept-Language:
ru Content-Type:
application/x-www-form-urlencoded Accept-Encoding: gzip,
deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows
NT 5.0) Host: fomenko.ru Content-Length: 35 Connection:
Keep-Alive
f=check&f2=867733&game=9&score=60
Все
ясно, скрипт просят проверить, попал ли человек с 60-ю очками на
призовое место. Тырю файл с Unix-сервера на виндовз (у меня там иксы
не стоят). Копирую текст в блокнот. Заменяю количество очков на
150000, правлю Content-Length на нужное число (длина строки+1),
запускаю telnet fomenko.ru 80, и отсылаю этот текст. В ответ сервер
отсылает мне html-форму, имеющую поля ввода name, email, которые
вводятся пользователем, и скрытые поля game=7, f=add, f2=случайный
номер, score=число очков. Опять правлю информацию в блокноте, опять
telnet. Ура, у меня – первое место! Аналогично вписываю туда
жену.
Проверяю, обрабатываются ли теги. Не обрабатываются.
Вписываю в таблицу очков имя Nerf Group и ссылку на нее. Заполняю
всю таблицу этим мусором. Даже стыдно как-то стало. Бедные чуваки и
девчонки играли себе часами, выбивая эти рекорды, а я их всех туды.
Люди, никогда так не делайте! :)
См… http://fomenko.ru/cgi-bin/gamesst.cgi?game=9
Автор: Ilya
Teterin
|