¿Cómo omitir la verificación de nombre de usuario y contraseña de PHP en este desafío de CTF?

2

Me estoy preparando para este desafío de CTF. Estaré participando la próxima semana, y me encontré con este problema en línea que no puedo resolver.

Solo tengo el control de las variables $user y $pass que obtiene la función de desafío que puedo enviar como parte de la solicitud POST. Necesito hacer que la función de desafío sea verdadera.

Intenté enviar una matriz vacía como contraseña (cambiando el nombre de los campos de contraseña a pass[] ) pero la función de expresión regular no me deja pasar.

<?php
//by Mawekl
//more challenges coming soon ;)

function validateuser($user)
{
    #Check username
    if(!preg_match('/^[A-Z][a-z]{1,15}$/',$user))
        die('Are you stupid hacker? Don\'t try inject my script!');
}

function validatepass($pass)
{
    #Check password (injection attempt?)
    if(!preg_match('/^[A-Za-z0-9_ ]+$/',$pass))
        header('Location: http://piv.pivpiv.dk/');
        #kick away stupid hacker!
}

function challenge($user, $pass) //Objective: return TRUE
{
    $users = array(
        "Admin" => $_VeryLongPasswords[0],
        "Mawekl" => $_VeryLongPasswords[1]
    );
    validateuser($user);
    validatepass($pass);
    return ($users[$user] == $pass);
}

?>
    
pregunta Name 12.06.2016 - 13:17
fuente

1 respuesta

3

Dado que la secuencia de comandos no comprueba que el usuario exista un nombre de usuario no existente con una contraseña vacía, mi prueba se realizará correctamente:

 echo challenge('Foobar','') ? "MATCH\n":"nomatch\n";

 PHP Notice:  Undefined index: Foobar in ... 
 MATCH
    
respondido por el Steffen Ullrich 12.06.2016 - 13:58
fuente

Lea otras preguntas en las etiquetas