Posibles formas de explotar PHP register_globals [cerrado]

0

Tengo un script PHP que ejecuta un montón de comandos para verificar que un usuario está registrado.

if (( isset ($password) && $password!="" && auth($password,$hidden_password)==1) || (is_array($_SESSION) && $_SESSION["logged"]==1 ) ){
    $aff=display("you're logged in);
} else {
    $aff=display("you're not logged in");
}

Si register_globals se establece en 1 en mi php.ini , y quiero inyectar algo en la URL para autenticar cada vez que sea la contraseña, ¿qué puedo hacer?

Ya lo intenté:

  • site.com/page.php?password=pass&logged=1
  • site.com/page.php?password=pass&_SESSION["logged"]=array("1")
  • site.com/page.php?password=pass&hidden_password=pass == > devuelve " no has iniciado sesión " pero es que no quiero sobrescribir la contraseña oculta (¡la necesito!)
  • Intenté jugar también con cookies y otros encabezados http, pero sin resultados

¿Alguna sugerencia?

    
pregunta TheEnglishMe 26.01.2014 - 19:14
fuente

1 respuesta

2

Para corregir esta vulnerabilidad específica, debe llamar a start_session() antes de usar una variable de sesión. De esta manera, PHP iniciará $_SESSION y sobrescribirá los valores inyectados. Para el valor $hidden_password , esto debe inicializarse en algún lugar de la aplicación y, por lo tanto, no se puede controlar.

En general, register_globals debería estar deshabilitado! Causa otros problemas de seguridad y se eliminará del idioma

    
respondido por el rook 27.01.2014 - 01:35
fuente

Lea otras preguntas en las etiquetas