Имеем навароченный чат на примере www.klinnet.ru.


В принципе, статья посвящена некоторым уязвимостям, которые могут скрываться во всяких дополнительных (и кстати совершенно ненужных) фишках веб чатов, таких как комнаты, смена цвета шрифта, пароли и тд. Для примера возьмём чат на сервере www.klinnet.ru. Давай повнимательнее изучим нижний фрейм (input frame). Сразу бросается в глаза огромное кол-во скрытых полей. TYPE="hidden" NAME="Ign" VALUE="" Это функция игнора (очень даже полезная вещь). TYPE="hidden" NAME="N" VALUE="20" А это кол-во строк, которые выводятся на экран. Самое интересное, что эти фишки юзаются командами. Короче, ирк форэвэ. А вообще, чат расчитан на большое кол-во народа, причём _разных_национальностей_ (TYPE="hidden" NAME="L" VALUE="russian"). Моё мнение: чат был написан 100%нтно не любителями-програмистами, а серьёзной забугорной фирмой, скорее всего с коммерческими целями. То есть защита обещает быть крутой. Ладно, знакомство с чатом закончено, давай теперь посмотрим насколько наши забугорные друзья продвинулись в плане безопасности. При входе каждому юзеру присваивается идентификатор (его хешированный пароль; прописан в нижнем фрейме), так что от лица других юзверей, не зная их идента, говорить не получится. Символы < и > преобразуются в < и > соответственно. Так что и теги не вставишь. Ну как? Впечатляет? Где-то года два назад трудно было найти чат с такой защитой. Ну всё, защиту мы рассмотрели. Приступим, пожалуй, непосредственно к главной теме статьи. Продолжаем изучать нижний фрейм. Видишь там такой уродливый набор цветов? Наведи мышь, к примеру, на ярко красный цвет (самый левый) и вглядись в тот url, на который он ссылается: http://www.klinnet.ru/chat/input.php3?From=..%2FphpMyChat.php3&Ver=H&L=russian&U=D4rkGr3y&R=KlinNet&T=1&D=10&N=20&O=0&ST=1&NT=1 Подумай, почему такая длинная ссылка? Да потому, что при нажатии на эту кнопку нижний фрейм как бы _перезапускается_ с новыми параметрами. Проще говоря, обновляются ВСЕ параметры вместо одного. То есть, если в параметре "U" пропишем вместо "D4rkGr3y" имя другого юзера, то мы _не_поменяем_ему_цвет_, а как бы перезайдём без авторизации под его ником. Как следствие сможем базарить от его лица и узнаем его хешированный пароль. В чём проблема? Да в том, что pwd_hash нужно было проверять.. Кстати говоря, этот баг почти сразу заделали и мне пришлось искать новые...Они нашлись =) (последующие два бага на момент написания статьи были не заделаны) Вглядись в правый фрейм. Что ты там видишь? Кнопку "Выход"? Да, я тоже её вижу. Здесь в принципе уязвимость такого же рода. Вот на что ссылается "Выход": http://www.klinnet.ru/phpMyChat.php3?Ver=H&L=russian&U=D4rkGr3y&E=KlinNet&EN=1 И опять pwd_hash не проверяется. Как следствие, подменив ник, можем кикать бедных юзеров. Ну и последний, наиболее крутой баг. Ты наверное уже заметил, что чат поддерживает создание нескольких комнат. Заметил? Так вот меня во всём этом бесило то, что нельзя сидеть одновременно в двух комнатах, то есть или в той, или в этой. Посмотри, что происходит, когда ты переходишь из одной комнаты в другую? Вот как выглядит ссылка на переход в другую комнату: http://www.klinnet.ru/phpMyChat.php3?Ver=H&L=russian&U=D4rkGr3y&R0=KlinNet&T=1&D=10&N=20&E=fuck&EN=1 Полностью перегружаются все три фрейма, плюс к этому не проверяется pwd_hash. Спросишь, что нам это даёт? Да всё! Полный контроль над любым юзером! Подменив его ник, можем говорить от его лица, _слушать_его_приваты_ (так как центральный фрейм тоже обновляется), редактировать все его настройки (в том числе и пароль). Вот так.. Ну и напоследок, в чём же основные проблемы чата? Во-первых, хеш надо проверять ВЕЗДЕ, а во-вторых, не понимаю, зачем при изменении какого-то одного параметра, обновлять все? Если бы все не обновлялись, баги с комнатами и изменением цвета нам вообще ничего серьёзного бы не давали..