Leí muchos q/a en SO sobre el riesgo de la sesión de fijación/secuestro y muchas personas sugieren cambiar las directivas php.ini
como session.use_only_cookies
a ON
y otras directivas php.ini para hacer el servidor más seguro ...Ataque de fijación de sesión simple en localhost con fines de prueba
quería ver con mis ojos si pudiera replicar caso de un ataque sencillo en mi servidor localhost basado en PHP5 + Apache.
En mi localhost session.use_only_cookies
es OFF
por lo que según el q/a anterior mi localhost está básicamente desprotegido, que es lo que necesito hacer la prueba.
que primero lea este artículo sencilla sobre cómo se desempeñasen un ataque de fijación de sesión:
Con el fin de replicar el escenario descrito en el artículo, creé dos scripts PHP muy simples (código está por debajo), pero el ataque no funciona, esto es lo que hice:
(pretendiendo ser Mallory) yo digo Alice: “hola ir visitar http://localhost/login.php?PHPSESSID=mysessionid”
Entonces (pretendiendo ser Alice) fui a http://localhost/login.php?PHPSESSID=mysessionid
Como administrador de mi servidor localhost vi la sesión que se está creando en el disco del servidor (se cerated como un archivo con el nombre
sess_ mysessionid
), así que pensé: genial, está funcionando !!!Entonces (pretendiendo ser Alice) Me he registrado en la introducción de “Joe”, como credencial de
registros de Alicia en el país y se le redirige a
insession_ok.php
, y en este punto (de acuerdo con el artículo de wikipedia arriba) Mallory debe poder verinsession_ok.php
también porque él fijó la sesión amysessionid
, pero esto no es cierto, porque cuando Alice inicia sesión se crea una nueva sesión en el servidorsess_vdshg238cnfb4vt7ahpnp1p522
, así que no entiendo en este punto cómo se supone que se debe fijar Mallory/secuestrar la sesión, como se explica en el artículo ???
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);
}
?>
Cualquier pista/idea siempre se aprecia!