Come bypassare le stringhe PHP == confronto per la stringa sha256?

0

Conosco già le vulnerabilità di confronto con le stringhe di PHP ==

  1. link
  2. link
  3. link

Ma non riesco a trovare il modo di aggirare il confronto == per sha256 stringa. Di seguito è riportato il codice di esempio:

$username = $mysqli->real_escape_string($_POST['username']);
$password = $mysqli->real_escape_string(hash("sha256", $_POST['password']));

$UserDB = $mysqli->query("SELECT * FROM Database")->fetch_assoc()['value'];
$PwDB = $mysqli->query("SELECT * FROM Database")->fetch_assoc()['value'];

if($UserDB == $username){
    if($PwDB == $password){
        $_SESSION['admin'] = "Admin_".$username."_Password_".$password;
        header("Location: admin.php");
        exit;
    } else {
        $content .= alert("danger", "Password is wrong.");
    }
} else {
    $content .= alert("danger", "Username is wrong.");
}

Hai qualche idea per bypassare sha256 password?

    
posta Nam Vu 11.10.2017 - 20:41
fonte

1 risposta

4

Questo è impossibile da sfruttare.

Il problema è che non si ha il controllo sul valore effettivo da confrontare: prima viene passato attraverso una funzione hash e quindi gli hash vengono confrontati. Se avessi il controllo diretto su uno dei parametri nel confronto, potresti farlo se:

  1. In qualche modo sei riuscito a forzare il tipo di argomento a essere booleano true (solitamente impossibile in un contesto Web, ma forse per qualcosa che risponde a una richiesta JSON?)
  2. L'hash della password effettiva è iniziato con 0e (che ha una probabilità del 3% per un hash sha-256) e in qualche modo sei riuscito a passare in int (0).

Tuttavia, poiché qualsiasi input che si inoltra sarà sempre sottoposto a hash e confrontato, non è possibile che si verifichi alcun caso. Invece, PHP eseguirà sempre un confronto tra stringhe e quel confronto di stringhe restituirà sempre false (a meno che tu non conosca la password o qualcosa che si scontra con la password, ovviamente).

h / t a AndrolGenhald per il suggerimento su true booleano.

h / t a Anders per la correzione sul bisogno di int (0)

    
risposta data 11.10.2017 - 21:20
fonte

Leggi altre domande sui tag