информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Google заблокировала 2 с лишним... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / hacking
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
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.


1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach