Come bypassare il nome utente e la password PHP in questa sfida CTF?

2

Mi sto preparando per questa sfida CTF a cui parteciperò la prossima settimana e ho trovato questo problema online che non riesco a risolvere.

Ho solo il controllo delle variabili $user e $pass che ottiene la funzione challenge che posso inviare come parte della richiesta POST. Devo rendere la funzione challenge restituita true.

Ho provato a inviare un array vuoto come password (cambiando il nome dei campi della password in pass[] ) ma la funzione regex non me lo consente.

<?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);
}

?>
    
posta Name 12.06.2016 - 13:17
fonte

1 risposta

3

Poiché lo script non controlla che l'utente esista utilizzando un nome utente non esistente con una password vuota ha esito positivo nel mio test:

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

 PHP Notice:  Undefined index: Foobar in ... 
 MATCH
    
risposta data 12.06.2016 - 13:58
fonte

Leggi altre domande sui tag