Description
Click on the different color.
Resolution
Comme la description l’indiquait, il fallait cliquer sur le carré qui avait une couleur différente des autres.
Ca a commencé doucement avec 2×2 blocs, résolvable humainement.
Et à chaque clic, la grille s’agrandissait et les couleurs devenaient de moins en moins distinguables.
Puis (ça commence à être tendu) :
Voyant le nombre de possibilités s’accroitre, nous avons alors codé un outil pour résoudre ce challenge :
<?php $page = 'http://ctfquest.trendmicro.co.jp:43210/click_on_the_different_color'; $border = 3; while (true) { $data = file_get_contents($page); if (preg_match('#ocation\.href=\'/(.+?)\?#', $data, $regs)) { $dest = $regs[1]; if (preg_match('#<img src="(.+?)"#', $data, $regs)) { $img = imagecreatefrompng('http://ctfquest.trendmicro.co.jp:43210'.$regs[1]); if ($img) { $bordercolor = imagecolorat($img, 0, 0); // Couleur de la bordure $colorref = imagecolorat($img, $border+1, $border+1); // Couleur du bloc après la bordure for ($i = 1; true; ++$i) { // Check de la taille du bloc if (($color = imagecolorat($img, $border+$i, $border+1)) == $bordercolor) { // Si la couleur n'est pas celle de la bordure $blocksize = $i; // Taille d'un bloc $blocs = (imagesx($img)-$border)/($blocksize+$border); // Nombre de blocs echo "Size: $i\nRef: $colorref\nColor: $color\nBorder: $bordercolor\nBlocs: $blocs\n"; // Debug for ($x = 0; $x < $blocs; ++$x) { // Recherche du bloc différent for ($y = 0; $y < $blocs; ++$y) { $rx = ($blocksize+$border)*$x+$border+1; $ry = ($blocksize+$border)*$y+$border+1; $test = imagecolorat($img, $rx, $ry); // Couleur du bloc à tester if ($test != $colorref) { // Si couleur différente de la référence, bingo ? echo "$rx / $ry : $test : $colorref\n"; // Debug $page = 'http://ctfquest.trendmicro.co.jp:43210/'.$dest.'?x='.$rx.'&y='.$ry; continue 4; } } } break; } } } else { break; } } } else { echo $data; break; } }
Au bout de quelques secondes, jusqu’à arriver à 80×80 blocs à analyser, nous obtenons le flag !
Le flag est : TMCTF{U must have R0807 3Y3s!}