XSS dans une affectation de variable lorsque <> "est échappé

Sep 17 2020

SCÉNARIO:

l'entrée de l'utilisateur est reflétée dans une variable. Par exemple

url.com/?a=hello

se reflète comme indiqué ci-dessous

var test="hello";

J'ai essayé d'échapper à la variable avec une charge utile comme hello";ou hello%22;ou hello%2522;mais sans succès. Tous ces caractères sont reflétés sans encodage: .[]{};:{}\/?|_-+je peux donc les utiliser

Existe-t-il une autre façon d'exploiter cette situation?

Réponses

3 Arminius Sep 17 2020 at 18:46

Non, sans tenir compte du comportement de filtre que vous avez spécifié.

  • Vous avez besoin de guillemets doubles ( ") pour quitter le contexte de chaîne JS.

  • Vous avez besoin de crochets ( <>) pour quitter la <script>balise qui, je suppose, entoure le code.

  • Vous pouvez utiliser une barre oblique inverse ( \) à la fin de la chaîne pour échapper au guillemet de fermeture, mais vous auriez besoin d'un autre point d'injection sur la même ligne pour faire quelque chose d'utile avec cela. Sinon, vous ne pouvez pas fermer la chaîne que vous avez maintenue ouverte, et l'analyseur JS lancera une erreur de syntaxe, ce qui implique qu'il n'exécute aucune partie du script.

    Voici comment une attaque fonctionnerait avec deux points d'injection.

    Code:

    var test="hello"; var test2="stranger";
    

    Vecteurs:

              \                  ;alert()//
    

    Résultat:

    var test="\"; var test2=";alert()//";
             |--------------|        |--|
           one continuous string    comment