Attention au décodage à la volée en Javascript

J’ai eu l’occasion de voir pour la première fois une technique d’obfuscation il y a peu. Elle visait à bypass les firewalls qui ne vérifient pas les chaînes de caractères encodées.

Description des étapes 

  1. Dans un premier temps  la page web est encodée en format URL (urlencode avec PHP ou encodeURI via JS). Il encode également les unreserved char.
  2. Puis on remplace tout les ‘%’ par des ‘@’ pour éviter tout rapprochement avec un encodage URL
  3. Le payload créé il faut maintenant le décoder pour cela on effectue l’opération inverse c’est-à-dire
  4. Le payload est inséré dans la page web grâce à document.write()
  5. Le tout est encodé en base64 pour le rendre plus compact
  6. Le payload est ensuite partagé via une URL grâce aux data-uri

Ainsi lorsque la victime va requêter l’URL, le code en base64 va directement être interprétér. Ce qui va laisser place à la fonction de désobfuscation du code qui elle, va remplacer les @ par des % puis va décoder le html précédemment encoder en format URL. Cela va donner quelque chose comme ça: