Follow the white rabbit CTF – Magic QR

The rabbit boss of the enemy burrow has sent a QR-encrypted message.
Decode it and get a hash in SHA1, introduce it before the rabbit eats the carrot and you will get your precious flags

http://dev1.ctf.followthewhiterabbit.es:8008

 

En esta prueba nos piden resolver un QR en menos de 4 segundos y devolver el SHA1 que conseguimos:

Lo primero de lo que me di cuenta al intentar leer el QR es que los colores del mismo estaban invertidos, guardamos el QR y utilizamos el siguiente comando para hacerlo legible:

convert -negate qr.png dst.png

Con esto el QR ya es perfectamente valido, al escanearlo nos encontramos con que nos devuelve un string en lo que parece ser morse. Después de pasarlo por mi querido morse.py veo que efectivamente al pasarlo a texto plano me devuelve un SHA1, pero, 4 segundos no es demasiado tiempo para hacer todo a mano, así que vamos a automatizar un poco todo esto.

Lo primero es obtener el QR, el cual esta en base64 dentro del source de la web, así que utilizando curl lo obtenemos y guardamos las cookies para que al enviar la solución no tengamos problemas:

curl -b cookies.txt -c cookies.txt -e dev1.ctf.followthewhiterabbit.es -s http://dev1.ctf.followthewhiterabbit.es:8008/index.php | grep base64 | cut -f2 -d"," | cut -f1 -d'"'| base64 -d > qr.png

El siguiente paso sería convertirlo con el primer comando que mencione y para leerlo utilizamos el siguiente script de python que nos devolverá el contenido del QR:

from qrtools import QR

myCode = QR(filename=u"dst.png")
myCode.decode()
print myCode.data

Este output a su vez se lo pasamos a morse.py y obtenemos el SHA1 que utilizaremos con curl y las cookies que andes guardamos para enviar la solución:

solution=$(python /home/kalrong/tools-sources/kscripts/morse.py -d "$morse"); echo "$solution"; curl -X POST -d "solution=$solution"  -b cookies.txt -c cookies.txt -e dev1.ctf.followthewhiterabbit.es -H "Referer: dev1.ctf.followthewhiterabbit.es" http://dev1.ctf.followthewhiterabbit.es:8008/index.php

Esto nos imprimirá por consola la web resultante que contiene la flag, para hacerlo de forma totalmente automática utilicé el siguiente script en una linea en bash:

curl -b cookies.txt -c cookies.txt -e dev1.ctf.followthewhiterabbit.es -s http://dev1.ctf.followthewhiterabbit.es:8008/index.php | grep base64 | cut -f2 -d"," | cut -f1 -d'"'| base64 -d > qr.png;convert -negate qr.png dst.png; morse=$(python qr.py);  solution=$(python morse.py -d "$morse"); echo "$solution"; curl -X POST -d "solution=$solution" -b cookies.txt -c cookies.txt -e dev1.ctf.followthewhiterabbit.es -H "Referer: dev1.ctf.followthewhiterabbit.es" http://dev1.ctf.followthewhiterabbit.es:8008/index.php

Lo ejecutamos y en unos segundos obtenemos la página de la cual podemos extraer la siguiente flag:

fwhibbit{Qr_1s_y0ur_Fr1end}

Esta entrada fue publicada en ctf, dev, fwhibbit-ctf, python, writeups. Guarda el enlace permanente.

Deja un comentario