Qr code madness - Misc (200 + 0)
-
● Random pictures, this do not make sense
● Solves: 80
● Download: http://dl.ctf.rocks/qrcodemadness.7z
● Author: d3vnu11
In the archive is a folder containing 114 very small PNG files of QR codes:
I grabbed zbar
from Homebrew to allow for scripted parsing of the QR codes. Each QR code encodes a single ASCII character:
[tkerr@pro qrcodemadness]$ zbarimg --raw --quiet * | tr -d '\n' cfnQ7cdMRUCtu6gfFzNFwfMHb0mBN9VRev=k5jXD9a2UXFPbMSxyA=Ai9ukDp9WxzrsZ1wNTo1aKXE3YGMthn1JgIdSULlMNmDGBqz104+HwdCazXU
OK, looks like base64 (even distribution of lower/uppercase, some numbers, and a few +s and =s), but it’s clearly out of order – the padding chars (==) are mixed in rather than trailing as they should be. Let’s try sorting numerically instead of alphabetically:
[tkerr@pro qrcodemadness]$ ls -1 | sort -n | xargs zbarimg --raw --quiet | tr -d '\n' n9JwXFbBVRev=k5jXD9a2UXFPbMSxyA=Ai9ukDp9WxzrsZ1wNTo1aKXE3YGMth1gIdSULlMNmDGBqz104+HdCazUcfnQ7cdMRUCtu6gfFzNwfMH0mN
Nope. Well, we’re not going to get anywhere by trying random permutations…how else could the files be arranged? Let’s try modification date:
[tkerr@pro qrcodemadness]$ ls -1tr | xargs zbarimg --raw --quiet | tr -d '\n' aC+40zqGmlLSdIJ1hY3EKoTwsrxWpkiAybPXU9Dj5veRVBHfFg6utM7QncU0NURntUaDNzM19kNG1uX1FSX2MwZDNfazMzcF9wMHAxbmdfdXB9Cg==
OK, looking good. Let’s try decoding:
[tkerr@pro qrcodemadness]$ ls -1tr | xargs zbarimg --raw --quiet | tr -d '\n' | base64 -D Invalid character in input stream.
Hmm, so it’s the right character set, but the padding’s broken. Removing one = from the end allows decoding, but outputs total garbage. Let’s try just grabbing a chunk from the end and seeing where things start to go wrong:
[tkerr@pro qrcodemadness]$ echo "ZDNfazMzcF9wMHAxbmdfdXB9Cg==" | base64 -D d3_k33p_p0p1ng_up}
OK, that’s clearly the end of a flag, so it looks like we just need to start at a specific point midstream. I quickly check what the flag format (SCTF) looks like in base64 (U0NUR), and sure enough that’s present midway through the stream.
Here’s the final one-liner:
[tkerr@pro qrcodemadness]$ ls -1tr | tail -n 56 | xargs zbarimg --raw --quiet | tr -d '\n' | base64 -D SCTF{Th3s3_d4mn_QR_c0d3_k33p_p0p1ng_up}
Ne0Lux-C1Ph3r
2017-06-01 — 19:04
Hello,
I had found this:
HfFg6utM7QncaC+40zqGmlLSdI1hY3EKoTwsrxWpkiAybPXU9Dj5veRVBJU0NURntUaDNzM19kNG1uX1FSX2MwZDNfazMzcF9wMHAxbmdfdXB9Cg==
n9Jwev5jD9UXPbyAikpWxrswToKE3Yh1IdSLlmGqz04+CacnQ7Mtu6gFfHU0NURntUaDNzM19kNG1uX1FSX2MwZDNfazMzcF9wMHAxbmdfdXB9Cg==
But I hadn’t thought of doing it the way you did. So I didn’t find the solution.
Good game
Best regards
Ne0Lux-C1Ph3r
2019-09-25 — 07:51
Hello,
And yes, I should have compared the two chains to see that the end was the same!!!
Thanks.