ECW 2018 - Web - SysIA

L’ECW 2018 est un challenge Jeopardy français organisé par le Pôle d’Excellence Cyber en partenariat avec la Région Bretagne, Airbus et Thales. SysIA est un challenge basé sur l’exploitation d’une LFI (Local File Inclusion) puis l’utilisation du bash_history et de l’utilitaire updatedb afin de trouver le flag.

Du 06/10 au 21/10 2018, il sert de pré-sélection pour l’épreuve finale de type Capture The Flag qui débutera le 21 novembre 2018 lors de la conférence de l’European Cyber Week à Rennes.

Découverte

Le challenge démarre avec l’énoncé suivant :

Notre jeune IA administrateur système continue de commettre des erreurs humaines.
Je suppose qu'il faut encore apprendre avant la production.
Mais nous ne pouvons pas nous permettre de la retarder encodre une fois!

De même, une première information donnée par les organisateurs : “An easy good old PHP challenge ;)” nous permet de fermer dès à présent certaines possibilités.

On arrive donc sur un site web parlant de “deep learning”

ECW2018_sysia_1

Après une petite navigation sur les différentes pages, qui ne semblent être que des pages vitrine, on va faire un tour du côté du fichier “robots.txt” et on y trouve quelque chose de louche…

https://web075-sysia.challenge-ecw.fr/robots.txt
ECW2018_sysia_2

Ni une ni deux, on file sur la page non-indexée et on y trouve ceci.

ECW2018_sysia_3

L’expérience et les indications laissées par les organisateurs nous indiquent une route… Ca sent bon la LFI !

LFI - Exploitation

Comme tout bon POC, on va tenter de prouver la présence d’une vulnérabilité Local File Inclusion (LFI) en affichant le contenu du fichier “/etc/passwd” qui est normalement lisible.

https://web075-sysia.challenge-ecw.fr/notinterestingfile.php?page=../../../../etc/passwd
ECW2018_sysia_4

Bingo ! On a une jolie LFI. Maintenant… Qu’est ce que nous cherchons ? Il est possible de lire certains fichiers sur le serveur, on va donc chercher à récupérer le maximum d’informations. Après quelques tests, on s’oriente du côté du fichier contenant l’historique des commandes exécutées par l’utilisateur, le fichier “bash_history”, pouvant contenir de précieuses informations. Etant dans un docker, on va aller fouiller du côté de l’historique pour l’utilisateur root.

https://web075-sysia.challenge-ecw.fr/notinterestingfile.php?page=../../../../root/bash_history
ECW2018_sysia_5

Afin de pouvoir lire correctement le contenu du fichier, on va directement dans les source de la page. Après un rapide coup d’oeil sur le contenu de fichier, on remarque la présence d’une séquence de 3 commandes intéressantes :

  • locate flag.txt
  • updatedb
  • locate flag.txt
ECW2018_sysia_6

Petite subtilité que je connaissais pas, l’utilitaire “updatedb” permet de mettre à jour la base de chemins connus et utilisés par locate. Ainsi, après quelques recherches, on apprend que le contenu de cette base est stocké dans le fichier “/var/lib/mlocate/mlocate.db”. Par conséquent.. On devrait trouver le chemin vers le fichier flag.txt. Afin d’éviter de chercher à la main, on va chercher directement la chaine “ECW”.

https://web075-sysia.challenge-ecw.fr/notinterestingfile.php?page=../../../../var/lib/mlocate/mlocate.db
ECW2018_sysia_7

Bingo, on a un chemin !

Récupération du flag

On peut donc via notre LFI aller lire directement le contenu du fichier flag.txt, et ainsi récupérer le flag du challenge.

https://web075-sysia.challenge-ecw.fr/notinterestingfile.php?page=../../../../var/www/ECW/solution/web/lfi/flag.txt
ECW2018_sysia_8

Au final, challenge assez simple présentant une LFI sans aucune restriction mais ayant la plus value d’intégrer une exploitation un peu plus réaliste. Nice one ! :)

Références

ECW 2017 - Web - Path Through ECW 2018 - Web - Troll.JSP