Esiste la possibilità di ignorare il controllore xss di Chrome in questo caso?

6

Sono appena scaduto con xss nel mio server. Ho scritto un codice come questo:

<?php
    if (isset($_POST['data'])) { 
        echo "<a href='".htmlentities($_POST['data'])."'>Click Here</a><br/>";
    }
?>

Ecco un piccolo messaggio: come post dati possiamo inviare qualcosa di simile

   test' onerror=alert(1)

Dopo l'invio abbiamo ottenuto una riga come questa:

La domanda è: C'è qualche modo per aggirare il filtro Chrome xss in questo caso?

    
posta Jhon Home 13.02.2017 - 20:09
fonte

1 risposta

7

Qui puoi semplicemente utilizzare il payload javascript:alert(1) , poiché l'auditor non identifica gli URL javascript all'interno di un attributo href come XSS. Facendo clic sul link verrà eseguito il codice.

Tuttavia, sarà molto più difficile eseguire JS iniettando un ulteriore attributo del gestore di eventi nel modo in cui lo hai provato, poiché il codice di esempio riflette direttamente l'input senza elaborazione aggiuntiva. Questo è esattamente uno degli scenari di attacco a cui è destinato l'auditor XSS. Cerca di identificare le parti riflesse per impedirne l'esecuzione. Come ha osservato @NickMckenna, non esiste un modo generale per bypassare l'auditor in questo scenario.

Ciò che potresti fare è iniettare altri attributi che hanno effetti collaterali. Ad esempio, puoi ancora utilizzare l'attributo style e applicare CSS arbitrario (ad esempio ' style='background:red; ). In combinazione con altre tecnologie come AngularJS, l'iniezione di attributi diversi può ancora portare a XSS.

Tieni presente che l'auditor XSS è fragile. Poiché non ha alcuna comprensione di come il codice viene elaborato sul lato server, una semplice sostituzione in un programma più complesso potrebbe essere sufficiente per confonderla, ad esempio:

<?php
    if (isset($_POST['data'])) { 
        // Filter bad words
        $data = str_replace('BADWORD', '', $_POST['data']);
        echo "<a href='".htmlentities($data)."'>Click Here</a><br/>";
    }
?>

In questo caso, una sequenza come ' onBADWORDmouseover='alert(1) ignorerebbe l'auditor.

(Nota anche che l'attributo onerror che hai provato a iniettare non è valido per i tag <a> .)

    
risposta data 13.02.2017 - 21:37
fonte

Leggi altre domande sui tag