Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
MZMA Chat ver. 2.0 Vulnarables 14.11.03 01:34
Автор: Ilich Статус: Незарегистрированный пользователь
|
Загрузка начинается с файла enter.html, в котором следует ввести имя пользователя, в качестве которого вы собираетесь войти в чат.Эти данные качестве параметра передается переменная $U скрипта index.php, в которой содержится имя пользователя, под которым кто-то собирается войти в чат. Глобальной переменной $USERNAME присваивается значение $U, которое таже сохраняется в кукисах для дальнейшего использования. если не получается зарегистрироваться, то запускается скрипт login.php, в котором следует повторить регистрацию, а если все нормул, то запускается username.php, в котором проверяется, есть ли пользователь с таким ником, как содержится в переменной $USERNAME, в чате. Если есть, то облом, однако, получается, нас просят перерегистрироваться(login.php), а если нет, то впускают в чат. Проверка производится по времени последней сказанной фразы в чате, т.е если кто-то с таким же ником, как и у тебя сказал в последнюю минуту какую-нить фразу, то тебя с таким ником в чат не пустят. Если этот чел нифига не скажт в течение двух минут, то можешь спокойно логинитья в чат.
После прохождения регистрации загружается несколько фреймов: фрейм, шде отображаются фразы(messages.php), фрем, в котором надо вводить слова (input.php), а также фреймы со списчком пользователей, которые щас в чате(users.php), и ссылками на сайты автора сего творения. Когда собираешься уходить из чата, следует выпонить скрипт exit.php/
Ну вот, вроде с принципом действия чата разобрались. Теперь перейдем, как говортся, ближе к телу, т.е. багу.
в данном чате не обошлось без XSS (по моему, это в данный момент самый распространенныйбаг в Web-приложениях. ну не могут разработчики нормально филььтровать даные, что уж тут поделаешь, а хотя может и не хотят ...) Короче, если в качестве переменной, содержащей имя пользователя, передать какой-нить хтмловский код, то он будет выполнен, так как входные данные в скрипте index.php не фильтруются, а переменная $USERNAME используется в качестве глобальной переменной. Код будет выполнен при запуске скрипта users.php (нет фильтрации имени пользователя) Так же в скрипте users.php инфа по пользователю (читай HTML или JavaScript код) записывается в базу данных, поэтому, при запуске messages.php, он таке бдет выполнен. Единственной, что плохо при использовании XSS-нападения - это то, что код, который выполнится на тачках других пользователей чата запустится и в твоем броузере. Единственный скрипт, в котором не работае XSS - input.php. В нем фильтруются все данные, переданные этому скриту методом пост. Кстати получается стандартная для html-чатов ситуация: данные, которые водит юзер, при отсылке нового сообщения, фильтруются, а остальные данные просто пропускаются без разбора.
Кстати, абсолютно безграмотно организовано ограничение длинны ника юзера. Просто посмотри на следующий код формы:
<input type="text" maxlength=20 name="U">
А теперь подумай, что будет, если вместо 20 поставить 1000000 и вдолбать эти данные в форму (например, с помощью скрипта). А можно вообще послать 1000000-символьный ник скрипту index.php напрямую.
Следующая атака, которая может быть проведена на данный чат - SQL Injection Attack. Если по-русски, то выполнение любых, ну, или почти любых комманд в базе данных, при помощи которой функционирует чат. Снова все это происходит из=за того, что данные, передаваемые скриптам, не фильтруются должным образим. Ниже я приведу инструкции SQL-запросов и имена скриптов, в которых они содержутся. Дальше, я думаю, ты сам решишь, сто с ними делать. Кстати, запросы, в которых не используются переенные, передаваемые скрипту из внешнего мира, я не привожу.
users.php:
----------
$sql="select id from chat_user where name='$USERNAME'";
$sql="insert into chat_user (id,name,time) values(null,'$USERNAME',".time().")";
$sql="insert into chat_message (id,body,time) values(null,'рПМШЪПЧБФЕМШ <A HREF=\"messages.php\"onClick=\"userClick(''$USERNAME'');\">$USERNAME</a>ЧПЫЈМ Ч ЮБФ...',".time().")";
$sql="update chat_user set time = ".time()." where name='$USERNAME'";
$sql="select name from chat_user where name != '$USERNAME'";
username.php:
-------------
$sql="select time from chat_user where name='$USERNAME'";
input.php (фильтруется XSS):
------------------------------
$sql="insert into chat_message (id,name,body,time) values(null,'$USERNAME','$m',".time().")";
exit.php:
------------
$sql="delete from chat_user where name='$USERNAME'"; - А это вообще улетный скрипт. Короче, как ты нверно уже понял, если передать в качестве переменной $USERNAME имя какого-нить лвого пользователя, то можно его выкинуть из чата !!! Ну как, не терпится попробовать себя в качестве шерифа, слдящего за порядком в чате ;-))) А можно вообще устроить резню в чате ;-)))
Да, еще в этом web-приложении нет защиты от флуда (по-моему, нормальную защиту от флуда реализовать вообще фактически невозможно), поэтому можно флудить чат различного рода дурью, используя обычный лементарный скрипт, который передает данные input.php при помощи метода post.
|
|
|