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>
.)