Quindi, ecco un pezzo di codice che ho trovato.
<?php
$name = $_GET['name'];
if (!empty($name)) {
$name = str_replace("<", "<", $name); //line 1
$name = str_replace(">", ">", $name); //line 2
$name = urldecode($name); //line 3
echo $name;
}
?>
Questo codice ho trovato in uno dei framework di pratica di hacking etico denominato bWAPP al livello di sicurezza 1. La soluzione potenziale per aggirare questa tecnica è a URL encode
della stringa XSS due volte.
Supponiamo che la mia stringa XSS sia
<script>alert('XSS');</script> //checkpoint alpha
Quindi codificarlo una volta dovrebbe darmi
%3Cscript%3Ealert%28%27XSS%27%29%3C%2fscript%3E //checkpoint beta
PROBLEMA 1:
Se lo rintraccia, sulla linea 1 e 2 non succede niente. Ma sulla linea 3 viene decodificato. E così, la stringa risultante che ottengo diventa checkpoint alpha
. Quindi, quando lo faccio eco, dovrei ricevere un avviso.
CONTRADICTION 1:
Non succede niente del genere e ho appena visualizzato checkpoint alpha
in chiaro.
PROBLEMA 2: Quando, doppio codice, (che è la soluzione potenziale a questo problema), ottengo,
%253Cscript%253Ealert%2528%2527XSS%2527%2529%253C%252fscript%253E
Ora, questa affermazione passa nuovamente attraverso le linee 1 e 2, e inciampando sulla linea 3, viene decodificata in checkpoint beta
e viene ripresa.
CONTRADICTION 2:
Quando viene echeggiato, dovrei ottenere checkpoint beta
in testo chiaro, ma improvvisamente il browser apre la finestra di avviso con XSS perfettamente funzionante.
Sono nuovo in questo campo e attualmente sto cercando di chiarire i miei concetti di base relativi allo sviluppo web. Per favore perdoni la mia formulazione errata. Grazie.