Stats

  • Total des pages vues: 15659
  • Pages vues aujourd'hui: 155
  • Visiteurs connectés: 2
  • Nombre de visiteurs: 9834

Javascript: Evaluer du code sans eval()

Written by aaSSfxxx - 17 july 2011

Des connaissances du langage Javascript peuvent être nécessaires pour la compréhension de cet article

Traditionnellement, on utilise la fonction eval() pour évaluer un morceau de code javascript. Or cette fonction est bien souvent bloquée par la plupart des filtres anti-XSS rudimentaires. Il existe cependant beaucoup de techniques permettant de passer au travers de ces filtres, et de parvenir malgré tout à exécuter le code de notre choix.
Nous allons donc survoler ici quelques méthodes permettant de contourner les filtres anti-XSS.

Créons une fonction!

En javascript, tout est objet mais aussi fonction. Ainsi, une fonction javascript est considérée comme un objet, et un objet est aussi considéré comme une fonction (compliqué tout ça, hein?). Tout cela pour dire que une fonction javascript est représentée par un objet "Function", dont le constructeur admet un argument: le code à exécuter. Le code Function("alert('Bonjour tous!')") va donc créer une fonction anonyme qui affichera "Bonjour tous!" une fois appelée. Ainsi, en l'appelant juste après sa création, nous pouvons exécuter n'importe quel code de notre choix.
Mais l'inconvénient de cette méthode est que notre code ressemble à du javascript, et il se peut que le code soit filtré. Nous allons donc voir comment contourner tout cela.

Obfusquons notre code!

Nous allons tout d'abord prendre le cas où le mot clé "function" est bloqué (sans souci de casse, c'est-à-dire que "Function" sera aussi bloqué). Il nous faut donc retrouver le constructeur perdu. Or, si vous vous souvenez de ce que j'ai dit avant, une fonction est un objet pour javascript. Or les objets possèdent une propriété "constructor" qui renvoie le constructeur qui a servi à les créer. Le constructeur d'une fonction est donc... "Function". On va donc prendre une fonction au hasard (tiens, window.open), et s'en servir pour exécuter notre code: window.open.constructor("alert('Bonjour tous!')")().

Maintenant, compliquons un peu la chose. Supposons que le mot clé "constructor" ainsi que "window.open" soient bloqués (ou que vous vouliez rendre votre code particulièrement illisible). Avant de continuer, il vous faut vous rappeler que la notation objet.propriete équivaut à objet["propriete"]. Ensuite, il faut savoir que un nombre ou une chaîne de caractères sont aussi des objets et possèdent un constructeur. Or, ce constructeur est une fonction, qui possède aussi son constructeur ... Avec tous ces renseignements, vous devriez être en mesure de contourner le blocage simple de mots clés (indice: "constructor" == "con"+"str"+"uctor"). A vous de jouer!

Conclusion

Avec tout ceci, nous avons pu voir que le filtrage de mots-clés est totalement inutile, puisqu'un peu de créativité de la part du hacker permet de faire disparaître totalement toute trace des mots clés bloqués. Ainsi, il est fortement recommandé d'interdire aux utilisateurs d'entrer du code HTML, et de passer par des langages comme BBCode pour le formatage (attention cependant à ne pas le parser n'importe comment!).
Enfin, certaines personnes pensent qu'en mettant une interface WYSIWYG à la place du HTML sur leur site pour les utilisateurs est une protection efficace. Ceci est totalement faux: un simple script ou l'utilisation de Firebug permet de contourner aisément la protection. Prenez donc garde à ce que les utilisateurs peuvent entrer sur votre site !

Classified in : Hacking & Programming - Tags : javascript, XSS, function, obfusquer, blocage, WYSIWYG

sunday 31 july 2011 @ 12:51 G.Alex-713 said : #1

Avatar Gravataret si les balises <script> sont bloquée ? on fait comment ?

PS: super billet mais comment faire pour que <script type="text/javascript">window["op" + "en"]["con" + "str" + "uctor("al" + "ert('Bonjour tous!')")()</script> fonctionne ?

wednesday 03 august 2011 @ 11:13 aaSSfxxx said : #2

Avatar Gravatar@G.Alex-713 :
Ça dépend de comment c'est bloqué en fait... Si le mot "script" est supprimé, alors on peut faire , et une fois supprimé, ça donnera <script>.

Sinon, tu peux jouer avec les évènements HTML (onclick, onload ...). Bref, avoir de la créativité" ;)

wednesday 03 august 2011 @ 12:12 G.Alex-713 said : #3

Avatar Gravataraprès il y a pire: je sais plus quelle fonction PHP (htmlspecialchars()) permet de remlacer les chevrons par un caractère bizarre qui est lu par les nav internet comme les chevrons mais qui compte pas dans le HTML

wednesday 03 august 2011 @ 13:13 aaSSfxxx said : #4

Avatar Gravatar@G.Alex-713 :

C'est vrai que bypasser htmlspecialchars relève du miracle (c'est la protection en béton armé :p). Cependant, une implémentation foireuse du BBCode permet d'injecter du javascript. Le tout étant d'éviter les caractères qui sont convertis par htmlspecialchars (notamment au niveau de la balise [url].

Mais malheureusement, il existe (encore) pas mal de sites ne sachant pas se protéger des XSS.

thursday 04 august 2011 @ 15:52 G.Alex-713 said : #5

Avatar Gravatareh ben pour ces sites c simple: on bourre toutes leurs pages d'une boucle infinie qui ouvre des fenetre avec alert(obligeant l'utilisateur a fermer le naviguateur avec le gestionnaire de taches Windows (ou autre selon l'OS) ou a bidouiller un naviguateur internet qui elimine les boucles javascript) en disant que leur site est pas proteger contre les failles XSS et coment utiliser htmlspecialchars

Cette methode est assez radicale mais est utile si parler au webmaster du site reviens a parler a un mur :p

thursday 04 august 2011 @ 16:08 aaSSfxxx said : #6

Avatar Gravatar@G.Alex-713 :

Mouais. Mais c'est plus pour l'intérêt de l'astuce en elle-même que j'ai publié cet article, et non dans l'objectif de "pwn3d" des sites avec cette astuce.
C'est d'ailleurs un challenge sur root-me.org qui m'a permis de découvrir cette astuce.

Sinon, si un webmaster ne veut rien entendre, bah tant pis pour lui, et de toute façon, exploiter une faille sans l'autorisation de la personne concernée est illégal (et le "h4x0r tr0p rebelz de la société" n'est qu'une légende urbaine).

sunday 14 august 2011 @ 12:19 G.Alex-713 said : #7

Avatar Gravatarsinon pour les alert infini j'etais un peu ironique je veux pas servir a etre seulement chiant moi je les laisse patauger jusqu'a ce qu'il deviennent assez malin pour comprendre tt seul (ou pas) parce que sinon ils meritent pas qu'on les aide

PS: une autre technique de contournement des Anti-failles XSS est de mettre du code dans le script de la creation d'une image avec php puis de poster cette image quelquepart (via son url)

PPS: root-me.org ? ça a l'air bien ça !
moi qui adore les trucs compliqués ! vivement la fin des vacances !

friday 16 september 2011 @ 08:52 [spammeur] said : #8

Avatar GravatarBonjour,

Merci pour votre article, j’apprécie votre style. Auriez-vous des forums ou blogs à me recommander ? Bonne journée.

Comments are closed.