Principe:
Identifier que le HTTP status code 2xx sert à passer un message encodé en ASCII par blocs de 9 bits (et non 8 bits)
Infos (cf menu latéral):
🚩 Flaggué! +999 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{Dr0l3_D3_m0Y3N_d3_f41r3_P4sS3r_d3S_d0nN33s_n0N?}
Le challenge
Le site
robots.txt ne donne rienPage d'admin
Faire défiler les pages
/page/1 et /page/2 on peut requêter les N premières pagesToutes les pages semblent répondre pareil, mais regardez bien: la page 48 manque! Il se passe un truc pour cette page…
Jamais 2 cent 4
HTTP 204 (No Content), d'où l'absence de body dans la réponse
/page/404 (car je me dis: peut-être que le numéro de page et le HTTP response code ont un lien), je reçois une HTTP 240 UNKNOWNHTTP 204 n'est pas définit par la spécification HTTP. C'est un code custom du site, et un bon indice pour dire "il y a un truc avec les response code HTTP"
Les HTTP response codes
curl -I): les response code HTTP varient d'une requête à l'autreDécoder
Le -200 est là car les codes HTTP "success" sont de la forme 2xx, donc, seul le xx peut être arbitrairement choisi pour passer un message
8 ni 9 n'apparait dans les codes: on dirait que le xx dans 2xx est peut-être une valeur octaleDécodage
base64 -d mais là encore, rien
Il y aurait pu avoir un lien, du type XOR
Et je n'ai pas flaggué…
Binaire
En fait, après la fin du flag, il s'avère que je n'étais pas passé loin.Parmi mes tests, j'avais tenté de passer de la base 8 à la base 2 histoire de voir si je trouvais un pattern en binaire, mais j'ai cherché trop loin (j'ai même pensé que le binaire pouvait être un QR code, mais impossible d'en faire un carré potable!).
Il suffisait de regrouper les valeurs binaires par 9, et d'en prendre la correspondance ASCII.
php -r '$c=explode(" ",file_get_contents("codes-list.txt"));\
$c=array_map(function ($x){ return str_pad(base_convert(((int)$x) - 200,8,2),6,"0",STR_PAD_LEFT);},$c);\
$c=implode("",$c);\
$c=str_split($c,9);\
$c=array_map(function($x){ return chr(base_convert($x,2,10));},$c);\
var_dump(implode("",$c));'
réunion Hallebarde le 26 juin à 13h. Venez nombreux.
N'oubliez pas le mot de passe qui vous permettra d'entrer dans la salle secrète :
404CTF{Dr0l3_D3_m0Y3N_d3_f41r3_P4sS3r_d3S_d0nN33s_n0N?}.
Longue vie à Hallebarde
Flag: 404CTF{Dr0l3_D3_m0Y3N_d3_f41r3_P4sS3r_d3S_d0nN33s_n0N?}