Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Bugs y Exploits => Hacking => Nivel Web => Mensaje iniciado por: 0x0309 en 18 Octubre 2009, 04:42 AM

Título: Evitar cookie nula en php
Publicado por: 0x0309 en 18 Octubre 2009, 04:42 AM
Hola, me gustaría preguntar de qué manera se puede evitar una cookie nula.

Por ejemplo, en un sitio existía un mecanismo de autenticación algo así (los nombres los he cambiado):

/adm/control.php

<?php
session_start
();
if (
$_SESSION['auth'] != 'YES') {
    
header('Location: index.php');
}
echo 
'Panel de admin';
?>



/adm/index.php

<?php
echo 'No logeado';
?>



y al acceder a /adm/control.php se va a index.php porque no está registrada la variable de sesión.
Pero si modifico el contenido de la Cookie con tamper data así:


PHPSESSID=


Se produce lo siguiente:


Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in C:\sitio\adm\control.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\sitio\adm\control.php:3) in C:\sitio\adm\control.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\sitio\adm\control.php:3) in C:\sitio\adm\control.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at C:\sitio\adm\control.php:3) in C:\sitio\adm\control.php on line 5
Panel de admin


Entonces, mi pregunta es cómo evitar que session_start() se caiga ante un ataque así.

Título: Re: Evitar cookie nula en php
Publicado por: WHK en 18 Octubre 2009, 19:02 PM
Ese es un bug de PHP, puedes actualizar php y no te debería suceder eso, es path disclosure.

Por otra parte:
Código (php) [Seleccionar]
<?php
session_start
();
if (
$_SESSION['auth'] != 'YES') {
    
header('Location: index.php');
}
echo 
'Panel de admin';
?>


está mal hecho porque enviará el header de redirección pero de todas formas dirá panel de admin ya que el script nunca terminó, o sea.... el servidor envía el header "location: index.php" y el explorador lo interpretará y se redireccionará pero en realidad también mostrará el contenido del panel de administración y cualquiera podría ingresar omitiendo ese header o haciendo la petición desde la consola de comandos.
Lo que debes hacer es ponerle un exit para que el script no siga:

Código (php) [Seleccionar]
<?php
session_start
();
if (
$_SESSION['auth'] != 'YES') {
 
header('Location: index.php');
 exit;
}
echo 
'Panel de admin';
?>
Título: Re: Evitar cookie nula en php
Publicado por: 0x0309 en 18 Octubre 2009, 22:05 PM
ah, gracias por la info.

hice una funcion para iniciar sesión, aunque creo que es más práctico lo que dices de agregar el exit, y también un error_reporting(0).

Código (php) [Seleccionar]

function iniciar_sesion()
{
    if (!is_string($_COOKIE[session_name()])
          || preg_match(
              '/^[a-zA-Z0-9\,\-]{32}$/'
              , $_COOKIE[session_name()]
             ) != 1 ) {
        unset($_COOKIE[session_name()]);
    }
    session_start();
}