Según tenga tiempo iré subiendo los writeups de aquellas pruebas de la fase online de la cybercamp 2016 que haya conseguido resolver.
En esta prueba nos daban el siguiente enunciado:
CRYPTO 1
https://challenge.cybercamp.es/challenge/46/
Descripción:
La prensa amarilla de Reino Unido no para de publicar por adelantado los resultados de las deliberaciones de los jueces, nadie sabe cómo se producen las filtraciones. Parece que hay un topo. Hemos capturado tráfico de red de la Wifi del hotel.
¿Sabes cómo lo hacen?.
Mirror1: https://mega.nz/#!icplyAzI!0lUpw3dB38BzJ7a7nu8FvEFIgQbbFpYjHEl88JryBV4
Mirror2: https://mega.nz/#!zpdAiZTI!0lUpw3dB38BzJ7a7nu8FvEFIgQbbFpYjHEl88JryBV4
Y un archivo file.pcap el cual procedimos a abrir con wireshark para ver que contenía. La verdad es que el análisis fue bastante corto, el archivo contenía mayoritariamente llamadas DNS y HTTP; por aquello de que valía pocos puntos (ya debería saber que no debo fiarme) me centre en las llamadas HTTP y utilizando el filtro correspondiente de wireshark me quede solo con esas:
Los Continuation y las respuestas 200 parece que sobran, vamos a seguir filtrando:
Esto ya parecía mucho mas prometedor, pero, esas llamadas no contenían ninguna información en especial, los puertos eran siempre los mismos…. Espera, el año pasado nos quedamos bloqueados en una prueba en la que utilizaban morse, y veo que las urls contienen . y – si consideramos esas llamadas con los diferentes símbolos del morse y los / como espacios quizás veamos algo.
Tengo que reconocer que en su momento ni esto fue tan claro ni tan bonito como lo pinto, además de que en lugar de utilizar los siguientes scripts todo se hizo a mano, pero entonces no quedaríamos tan bien jeje
Lo primero que necesitábamos era una manera de extraer el mensaje, para ello utilice este pequeño script en bash:
#!/bin/bash INPUT=$(tshark -2 -R 'http.request.method=="GET"' -r file.pcap | tr -s " " | cut $ for i in $INPUT do if [ $(echo $i | grep -c "insert") -eq 1 ] then MORSE=$MORSE"." elif [ $(echo $i | grep -c "publish") -eq 1 ] then MORSE=$MORSE"-" else MORSE=$MORSE" " fi done echo $MORSE
Ejecutando este script en la misma carpeta donde teníamos el pcap obtenemos la siguiente secuencia:
.-. ..- ... .. .- - . -. .--. --- .. -. - ... .-.-.
Prometedor, ahora vamos a utilizar un pequeño script en python que me escribí para lidiar con morse, aquí os dejo el código:
import argparse morse = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.' } parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group(required=True) group.add_argument("-e","--encode", help="Encode text to morse.") group.add_argument("-d","--decode", help="Decode morse to text") args = parser.parse_args() output="" if args.encode is not None: for letter in args.encode: if not letter.isspace(): output+=morse[letter.upper()]+" " elif args.decode is not None: inv_morse = {v: k for k, v in morse.iteritems()} buff="" for letter in args.decode: if not letter.isspace(): buff+=letter continue try: output+=inv_morse[buff] except: pass buff="" try: output+=inv_morse[buff] except: pass buff="" print output
Si utilizais vuestro propio script o alguno online seguramente os encontrareis conque el último grupo de símbolos no corresponde con ningún carácter morse, para evitar este problema decidí modificar mi script y que en caso de no hallar un valor adecuado se limitase a seguir procesando el resto de la información.
Lanzamos el script con el código morse que obtuvimos anteriormente y recibimos el siguiente resultado:
morse.py -d ".-. ..- ... .. .- - . -. .--. --- .. -. - ... .-.-." RUSIATENPOINTS
¡Y ahí está la flag!
Espero os haya gustado este writeupt, como siempre, gracias por vuestra visita!