Wordpress 4.0 CSRF Reimposta password

4

Sto lavorando a un progetto di facoltà. Devo replicare la vulnerabilità di Wordpress CSRF sul mio wordpress localhost. Sto cercando di farlo: link   Non sono riuscito a trovare alcun tutorial utile. Sto pensando di usare un modulo Metasploit su Kali Linux. Qualcuno può guidarmi?

    
posta Danelo 28.05.2017 - 23:13
fonte

1 risposta

4

Un utente Wordpress può accedere a questo URL e richiedere un link per reimpostare la password via email:

https://yourwordpress.example/wp-login.php?action=lostpassword

Il link di ripristino sarà simile a questo:

https://yourwordpress.example/wp-login.php?action=rp&key=dDnnToiqjYtsa9KdfVZl&login=admin

Il parametro key nell'URL assicura che solo il ricevitore dell'email sia in grado di reimpostare la password. Dopo aver visitato il link di ripristino, ti verrà presentato un modulo per inserire la nuova password.

Prima di Wordpress 4.0.1, questo modulo non forniva un token anti-CSRF. Invece, il parametro key GET viene salvato in un cookie e dopo aver inviato la nuova password viene verificato il valore del cookie. Ciò significa che un utente è vulnerabile nel tempo che intercorre tra il clic sul collegamento per la reimpostazione della password e l'inserimento della nuova password. In quel lasso di tempo, e solo allora , un utente malintenzionato potrebbe potenzialmente lanciare un attacco CSRF per modificare la password su un valore arbitrario. (Ma a causa di questa piccola finestra di opportunità il bug ha un valore limitato in un attacco reale.)

Quindi, per riprodurre la vulnerabilità, puoi fare ciò:

  • Richiedi un link per reimpostare la password. (ad es. per l'utente admin )
  • Visita il link di ripristino (ma non inserisci una nuova password).
  • Simula un attacco CSRF inviando questo modulo da un dominio controllato da un utente malintenzionato con una password arbitraria:
    <form action="https://yourwordpress.example/wp-login.php?action=resetpass" method="post">
        <input type="hidden" name="user_login" value="admin">
        <input type="password" name="pass1">
        <input type="password" name="pass2">
        <input type="submit" name="wp-submit" value="Reset Password">
    </form>
    

Il problema era corretto aggiungendo il token di ripristino al modulo (oltre al cookie):

<input type="hidden" name="rp_key" value="<?php echo esc_attr( $rp_key ); ?>" /> 

E il tentativo di ripristino è invalidato quando rp_key non corrisponde:

if ( isset( $_POST['pass1'] ) && ! hash_equals( $rp_key, $_POST['rp_key'] ) ) { 
    $user = false; 
} 
    
risposta data 29.05.2017 - 02:55
fonte

Leggi altre domande sui tag