Another CTF, another victory. I won the June 2019 London SecTalks CTF and it was up to me to write challenges for July.
There were 12 challenges, theme of the challenges being Hacker-Archeology. It turns out that was too much, as only 10/12 challenges got even one solve, and nobody got more than 4. Even with very generous hint drops during the event.
Challenge files and code used to generate them are available on github.
There are no answers below, but some serious hints which might make it too easy.
For previous rounds, see posts about September 2017, November 2017, May 2018, July 2018, October 2018, February 2019, and April 2019 CTFs.
SHAR (5 points)
Self-extracting Shell archive nested 8 levels deep. It only works on Linux, OSX shell can't extract Linux-created SHAR files, showing what a dumb format this is.XBM (10 points)
A weird way to encode image into C headers. While totally obsolete, a lot of tools still support it.Maya (15 points)
An image with a sequence of Maya numerals, each encoding ASCII symbols. It seems people were confused by the fact that multi-digit Maya numerals are stacked vertically.PCX (20 points)
PCX file with flag on it, but both foreground and background colors having same RGB color, so color palette would need to be adjusted to actually see it.ECB (25 points)
A signed cookie server which would only sign cookies withoutadmin=yes
, and it would only give you the flag if you sent it signed cookie with admin=yes
.It's a classic cryptography attack on ECB mode, rearranging blocks within or between cookies.
SED (30 points)
SED is an obsolete programming language for text stream processing, and the challenge was a simple flag validation script which was just a sequence of regexp replace rules.Nobody noticed that, but that SED script was also totally valid Perl 5 script.
CBC (35 points)
A signed cookie server which would only sign cookies withoutadmin=yes
, and it would only give you the flag if you sent it signed cookie with admin=yes
.It's a classic bit flipping attack on CBC.
MD4 (40 points)
A signed cookie server which would only sign cookies withoutadmin=yes
, and it would only give you the flag if you sent it signed cookie with admin=yes
.It's a classic length extension attack.
Midi (45 points)
A midi file with flag encoded in Morse code, played on an Ocarina instrument suggestively named "Morse Ocarina".It could be done either by hand, or by converting note lengths in Midi format to dots and dashes. I think everybody ended up doing it by hand.
DOS (50 points)
A very small COM file flag validator. It was extremely simple, but a lot of tooling like Ghidra has trouble with COM files, as they're too old to be relevant.It got zero solves, which was fairly surprising, as flag validator is really simple:
# Initialize counter in BX
mov bx, 0xd7ab
# Get ASCII code of next character into AL
mov ah, 0x1
int 0x21
# Add AX to the counter, check if correct
add bx, ax
cmp bx, 0xd911
jnz near 0x19d
# Repeat for next character
Differences between constants being compared are 256 + ASCII code of each letter (first being 0x166 or 256 + "
f
").Hieroglyphs (55 points)
Monoalphabetic cipher encoded into Egyptian hieroglyphs. The text was very long English text with spaces removed.It's really simple for anyone who ever did monoalphabetic cipher breaking through statistical analysis, so that many points mostly being potentially quite time consuming, but it didn't even take people that much time.
Perl 6 (60 points)
In remote past Perl 6 used to be the language of the future. That future never came.The challenge is a flag validator in Perl 6 aggressively using many unusual Perl 6 operations. I'm not really surprised that nobody succeeded at solving it.