Description du challenge :
Our agents got caught during a mission and found that the guards are using old walkie-talkies for their communication. The field team captured their transmissions. Can you interrupt their communication to help our agents escape from the guards?
Pour ce challenge, on nous fournit 4 transmissions audio au format complex
.
On a aussi accès à une instance web :
On peut tester avec des valeurs randoms pour voir comment ça réagit mais rien de spécial se produit.
Il faut sûrement y mettre un préambule spécifique ou je sais pas. Bref, allons voir de plus près les signaux avec Universal Radio Hacker.
Donc, on ouvre nos 4 fichiers avec URH. Exemple avec le premier :
En affichant les données en hexadécimal, on constate que les 4 signaux fournis suivent une même logique :
Signal 1 : aaaaaaaa73214693a1ff14
Signal 2 : aaaaaaaa73214693a2ff84
Signal 3 : aaaaaaaa73214693b2ff24
Signal 4 : aaaaaaaa73214693b1ff57
Ça a l’air de matcher avec nos 3 paramètres, pour le signal 1, aaaaaaaa
serait le préambule, 73214693
le sync word et a1ff14
le payload.
Je réessaie mais toujours rien.
Par contre, on remarque que les payloads, suivent eux aussi une logique, avec 2 caractères hexa, ff
, et 2 autres caractères hexa.
On pourrait se créer une wordlist pour brute-force tous les payloads possibles et voir si une page réagit différemment.
Créons d’abord une wordlist avec crunch
:
crunch 6 6 0123456789ABCDEF -t @@FF@@ -o pouet
Passons au bruteforce avec ffuf. Mais d’abord, il nous faut récupérer le nom des paramètres pour la requête POST. Plusieurs possibilités, perso, j’utilise l’onglet Network présent sur n’importe quel navigateur en lançant une requête avec des paramètres au pif. On peut voir le nom de nos 3 paramètres, pa
, sw
et pl
.
Bref, voici la commande pour le bruteforce, sans oublier le Content-Type
sinon, il ne se passera rien :
ffuf -c -w pouet -u http://94.237.56.188:40252/transmit -X POST -d "pa=aaaaaaaa&sw=73214693&pl=FUZZ" -H "Content-Type: application/x-www-form-urlencoded"
On note la taille d’une requête type qui fait 2831, CtrlC puis on refait la même commande en y rajoutant le -fs 2831
pour voir si une requête a une taille différente.
On laisse mijoter et là , on voit que TOUS les payloads qui ont leur deuxième partie à F9 ont une size différente.
<SNIP>
[Status: 200, Size: 2896, Words: 420, Lines: 134, Duration: 25ms]
* W1: 9B
* W2: F9
[Status: 200, Size: 2896, Words: 420, Lines: 134, Duration: 23ms]
* W1: A7
* W2: F9
[Status: 200, Size: 2896, Words: 420, Lines: 134, Duration: 25ms]
* W1: BE
* W2: F9
Reste plus qu’à rentrer les bonnes valeurs avec un payload qui finit par F9 et obtenir notre flag :)
On peut aussi faire un curl
pour que ça fasse + hacker :
curl -X POST http://94.237.56.188:40252/transmit -d 'pa=aaaaaaaa&sw=73214693&pl=a2fff9'