De quoi va-t’on parler ? #
Ce week-end, j’ai passé une demi-journée sur le CTF HackTheBox CyberApocalypse. Voici les flags que j’ai obtenus dans la catégorie Web, même si j’aurais aimé y passer plus de temps, car les défis, l’histoire et les visuels étaient excellents !
Trial by Fire #
Ce jeu en ligne semble fonctionner en local. Il est impossible de battre le dragon sans tricher (1300 points de vie contre 100, et nous infligeons le même nombre de dégâts)
En regardant le code, nous voyons un code konami - plutôt simpliste :
Cela ajoute un nouveau bouton :
Le “dispositif de capture” ne “semble pas suffisant” : 
D’après le message, nous recherchons une SSTI :
Le champ du nom ne semble pas déclencher un SSTI au début dans la page “combat”, mais les choses changent dans l’écran du rapport de combat final et le 7*7 est effectivement calculé.
Notez que nous pourrions empoisonner l’écran du rapport de combat avec d’autres paramètres puisque les vérifications ne semblent être que du côté client :
Nous essayons d’exploiter le SSTI en utilisant la charge utile suivante :
{{url_for.__globals__.os.popen('ls').read()}}
Comme le front-end limite la longueur des caractères, nous pouvons rejouer la requête via Burp pour obtenir la réponse Set-Cookie :
Cela nous permet d’exécuter le code à distance :
Nous pouvons maintenant obtenir le cookie de session pour une commande cat
:
HTB{Fl4m3_P34ks_Tr14l_Burn5_Br1ght_e992ef2db5dc4162967d210af654cecf}
Whispers of the Moonbeam #
Nous sommes - chaleureusement - accueillis par un terminal avec un ensemble de commandes que nous pouvons utiliser (examine
pour whoami
, observe
pour ps
et gossip
- 🤣 - pour ls
), mais nous aurions besoin de cat
.
On peut essayer des injections de commandes basiques comme ;
ou &
, et ça marche du premier coup (je ne sais pas pourquoi ce chall n’est pas mis en premier en termes de difficulté) :
HTB{Sh4d0w_3x3cut10n_1n_Th3_M00nb34m_T4v3rn_91bd11f988e6914e2565d5ac7457d3cf}