Bonjour à tous,
Voici mon writeup de la plupart des challs flaggués par mon équipe lors du Oxyhack Cyberevent CTF. Bien que j’aie au moins participé à chaque défi, certains articles sont rédigés par d’autres membres de l’équipe.
Nous avons terminé premiers de ce CTF régional assez facile, mais toujours sympa (apparemment, l’équipe PEDA était l’équipe des professeurs de l’école). Nous sommes très heureux d’avoir réussi à obtenir la première place !
Stéganographie #
The Quest. #
Well… il s’agissait d’un logiciel Windows bizarre et non standard dont je n’avais jamais entendu parler 🤷 (https://www.openstego.com/). C’est peut-être la raison pour laquelle il s’agit du dernier chall de stéganographie à avoir été signalé.
OHxY{UnC0v3r_th3_c0nc34l3d_tr345ur3_w1th1n_th3_d1g1t4l_l4byr1nth}
Hey BOB ! #
La description fait allusion à la stéganographie LSB.
Un moyen simple de tester cela est d’utiliser Aperisolve qui combine de nombreux outils. Personnellement, j’ai juste lancé zsteg qui est préinstallé sur les container exegol et j’ai trouvé ce qui suit :
OHxY{R3v34l_th3_c0v3rt_m3554g3_c0nc34l3d_w1th1n_th3_5ubtl3_5h1ft5_0f_th3_l0w-b1t_r34lm}
Alien Sound ? #
Fichier audio $\Rightarrow$ Le premier réflexe est de regarder le spectre pour trouver des anomalies. Même s’il peut y avoir des injections d’en-tête WAW ou de la stéganographie LSB, la plupart des défis faciles à relever peuvent être résolus de cette manière.
OHxY{l15t3n_cl05ely_d3c0d3_th3_h1dd3n_symph0ny}
Web #
👋 [Thomas Hernandez] (https://ctftime.org/team/278913) (alias Daresse
) avec qui j’ai dû comprendre l’étrange intention de Cookie Mayhem.
Trickery! #
Nous disposons tout d’abord d’une page web vierge avec une simple entrée. On essaye d’abord d’y introduire des données normales.
Nous sommes redirigés vers une page où les données que nous avons fournies sont imprimées.
Les premières choses à essayer dans ce scénario sont :
- XSS (
<script>alert();</script>
) - SSTI(
{{1+1}}
) - injection de commande(
; whoami
).
Ici, la SSTI nous a donné le drapeau instantanément :
OHxY{3xpl01t_5ST1_f0r_tr1umph}
Cookie Mayhem! 🍪 #
Celui-ci porte bien son nom. Guidés par le nom du défi, nous allons directement dans les cookies, et nous n’en trouvons qu’un seul, le cookie de session :
eyJlbmNvZGVkX2ZsYWciOiJleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZlKbWJHRm5Jam9pUkRGa1gza3dkVjlyYmpCM1gyMTVYelV6WTNJemRGOF9JbjAuWllvREFZN2FranZUcEt3YWg3ekZES01fYmQ5V2pKdFY1QTY2VDEym11OCJ9.Zxyp6A.HsKdzaEsgskm8vl1p8B3AXQnP-I
Nous reconnaissons un jeton JWT signé (B64string.B64string.B64string = Header.Payload.Signature
). Direction jwt.io
pour l’analyser. Le payload et la Signature ne nous donnent rien d’intéressant, mais à l’intérieur de l’en-tête nous trouvons un autre jeton JWT. Que fait un jeton JWT dans l’en-tête d’un autre jeton JWT ? Personne ne le sait, mais bon :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbGFnIjoiRDFkX3kwdV9rbjB3X215XzUzY3IzdF8_In0.ZYoDAY7akjvTpKwah7zFDKM_bd9WjJtV5A66T12Nmu8
Celui-ci est tout à fait normal, et sa payload contient le drapeau :
D1d_y0u_kn0w_my_53cr3t_ ?
Ce flag n’est pas celui que nous recherchons, mais un indice, ce qui signifie que nous devons trouver autre chose.
La description de l’épreuve mentionne que nous sommes autorisés à énumérer le site web, nous lançons donc feroxbuster
, à la recherche de répertoires. Après quelques minutes, nous obtenons une page /check
qui contient un formulaire avec deux champs dans lesquels nous pouvons écrire :
JWT token:
Secret Key:
Toujours en utilisant jwt.io, nous recréons le jeton JWT “normal” »" en utilisant les mêmes données et algorithme, mais notre propre Secret Key
. Nous envoyons ce nouveau jeton et notre propre clé secrète à l’intérieur du formulaire, et nous obtenons le drapeau :
OHxY{M4n1pul4t3_JWT_5e5510n5_w1th_5STI_pr0w355}