Старый 24.10.2011, 09:39   #1
Demon1X
 
Аватар для Demon1X
 
Регистрация: 10.07.2010
Сообщений: 56
Репутация: 5
По умолчанию Веб-кабинет

Доброго времени суток.

Товарищ решил в качестве дипломной работы написать биллинг на делфи. В веб-программирование он шарит на уровне <h1>Hello world!</h1>, по этому попросил меня написать ему веб-кабинет к его биллингу. Я кабинетов до этого не писал, по этому задача показалась интересной.

Сомневаюсь, что он найдет своему биллингу практическое применение. Но для себя хотелось бы знать, есть ли в нем уязвимости.


Скачать файл cabinet.zip

Файлы кабинета, с дампом БД MySQL. В БД три пользователя: 2 активированных (root и oldroot у обоих пароли 123456) и один не активированный, ключ для активации 777778888899999


UPD

Скачать файл cabinet-1.1.zip
Прикрутил защиту от XSRF и добавил проверку текущего пароля при смене пароля, плюс мелкие изменения по функционалу.

UPD
Скачать файл cabinet-1.3.zip
Пожалуй финальная версия. Добавлен функционал, некоторые моменты оптимизированы, плюс обработка всего вывода.

Последний раз редактировалось Demon1X; 01.11.2011 в 09:48.. Причина: UPD
Demon1X вне форума   Ответить с цитированием
Старый 29.10.2011, 18:33   #2
AKYLA
 
Регистрация: 04.10.2011
Сообщений: 2
Репутация: 0
По умолчанию

Никаких уязвимостей нет, кроме как
1) не меняется идентификатор сессии, т.е. если иметь идентификатор, то потом можно водить не имея логина и пароля

2) index.php?email[]=1
Раскрытие путей

Нет защиты от брута входа в систему
AKYLA вне форума   Ответить с цитированием
Старый 29.10.2011, 19:26   #3
ont
 
Аватар для ont
 
Регистрация: 16.12.2010
Сообщений: 57
Репутация: 92
По умолчанию

Цитата:
Сообщение от AKYLA Посмотреть сообщение
Никаких уязвимостей нет, кроме как...
Врете, самую веселую пропустили -- CSRF (Cross Site Request Forgery).
Когда пользователю подсунут страничку с таким тегом:
PHP код:
<img src="http://cabinet_site.com/index.php?pass1=newpassword&pass2=newpassword&updpass=yes_change_me" /> 
... у него сменится пароль.

Нужно либо старый пароль спрашивать, либо делать секретное рандомное поле.

Через CSRF там еще много чем можно управлять. Ну и XSS наблюдаются:
PHP код:
    echo "Логин: ".$login."<br>"
Нужно использовать htmlspecialchars.
ont вне форума   Ответить с цитированием
Старый 30.10.2011, 14:17   #4
M_script
 
Регистрация: 06.07.2010
Сообщений: 113
Репутация: 33
По умолчанию

Цитата:
Сообщение от ont
Нужно либо старый пароль спрашивать, либо делать секретное рандомное поле.
При смене пароля на новый должна быть обязательная проверка предыдущего. Не только для защиты от CSRF.
M_script вне форума   Ответить с цитированием
Старый 30.10.2011, 15:24   #5
M@ZAX@KEP
 
Аватар для M@ZAX@KEP
 
Регистрация: 24.07.2010
Сообщений: 139
Репутация: 5
По умолчанию

Вопрос от юного двигописателя...
Цитата:
не меняется идентификатор сессии, т.е. если иметь идентификатор, то потом можно водить не имея логина и пароля
Является ли привязка по ip достаточной мерой для защиты сессии? Есть ли смысл делать таймаут для сессии? (если да, то что принципиального это изменит?)
M@ZAX@KEP вне форума   Ответить с цитированием
Старый 01.11.2011, 09:47   #6
Demon1X
 
Аватар для Demon1X
 
Регистрация: 10.07.2010
Сообщений: 56
Репутация: 5
По умолчанию

Цитата:
Врете, самую веселую пропустили -- CSRF (Cross Site Request Forgery).
О XSRF уязвимостях плохо знал, по этому пропустил. Пришлось на днях подтянуть знания по этому типу уязвимостей, написал даже мини-эксплойт для кабинетика )))

Проверку старого пароля хотел изначально приделать, но решил пойти по пути большего юзерфрендли, как вижу ошибался не стоило этого делать.


Цитата:
Через CSRF там еще много чем можно управлять. Ну и XSS наблюдаются:
Код:
    echo "Логин: ".$login."<br>";
Логин выводится только собственно юзеру авторизованному, и не кому больше, по этому считаю дополнительную обработку через htmlspecialchars() излишней.


Цитата:
2) index.php?email[]=1
Раскрытие путей

Нет защиты от брута входа в систему
У меня так и не получилось получить раскрытие путей, к тому же раскрытие, если я правильно понимаю, устраняется отключением вывода ошибок в браузер пользователю, как собственно и будет настроен php в случае реальной работы кабинета, а не отладки.

В качестве защиты от брута — возможность установить в конфиге вход в кабинет только с IP юзера. Плюс установить длину пароля приемлемую там же.


Цитата:
Не меняется идентификатор сессии, т.е. если иметь идентификатор, то потом можно водить не имея логина и пароля.
Не совсем понял. Сессия на то и сессия, чтоб пользователь не вводил каждый раз свой логин и пароль для каждого действия. Уничтожается по закрытию браузера, или по нажатию «Выход» из кабинета. Как дополнительную защиту можно будет установить продолжительность жизни сессии в 5 минут.
Demon1X вне форума   Ответить с цитированием
Старый 01.11.2011, 12:17   #7
M@ZAX@KEP
 
Аватар для M@ZAX@KEP
 
Регистрация: 24.07.2010
Сообщений: 139
Репутация: 5
По умолчанию

Цитата:
У меня так и не получилось получить раскрытие путей, к тому же раскрытие, если я правильно понимаю, устраняется отключением вывода ошибок в браузер пользователю, как собственно и будет настроен php в случае реальной работы кабинета, а не отладки.
На что нужно рассчитывать в последнюю очередь, так это на конфигурацию серверов. Грамотный код должен быть неуязвим при любом раскладе конфигов.
M@ZAX@KEP вне форума   Ответить с цитированием
Старый 01.11.2011, 12:28   #8
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Цитата:
Сообщение от Demon1X Посмотреть сообщение
Логин выводится только собственно юзеру авторизованному, и не кому больше, по этому считаю дополнительную обработку через htmlspecialchars() излишней.
Бедный пользователь с ником <!-- , как же тяжко ему будет пользоваться этим кабинетом
BlackFan вне форума   Ответить с цитированием
Старый 01.11.2011, 13:38   #9
tipsy
 
Аватар для tipsy
 
Регистрация: 10.07.2010
Сообщений: 415
Репутация: 311
По умолчанию

Цитата:
Сообщение от BlackFan Посмотреть сообщение
Бедный пользователь с ником <!-- , как же тяжко ему будет пользоваться этим кабинетом
Даже больше.
1) Делаем пользователя с именем <script src=…>, в js делаем фэйк страницу авторизации.
2 Деавторизуем админа и делаем ему session fixation на нашего xss-пользователя.
3) Админ заходит в веб-кабинет
4) …
5) Profit!
tipsy вне форума   Ответить с цитированием
Старый 01.11.2011, 21:12   #10
M_script
 
Регистрация: 06.07.2010
Сообщений: 113
Репутация: 33
По умолчанию

Цитата:
Сообщение от tipsy
2 Деавторизуем админа и делаем ему session fixation на нашего xss-пользователя.
Demon1X: "Логин выводится только собственно юзеру авторизованному, и не кому больше"

Как мы деавторизуем админа, если он не сможет увидеть страницу юзера?
M_script вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot