Cybersecurity
  • Mon Blog
    • 🏠Home
    • 📦Archives
      • 2024
      • 2023
      • 2022
    • 📂Catégories
    • 📧A propos de moi
  • Mes projets
    • Livres / publications
      • Sécurité des applications web - Stratégies offensives et défensives
    • MyExpense
    • XSS Exploitation Tool
  • Mes Articles
    • 2025
      • Mars
        • Comment les requêtes préparées (prepared statement) protègent-elles contre les injections SQL ?
      • Janvier
        • XSS Exploitation Tool v0.7.0
    • 2024
      • Décembre
        • XSS Exploitation Tool v0.6.0
      • Septembre
        • MyExpense v1.4
      • Aout
        • XSS Exploitation Tool v0.5.0
        • Exploitation des injections SQL au sein de la clause ORDER BY
      • Juin
        • Parution de mon livre, Sécurité des applications web - Stratégies offensives et défensives
      • Mai
        • Dompurify 3.0.10 bypass - Confusion nodeName and CDATA
        • Dompurify 3.0.9 bypass - Node type confusion
      • Avril
        • Bypass de validation d'URL et embedded credentials côté front
      • Mars
        • MyExpense v1.3
    • 2023
      • Mai
        • MyExpense v1.2
      • Mars
        • MyExpense v1.1
        • Fonctionnement de l'entête X-Content-Type-Options - Contournement de CSP
      • Février
        • Fonctionnement de l'entête HTTP Strict Transport Security Header (HSTS)
    • 2022
      • Décembre
        • Les injections CSS - Règle @import
        • Les injections CSS - Scroll-to-Text Fragment
      • Novembre
        • Les injections CSS - Attribute Selector
        • Les injections CSS - Règle @font-face et descripteur unicode
      • Octobre
        • XSS Exploitation Tool v0.4.0
      • Septembre
        • Cross-Site Scripting (XSS) et schéma d'URI javascript
      • Juillet
        • SAST - PHP CodeSniffer orienté sécurité dans Visual Studio (sous Windows)
        • SAST - PHP CodeSniffer orienté sécurité dans Visual Studio (sous Debian)
        • Est-il possible de contourner la fonction PHP htmlspecialchars() ?
  • Common Vulnerabilities and Exposures (CVE)
    • 2024
      • CVE-2024-29415
    • 2023
      • CVE-2023-42282
    • 2022
      • CVE-2022-33910
      • CVE-2022-32444
      • CVE-2022-32442
    • 2020
      • CVE-2020-26311
  • Livres
    • 2023
      • Attacking and Exploiting Modern Web Applications
      • DevSecOps - Développez et administrez vos services en toute sécurité
    • 2022
      • Hacking APIs - Breaking Web Application Programming Interfaces
    • 2018
      • Practical Web Penetration Testing
      • Web Hacking 101: How to Make Money Hacking Ethically
  • Walkthroughs
    • Capture The Flag
      • Hack.lu CTF 2019
        • Nucular Power Plant
      • TAMUctf 2019
        • 1337 Secur1ty
        • Bird Box Challenge
        • Science!
    • Deliberately Vulnerable
      • CORS vulnerable Lab
        • Application Trust Arbritrary Origin
        • Application has bad "regex" Implementation to check Trusted Origin
        • Application Trust "null" Origin
      • Damn Vulnerable Web Application (DVWA)
        • Brute Force
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Command Injection
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • CSRF
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • File Inclusion
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • File Upload
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Insecure CAPTCHA
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • SQL Injection
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • SQL Injection (Blind)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Weak Session IDs
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (DOM)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (Reflected)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (Stored)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • CSP Bypass
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Javascript
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
      • Unescape() room
        • Level 1 (practice)
        • Level 2 (practice)
        • Level 3 (practice)
        • Level 4 (practice)
        • Level 5 (practice)
        • Level 6 (practice)
        • Level 7 (practice)
        • Level 8 (practice)
        • Level 9 (practice)
        • Level 10 (practice)
      • VulnHub
        • GoatseLinux: 1
        • Hackademic: RTB1
        • Hackademic: RTB2
        • Holynix: v1
        • Holynix: v2
        • Kioptrix: Level 1 (#1)
        • Kioptrix: Level 1.1 (#2)
        • Kioptrix: Level 1.2 (#3)
        • Kioptrix: Level 1.3 (#4)
        • LAMPSecurity: CTF4
        • LAMPSecurity: CTF5
        • LAMPSecurity: CTF6
        • Metasploitable: 1
        • pWnOS 1.0
        • pWnOS 2.0 (Pre-Release)
      • XSS Vulnerability Challenges
        • xss1
        • xss2
        • xss3
        • xss4
        • xss5
        • xxs6
        • xss7
        • xss8
Propulsé par GitBook
Sur cette page
  • Détails du challenge
  • Reconnaissance
  • Exploitation
  1. Walkthroughs
  2. Capture The Flag
  3. TAMUctf 2019

Science!

PrécédentBird Box ChallengeSuivantDeliberately Vulnerable

Dernière mise à jour il y a 2 ans

Détails du challenge

"Science!" est un challenge Web de niveau moyen (medium). Son accès se fait grâce à une URL indiquée dans une modale :

Reconnaissance

La page d'accueil m'invite à renseigner le nom de deux produits chimiques et de connaitre le résultat de leur combinaison :

Le résultat est disponible sur la page /science. Par exemple, pour deux données aléatoires, le résultat est un gif animé montrant une jolie réaction chimique :

Rien d'intéressant concernant le code source des pages web, pas de champ caché, de commentaire, ... :

Je tente toutes sortes d'injections au niveau des deux champs, nommés respectivement "chem1" et "chem2". Les deux champs sont vulnérables à des injections XSS, mais je n'ai rien trouvé de plus (du moins dans un premier temps) :

A force de tourner en rond, je commence à regarder de plus près le titre de la page d'accueil du challenge : "FaaS - Flask As A Service". Flask est un microframework développé en python qui permet de lancer un serveur web. Je connais maintenant mieux notre cible et je vérifie si ce framework est vulnérable à certaines failles. Et en effet, l'injection de template côté serveur (SSTI pour Server Side Template Injection) remonte dans les premiers résultats de l'ami Google.

Comment détecter une telle vulnérabilité ? Il suffit de demander au serveur d'effectuer un simple calcul. Si le résultat renvoyé est le résultat attendu, alors cela indique que le serveur a bien exécuté la demande. Par exemple, pour lui demander de calculer "7 * 7" il suffit d'injecter dans un des deux (ou les deux) champs de la page d'accueil la payload {{7*7}} ce qui donne :

Le serveur me retourne bien le résultat escompté, soit "49".

Exploitation

Attention les paramètres ne sont pas en GET mais en POST, d'où l'option --data. L'option --os-shell va permettre de récupérer un shell distant :

Un ls puis un cat plus tard je récupère le sésame stocké dans le fichier "flag.txt" :

A ce stade, je sais que le fichier contenant le sésame se nomme "flag.txt". Il est donc possible d'exécuter un file disclosure. Via Burp j'injecte donc la payload suivante :

{{ config.items()[4][1].__class__.__mro__[2].__subclasses__()[40]("flag.txt").read() }}

Il est possible que les index varient en fonction de la cible, mais cela peut être vérifié. Par exemple, le dernier indice (40) est celui de la classe "file". Pour s'en assurer il est possible d'injecter ceci :

{{ config.items()[4][1].__class__.__mro__[2].__subclasses__() }}

Cela a pour effet de remonter la liste des classes disponibles et donc la position de la classe "file" (ligne 40 ici) :

Grâce à la payload complète (encodée ici en encodage URL) je récupère directement le flag :

Ne pas hésiter à effectuer un encodage URL à vos payloads pour les faire passer plus simplement (présence du caractère "&" ou encore des espaces par exemple).

En cherchant comment exploiter cette vulnérabilité, je tombe assez rapidement sur un outil disponible sur Github nommé "TplMap" (). Après un git clone et une rapide lecture du "README" je lance la première commande qui va confirmer la vulnérabilité :

L'outil c'est bien, mais je voulais également creuser un peu plus cette vulnérabilité. Concernant les SSTI, une cheat-sheet permettant de connaitre les principales payload est disponible : .

https://github.com/epinna/tplmap
https://pequalsnp-team.github.io/cheatsheet/flask-jinja2-ssti