31 views
###### tags: `Encodage` `ASCII` `NSI première` `Python` :::info Utilisation des fonctions de Python permettant de passer d'un type de codage vers un autre. Des conseils sont donnés pour résoudre le challenge. On y trouve * le parcours séquentiel d'un tableau * Utilisation de bibliothèque. ::: ###### tags: `parcours séquentiel` `Représentation d'un texte` ![](https://minio.apps.education.fr/codimd-prod/uploads/upload_ca4066fcd3bf6c13a439aab1cd670e14.png) ###### tags: `Utilisation de bibliothèque` ![](https://minio.apps.education.fr/codimd-prod/uploads/upload_3a37b5ed6dbafee3dc4a8bbfc9242fb4.png) ###### tags: `Connexion à distance` `netcat` `Python` :::info :warning: Certains challenges nécessitent une connexion à distance à un serveur de questions. On pourra dans un premier temps utiliser l'utilitaire **netcat** pour comprendre ce que le serveur attend comme réponse. Voici un exemple. **On doit décoder 100 codes hexadécimaux envoyés successivement.** ![](https://minio.apps.education.fr/codimd-prod/uploads/upload_8c08be140ecc6e9cf153afa61804cb6d.png) * établir la connexion au serveur distant avec netcat nc socket.cryptohack.org 13377 ![](https://minio.apps.education.fr/codimd-prod/uploads/upload_1ad63ef41b86414177a578eb7f570bbb.png) Le serveur attend que la chaine hexadécimale soit décodée, et renvoyée avec un formatage JSON, sûrement avec la valeur "decoded" en bonus. L'observation du code source du serveur de confirme cela ![](https://minio.apps.education.fr/codimd-prod/uploads/upload_4f8097790460c23dfd7d7ed0f5568857.png) De plus le type d'encodage n'est pas seulement de type hexadécimal ! ![](https://minio.apps.education.fr/codimd-prod/uploads/upload_baf926904863cb6aafc9c6881ec44885.png) La plateforme conseille d'utiliser la bibliothèque [pwntools](https://github.com/Gallopsled/pwntools) conçut pour le CTF. On peut aussi utiliser les fonctionnalités sockets présentent par défaut avec Python. ```python import socket """ TCP - connexion Socket - CTF CSWA Hôte 163.172.30.84 Protocole TCP Port 4372 """ # Adresse IP et port du serveur SERVER_IP = '163.172.30.84' SERVER_PORT = 4372 # Création du socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # Connexion au serveur client_socket.connect((SERVER_IP, SERVER_PORT)) print(f"Connecté au serveur {SERVER_IP}:{SERVER_PORT}") # Réception de la réponse du serveur data = client_socket.recv(1024) print(f"Message reçu du serveur : {data.decode()}") resultat = "Hello \n" # envoie de la réponse au serveur client_socket.sendall((resultat).encode()) # Réception de la réponse du serveur data = client_socket.recv(1024) print(f"Message reçu du serveur : {data.decode()}") # Fermeture de la connexion client_socket.close() print("Connexion fermée") except ConnectionRefusedError: print("La connexion a été refusée.") except Exception as e: print(f"Une erreur s'est produite : {str(e)}" ``` :::