Dans ce Writeup, je vous explique comment j'ai réussi à flag le challenge du CTF Hackday
Ce chall ne fourni ni fichier ni ip/port pour du tcp, mais le titre donne un indice "WebSDR" :
Un WebSDR est un récepteur radio accesible sur Internet, nous permettant ainsi d'écouteur et d'analyser certains signaux sans forcément avoir le materiel nécessaire.
Certain site web comme http://websdr.org permet de les lister.
Le challenge est hebergé par ESIEE Paris donc une plateforme francais, il conviendra donc de selectionner un websdr hebergé proche de paris.
Celui ci par exemple : http://dk0te.dhbw-ravensburg.de:8901
En journée, le signal va etre moins audible voir quasi inexistant en cas de forte température. Ce sont les lois de la propagation ionosphérique, ainsi, il vaut mieux écouter le signal en soirée. (Comme le dit l'énoncée : A la nuit tombée, tout s'éclaire)
Une fois la fréquence réglée sur 3,58Mh, un signal de 30 secondes est visible toute les minutes, ce qui correspond bien à l'énnoncé du chall !
Après voir testé plusieurs modes : le CW (Continuous Wave) est celui ou le signal se fait le mieux entendre.
Le signal découpé en 2 parties, en 3.5Mhz et en 3.5804 Mhz, cela resemble étrangement à du FSK.
La modulation par déplacement de fréquence (FSK : Frequency-shift keying) est un modulation de fréquence dans lequel des informations numériques sont transmises via des changements de fréquence discrets d'un signal porteur.
Le signal peut être enregistré afin d'étre analyser et démoduler en local.
Download WebSDR Signal.wav
Rien de flagrant, mais audacity permet d'afficher le spectre et en jouant avec les réglages du spectograme, le logiciel peut afficher des données assez intérressantes :
Après avoir passé une demi journée de try hard sur URH sans succès, je me retrousse les manches et décide donc de le faire à la mano :
À l'aide d'un fichier texte, le but va être de réecrire bits par bits le signal pour ensuite decoder le binaire et ainssi obtenir de l'Ascii. Il y à quand meme quelques indices pour ne pas commencer n'importe ou et sans repères :
- Nous savons que le flag commence par "HACKDAY{" donc :
01001000 01000001 01000011 01001011 01000100 01000001 01011001 01111011
H A C K D A Y {
Logiquement le signal commence juste après la synchro.
Le début de la trame matche parfaitement avec le flag :
Chaque charactère Ascii (sous forme de 8bits) sont séapré par 4bits 'x110' (faisant parti du protocole de Transmission des données en série )
Une fois compris la mécanique de la trame, il suffit de décoder jusqu'a la fin du flag soit '}'
0101010101010100010010000110010000010110010000111110010010110110010001000110010000010110010110010110011110110110001101001110001110001110001011100110001110001110001101001110001100001100011001101100011001011100010110011100011001011100010111001100011010101100011100011100011001101100011000011000111001011000110101011001111101011001000110111000
HACKDAY{48.84032,2.583095}