Description
QR Codes everywhere!
nc challenges.ecsc-teamfrance.fr 3001
Resolution
When connecting to the challenge we got:
Programming challenge --------------------- I will send you a PNG image compressed by zlib encoded in base64 that contains 64 encoded numbers. The expected answer is the sum of all the numbers (in decimal). You have 2 seconds. Are you ready? [Y/N] >> y eJztvQtUU2e+PuxMW21ta8fT2qIxOvPZqRWrDqUYIWxoxxmo2EIpbJBApJ0UUwGDdJvEJFymWutM S/BURYokO7VR0R0S5E4SLqPThsolW9QkhFzAYtmQhAQMSbjnvzd2es6sb61vff/zTc466/+1a9m1 E17x3fv93Z7nfX7v/us78bFPr1y3ctmyZU/vefMP7y5b9sSviD+P/xL/pugPz763bNkXvXv+8Eby [...] R076zki+2JmVg12utolt+HO/gJ7ZmQWq22yvyGihg5feNpYiTLXvTPPeyjqSf7bPzb0LdRX8/V80 7/94AHh6aHv45bKXh0n/td/xL5vM/x9+0eKy+TA/0DKvTCA+7vlj/B8Uv3/v2P8CrWOHGw== What is you answer? >>
All the solutions we’ve seen were to slit & scan each qrcode, what if you retrieve all the qrcodes in one pass? 🙂
It’s the default behavior of ZBarSymbol from pyzbar (doc).
#!/usr/bin/python3 from pwn import * import base64 import zlib from io import BytesIO from pyzbar.pyzbar import decode, ZBarSymbol from PIL import Image conn = remote('challenges.ecsc-teamfrance.fr',3001) conn.recvuntil('Are you ready? [Y/N]', drop=True) conn.sendline('Y') data = conn.recvuntil('What is you answer?', drop=True) data = zlib.decompress(base64.b64decode(data)) qrcodes = decode(Image.open(BytesIO(data)), symbols=[ZBarSymbol.QRCODE]) qrsum = 0 for qrcode in qrcodes: qrsum += int(qrcode[0]) conn.sendline(str(qrsum)) conn.interactive()
Flag was ECSC{e076963c132ec49bce13d47ea864324326d4cefa}