Я прочитал много q/a о SO о риске фиксации/захвата сессии, и многие люди предлагают изменить директивы php.ini
как session.use_only_cookies
на ON
и другие директивы php.ini, чтобы сделать сервер более безопасным ...Простая атака фиксации сеанса на локальном хосте для целей тестирования
Я хотел увидеть своими глазами, если бы я мог повторить простой сценарий атаки на моем сервере localhost на основе PHP5 + Apache.
На моем localhost session.use_only_cookies
есть OFF
, поэтому согласно q/a выше мой локальный хост в основном незащищен, и это то, что мне нужно для проведения теста.
я первые прочитал эту простую статью о том, как проведенная сеансе фиксация атака:
Для того, чтобы повторить сценарий, описанный в статье, я создал два очень простые PHP скриптов (код ниже), но атака не работает, это то, что я сделал:
(Прикидываясь Mallory) Я говорю Алиса: «привет навестить http://localhost/login.php?PHPSESSID=mysessionid»
Тогда (делая вид, что Алиса) я пошел в http://localhost/login.php?PHPSESSID=mysessionid
Как администратор моего LOCALHOST сервера я видел сеанс создается на диске сервера (это навощенный в виде файла с именем
sess_ mysessionid
), поэтому я подумал: круто, он работает !!!Тогда (делая вид, что Алиса) Я вошел в выходе «Джо» в качестве верительных
журналы Алиса в и она перенаправляется
insession_ok.php
, и в этот момент (в соответствии со статьей википедии выше) Мэллори должна быть в состоянии видетьinsession_ok.php
слишком, потому что он фиксировал сеанс доmysessionid
, , но это не так, потому что когда Alice регистрируется в новом сеансе, создается на сервереsess_vdshg238cnfb4vt7ahpnp1p522
, поэтому я не понимаю на этом этапе, как Мэллори должен фиксировать/захватить сеанс, как объясняется в статье ???
login.php
<?php
session_start();
//if user credentials are ok, let's put him in session
if(@$_POST['usr'] === 'joe')
$_SESSION['in_session'] = TRUE;
//if user is already logged in, let's redirect him to the account page "insession_ok.php"
if(isset($_SESSION['in_session']))
{
$webpage = 'http://' . $_SERVER['HTTP_HOST'] . '/insession_ok.php';
header("Location: " . $webpage, TRUE, 302);
}
?>
<form method="POST" action="login.php">
<input name="usr" type="text">
<input type="submit" value="Submit">
</form>
<script type="text/javascript">
alert(document.cookie); //to view cookies
</script>
insession_ok.php
<?php
session_start();
if(@$_SESSION['in_session'] === TRUE)
echo "in session ok";
else //user is not in session cause he did not login, let's redirect him to login page
{
$webpage = 'http://' . $_SERVER['HTTP_HOST'] . '/login.php';
header("Location: " . $webpage, TRUE, 302);
}
?>
Любой подсказка/идея всегда оценена!