Solution de ThierryBesancon pour Web Logs

forensics logs

16 juillet 2026

Etape 1 : reconnaissance du terrain.

Il s’agit d’un challenge portant sur une attaque web dont on a les logs du serveur web. L’énoncé parle d’une attaque réussie qui extrait des fichiers sensibles.

Etape 2 : analyse des logs.

L’attaque est réussie. Donc une ou plusieurs requêtes réussissent et ont donc un code HTTP 200.

Parmi ces requêtes réussies :

  • On élimine les requêtes portant sur la racine du site web. Rapidement on voit qu’une telle requête renvoie 2272 octets.
  • On élimine les requêtes sur des images JPEG.
  • On élimine les requêtes sur des images PNG.
  • On élimine les requêtes sur des fichiers CSS.
  • On élimine les requêtes sur le endpoint /server-status.
  • On élimine les requêtes de type HEAD.
  • On élimine les requêtes de type OPTION.

Cela conduit à cet enchainement de commandes grep que je n’ai pas cherché à optimiser. Il faut comprendre cet enchainement comme l’analyse pas à pas des résultats. Au fur et à mesure, j’affine en éliminant ce qui apparait comme inutile.

#!/bin/bash

grep " 200 " webserver.log | \
grep -v "200 2272" | \
grep -v jpeg | \
grep -v png | \
grep -v css | \
grep -v server-status | \
grep -v HEAD | \
grep -v OPTION

Etape 3 : ce que l’on trouve.

Que trouve le petit script précédent ?

Deux lignes que voici (je les éclate en multilignes pour rendre le résultat plus lisible) :

May  7 00:40:21 front web-server mywebsite:80 127.0.0.1 - - [07/May/2025:00:40:21 +0000] \
    "GET /?asset=../../../../home/webserver/.ssh/id_rsa HTTP/1.0" 200 2500 "-" \
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
May  7 00:40:22 front web-server mywebsite:80 127.0.0.1 - - [07/May/2025:00:40:22 +0000] \
    "GET /?asset=../../../../home/webserver/.ssh/known_hosts HTTP/1.0" 200 2750 "-" \
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

Effectivement on extrait avec succès (code HTTP 200) deux fichiers sensibles :

  • une clef privée SSH
  • un fichier de known hosts

Potentiellement on pourrait tenter d’utiliser la clef pour se connecter sur des hosts dont les noms seront trouvés dans known_hosts.

La technique qui a fonctionné ici s’appelle du « path traversal ». Ca ne s’invente pas, on le sait ou on ne le sait pas. Google is your friend.

En cherchant « path traversal cwe », on trouve facilement que c’est le CWE 35. https://cwe.mitre.org/data/definitions/35.html

On assemble donc les éléments trouvés en suivant le format de flag proposé par l’énoncé et le flag devrait donc être :

FCSC{CWE-35-05/07-/?asset=../../../../home/webserver/.ssh/id_rsa-/?asset=../../../../home/webserver/.ssh/known_hosts}

BINGO. Le flag se valide.

QED

🐒