Phonetic Alphabet, convert to the “normal” representation and send back within 3 seconds.
Bash scripting for all these web requests was my method. I could manipulate the needed data, and handle it pretty quickly. Since all these web style programming challenges have the same page format, I can reuse it between them.
Lets break down the commands.
#!/bin/bash data=$(curl -c cookies "http://prognato.ctf.issessions.ca/" | grep -oE "data\".*" | grep -oE ">.*<" | cut -c 2- | grep -oE "[^<]+" | tr -d '\n' | sed 's/\(.\)[^ ]* */\1/g' ) curl -b cookies "http://prognato.ctf.issessions.ca/index.php?answer=$data"
curl -c cookies "http://prognato.ctf.issessions.ca/"
Curl request, save cookies to the file:
grep -oE "data\".*"
Grep, search for the line that has
data" in it, and select only that line.
-E is to enable Regex mode, and
-o is to select only the result.
grep -oE ">.*<"
Grep, select the inner contents of the HTML tags. We don’t know how many words are going to be here, so we want them all.
cut -c 2- | grep -oE "[^<]+"
I’ve tied these two together, because they both remove the angle brackets from each end,
cut -c 2- removes the right, and
grep -oE "[^<]+" selects every character except
tr -d '\n'
This one is a painful point - I kept troubleshooting it and it wasn’t working the way I wanted. Turns out grep prints a newline with its output. Rookie mistake. This deletes the newline.
sed 's/\(.\)[^ ]* */\1/g'
REGEX for the win!
Let’s break this one down a bit more.
's/\(.\)[^ ]* */\1/g' is the sed syntax to find and replace using PCRE (Perl Compatible Regular Expressions). The regex does the following:
\(.\)[^ ]* *: Select any character set that does not contain a space, aka, a “word”, and the following space. There’s a faster way to select a word, via
\w, but make special note of
\(.\). This is group syntax. It means that you can refer to it later on, which will be important.
\1: Replace what was found, with the first group match. In this case, the first group match was the first character of the word. Since NATO/phonetic alphabet relies on the first letter of the word as the intended word, This will leave the character, and nothing else from the word.