Writeups
  • ℹ️Infos
  • 🗓️2021
    • DvCTF (to join DaVinciCode)
      • Crypto
        • Baby RSA
        • Ressaye
        • Unbreakable encryption
      • Forensics
        • Broken Portrait
        • Russian Dolls
        • Sus USB
      • Misc
        • Jus de Flag
        • Welcome
      • OSINT
        • Absolutely Nuts
      • Progra
        • Snoop's Mission
      • Reverse
        • Baby Reverse
        • Basic Cracking
        • Code Pyn
      • Steganography
        • Colorful Code
        • Hurt Your Eyes
        • Orchestra of Flags
        • Tyger
      • Web
        • Have I Been Pwned
        • What's Up ?
  • 🗓️2022
    • DvCTF 2022
      • Crypto
        • Cwryptographic Owacle
        • Secure Or Not Secure
        • small weiner
      • Forensics
        • Very Bad Script
      • Misc
        • Data Leak
        • Going postal
        • The Hacker Man
      • OSINT
        • Elon Musk
        • Monkeey
        • Painting Spot
        • Welcome to the DaVinciCTF!
      • Pentest
        • DaVinci's Playlist : Part 1
        • DaVinci's Playlist : Part 2.5
        • DaVinci's Playlist : Part 2
      • Programming
        • Heaven's Gate
        • Sudoku
        • TicTacToe
      • Reverse
        • CryptoVault
        • Mine Game
        • Obfuscated
        • Peripheral Interface Controller XVI
      • Steganography
        • ICMP
        • The Arts of Details
        • Treasure
      • Warmup
        • EBG13
        • FrenchFlag
        • MP3
        • QmFzZTY0
        • RSA
        • Welcome
      • Web
        • CyberStreak v1.0
        • 🎵
    • picoCTF 2022
      • Challs WU
    • @HackDay - Qualifications
      • Crypto
        • Francis Bacon
        • Francs Maçons
        • Rotate-me!
        • Un message codé ?
      • Forensics
        • bad_timing_for_reversing
      • Hardware
        • Cubik'cipher
        • WebSDR
      • Reverse
        • Calling Conventions
        • Memory Investigation
      • Steganography
        • I can make pictures
        • J'ai perdu le flag :(
        • Pokémons
        • Un coup de maître
        • Un logo cachotier
      • Web
        • GIT!
        • Part. 1 - Uploads
        • Part. 2 - Old md5
        • Part. 3 - sudo python
    • 404CTF
      • Crypto
        • Un simple oracle [1/2]
        • Un simple oracle [2/2]
      • Misc
        • Je suis une théière
        • Pierre-papier-Hallebarde
        • GoGOLFplex
      • OSINT
        • À l'aube d'un échange
        • Collaborateur suspect
        • Equipement désuet
      • Reverse
        • Mot de passe ?
      • Steganography
        • La plume à la main
        • PNG : Un logo obèse [1/4]
        • PNG : Drôles de chimères [2/4]
        • Toujours obèse [3/4]
      • Web
        • Fiché JS
        • Le braquage
        • Du gâteau
        • En construction !
    • Operation Kernel
      • Crypto
        • Scytale
      • Forensics
        • Research Paper
        • Excel Confidential
      • Reverse
        • CryptoLocker
        • What_If_CryptoLocker
      • Social Engineering
        • Pour vivre secure vivons caché
        • Pour vivre secure vivons caché Part 2
      • Stegano
        • AudioSpectre
        • Datacenter
        • Takazume
      • WEB
        • Research paper blog
        • SQL Project 1
        • SQL Project 2
        • SQL Project 3
        • Tenue de soirée requise
  • 🗓️2023
    • 404CTF 2023
      • Résultats
      • Analyse forensique
        • Pêche au livre
        • Le Mystère du roman d'amour
        • Les Mystères du cluster de la Comtesse de Ségur [1/2]
        • Lettres volatiles
        • Note de bas de page
      • Cloud
        • Le Sot
        • Le Cluster de Madame Bovary
        • Harpagon et le magot
        • Les nuages menaçants 1/3
        • Les nuages menaçants 2/3
      • Cryptanalyse
        • Recette
        • ASCON Marchombre
      • Divers
        • Bienvenue
        • Exemple de connexion à distance
        • Discord
        • À vos plumes !
      • Exploitation de binaires
        • Je veux la lune !
      • Programmation
        • L'Inondation
        • Des mots, des mots, des mots
      • Radio-Fréquence
        • Navi
        • Avez-vous vu les cascades du hérisson ?
        • Le Plombier du câble
        • Ballistic Missile Submarine
      • Renseignement en sources ouvertes
        • Le Tour de France
        • Les OSINTables [1/3]
        • Un vol ?
        • L'âme d'un poète et le coeur d'une femme [1/4]
        • L'âme d'un poète et le coeur d'une femme [2/4]
        • L'âme d'un poète et le coeur d'une femme [3/4]
        • L'âme d'un poète et le coeur d'une femme [4/4]
      • Rétro Ingénierie
        • Le Divin Crackme
        • L'Inspiration en images
      • Sécurité Matérielle
        • Un courrier suspect
        • Un réveil difficile
      • Stéganographie
        • Odobenus Rosmarus
        • L'Œuvre
        • Les Félicitations
        • En Profondeur
        • Le Rouge et le vert, avec un soupçon de bleu
      • Web
        • Le Loup et le renard
        • L'Académie du détail
        • La Vie Française
        • Fuite en 1791
        • L'Épistolaire moderne
        • Chanson d'Inde
      • Web3
        • Art
        • L'Antiquaire, tête en l'air
Powered by GitBook
On this page

Was this helpful?

  1. 2023
  2. 404CTF 2023
  3. Web

Chanson d'Inde

PreviousL'Épistolaire moderneNextWeb3

Last updated 1 year ago

Was this helpful?

Catégorie: Web - Difficulté: Difficile

Description:

Lien :

Solution:

Pour ce challenge, nous avons accès à une page basique avec un bouton qui nous emmène vers une autre page :

Le possible point d'entrée est l'URL d'un fichier audio à envoyer (en haut de la page). Cependant après avoir fais différents tests, rien de bien concluant.

Nous pouvons donc voir ce qui a été fait sur ce site ainsi que les dates de ces changements. Nous pouvons tout lire mais le plus intéressant est ce qui a été changé le plus récemment :

Passons au deuxième changement datant du 15/02/2021 où la version d'EJS a été changée. En regardant les vulnérabilités sur la version d'EJS en Février 2021, nous trouvons ceci :

Nous voyons donc le payload utilisé : ?id=2&settings[view options][outputFunctionName]=x;process.mainModule.require('child_process').execSync('command_to_execute');s et comment l'utiliser. Nous passons simplement une commande que nous voulons exécuter sur le serveur et ça sera bon.

Maintenant il faut trouver où envoyer ce payload... Souvenons nous au début, nous avons trouvé qu'il est possible d'envoyer une URL d'un fichier audio afin qu'il soit pris en compte. Voilà notre porte d'entrée.

Pour la pratique, nous allons utiliser le proxy de Burp et modifier la requête avant de la renvoyer. 1. Interception de la requête :

Une fois dans le module Repeater, nous allons pouvoir passer à la suite. 2. Modification de la requête et envoi de notre payload :

Là nous avons la requête et notre payload a exécuter sur le serveur. Pour pouvoir l'envoyer, nous allons l'ajouter après notre URL comme ceci :

Mais étrangement nous n'avons aucun résultat, pas de retour... Il faut donc trouver une solution pour récupérer le retour de notre commande, car sinon ça ne servira pas à grand chose.

En y réfléchissant il faut trouver une solution pour retourner le résultat : echo() ? print() ? alert() ? return ? En les testant tous, nous voyons qu'il n'y a que le return qui fonctionne : 3. Récupération du résultat de notre payload :

Nous récupérons enfin le résultat de notre commande. C'est génial, car maintenant nous pouvons naviguer dans les fichiers et chercher où pourrait se situer notre flag (assez simple ici).

On continue étape par étape, jusqu'à récupérer le flag :

Nous parvenons enfin à récupérer notre flag grâce au payload suivant : ?id=2&settings[view%20options][outputFunctionName]=x;return global.process.mainModule.constructor._load('child_process').execSync('cat flag/flag.txt');s

Ce chall était assez complexe mais très intéressant sur la manière d'exploiter une ancienne vulnérabilité d'un service utilisé très souvent.

🚩 FLAG
404CTF{v01la_Ind14_S0ng_s3_tErm1n3}

Dans le doute, nous tentons de voir s'il n'y a pas un fichier robots.txt disponible. Et c'est le cas :

Nous voyons donc qu'il y a un fichier CHANGELOG.md existant ()

En regardant les changements, nous voyons que la version d'ExpressJS a été mise à jour juste avant le démarrage du 404CTF, ce qui fait qu'une nouvelle vulnérabilité aurait été bien vite trouvée (en 1 semaine). Mais pour être sûr, nous allons vérifier les anciennes dates de découvetes de vulnérabilités pour ExpressJS : La dernière en date est répertoriée en Octobre 2022.

En regardant les dates des CVE découvertes et celle de la mise à jour d'EJS sur le site web, nous trouvons qu'il s'agit d'une vulnérabilité à exploiter avec une RCE : . Sur la page, nous trouvons directement un payload préparé. Néanmoins pour bien comprendre, nous pouvons chercher d'autres ressources. Voici celle que j'ai utilisée :

Pour ne pas réexécuter à chaque fois toutes ces étapes, nous allons envoyer la requête au module "Repeater" pour simplement changer les paramètres souhaités (ici l'URL).

🗓️
ℹ️
https://chanson-d-inde.challenges.404ctf.fr/robots.txt
https://chanson-d-inde.challenges.404ctf.fr/CHANGELOG.md
https://security.snyk.io/package/npm/express
CVE-2022-29078
https://eslam.io/posts/ejs-server-side-template-injection-rce/
https://chanson-d-inde.challenges.404ctf.fr/
Ici nous exécutons la commande ls
https://security.snyk.io/package/npm/ejs