[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Использование session_start() без обертки
Winston
Недавно товарищ VELIK505 меня просветил, что есть проблемы при использовании session_start без предварительной фильтрации PHPSESSID. Заходим на любой сайт, видим, что есть кука PHPSESSID, редактируем её, вписываем туда набор символов, обновляемся, и... если нету фильтрации и не подавлен вывод ошибок получаем вот такой варнинг

Warning: session_start() [function.session-start]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in .... on line ..

Как минимум это приведет к раскрытию путей на сайте. Как максимум сложно даже представить...

У меня к примеру получилось на локалке получить админские права, подставив админский идентификатор сессии в phpsessid...

Потому вместо обычного session_start лучше использовать обертку, хотя бы такую

Свернутый текст
function my_session_start()
{
if(isset($_COOKIE['PHPSESSID']))
$sessid = $_COOKIE['PHPSESSID'];
elseif(isset($_GET['PHPSESSID']))
$sessid = $_GET['PHPSESSID'];
else
{
session_start();
return false;
}

if (!preg_match('/^[a-z\d]{16,32}$/i', $sessid))
session_id(md5('здесь генерируется случайная строка'));

session_start();
}


Что думаете по этому поводу?



Спустя 3 минуты, 25 секунд (5.10.2012 - 14:11) m4a1fox написал(а):
Winston
Солидно. Реально открытие! Для меня, так же, как и использование exit; без скобок....
Видимо надо так и делать....
У меня только один вопрос.... как я понял ты сумел заломиться к себе в админку... не поделишься подробностями...

Спустя 6 минут, 9 секунд (5.10.2012 - 14:17) Winston написал(а):
Цитата (m4a1fox @ 5.10.2012 - 14:11)
не поделишься подробностями...

В htaccess пишешь путь куда сохранять файлы сессий
php_value session.save_path /path
Заходишь под админом, потом смотришь в папке с каким именем создался файл, копируешь имя и вставляешь в куку phpsessid, и если у тебя информация о том является ли пользователь админом или нет, хранится в сессии, то ты станешь админом. Вот так..

Спустя 3 минуты, 26 секунд (5.10.2012 - 14:21) Winston написал(а):
Узнав об этой трабле, я направился тестировать другие сайты biggrin.gif... и ужаснулся, что практически на любом сайте, где я пробовал получилось вывести на экран этот варнинг... То есть очень не многие сайты используют фильтрацию phpsessid

Спустя 2 минуты, 14 секунд (5.10.2012 - 14:23) m4a1fox написал(а):
Winston
Сейчас протестим.

Спустя 14 минут, 16 секунд (5.10.2012 - 14:37) killer8080 написал(а):
Winston
не вижу тут проблемы, а уж тем более уязвимости.
Цитата (Winston @ 5.10.2012 - 14:08)
Как минимум это приведет к раскрытию путей на сайте. Как максимум сложно даже представить...

Это проблема не правильной обработки ошибок в продакшине, но никак ни сессий!
Как максимум сложно даже представить..
как максимум ровным счетом ничего, никаких привилегий хакер не получит.
Цитата (Winston @ 5.10.2012 - 14:08)
У меня к примеру получилось на локалке получить админские права, подставив админский идентификатор сессии в phpsessid...

И что? Так и должно было быть. Защита сессий ни в том, что идентификатор нельзя подсунуть, а в том, что не реально его угадать.

Спустя 2 минуты, 26 секунд (5.10.2012 - 14:40) Winston написал(а):
Цитата (killer8080 @ 5.10.2012 - 14:37)
как максимум ровным счетом ничего, никаких привилегий хакер не получит.

Хм... Значит не все так плохо как кажется..? smile.gif

Спустя 4 минуты, 55 секунд (5.10.2012 - 14:45) killer8080 написал(а):
Цитата (Winston @ 5.10.2012 - 14:40)
Хм... Значит не все так плохо как кажется..?

Да проблемы в общем то и нет smile.gif

Спустя 1 минута, 43 секунды (5.10.2012 - 14:46) Winston написал(а):
Цитата (killer8080 @ 5.10.2012 - 14:37)
никаких привилегий хакер не получит

Разве что увидит путь к файлу, что даст представление где файлы лежат..

Спустя 4 минуты, 10 секунд (5.10.2012 - 14:51) killer8080 написал(а):
Цитата (Winston @ 5.10.2012 - 14:46)
Разве что увидит путь к файлу, что даст представление где файлы лежат..

Ну это не единственный способ провоцировать ошибки, важно их правильно обрабатывать, и проблем не будет. Для этого случая можно просто вставить @.

Спустя 57 минут, 38 секунд (5.10.2012 - 15:48) dron4ik написал(а):
ну если пропуск в админку не

if($session){'Входи'}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.