The Poem of Knowledge
Description
CTF: Whitehacks 2022
Author: xbowery
Difficulty: Easy
Our knowledgeable alien friend named Beale left us with a purported “Poem of Knowledge” before he went back to his universe.
He also dropped a message behind. Can you decipher what he was trying to say?
17-73-24-55-84-101-141-44-54-49-10-123-62-131-114-67-47-46-60-83-84
Note: Please wrap the flag with WH2022{...}
The flag is case-sensitive!
Poem
Solution
Pwned by @skytect
We get a text:
The Road Not TakenBy Robert Frost
Two roads diverged in a yellow wood,And sorry I could not travel bothAnd be one traveler, long I stoodAnd looked down one as far as I couldTo where it bent in the undergrowth;
Then took the other, as just as fair,And having perhaps the better claim,Because it was grassy and wanted wear;Though as for that the passing thereHad worn them really about the same,
And both that morning equally layIn leaves no step had trodden black.Oh, I kept the first for another day!Yet knowing how way leads on to way,I doubted if I should ever come back.
I shall be telling this with a sighSomewhere ages and ages hence:Two roads diverged in a wood, and I—I took the one less traveled by,And that has made all the difference.
And something that looks like a ciphertext:
17-73-24-55-84-101-141-44-54-49-10-123-62-131-114-67-47-46-60-83-84
Our knowledgeable alien friend named Beale
This gives us a hint. If we google beale crypto
, we’ll find the Beale ciphers, which use the numbers to lookup words in the text and uses the first letter of each word accordingly.
We can write a simple script to help us decode this:
import re
key = """The Road Not TakenBy Robert Frost
Two roads diverged in a yellow wood,And sorry I could not travel bothAnd be one traveler, long I stoodAnd looked down one as far as I couldTo where it bent in the undergrowth;
Then took the other, as just as fair,And having perhaps the better claim,Because it was grassy and wanted wear;Though as for that the passing thereHad worn them really about the same,
And both that morning equally layIn leaves no step had trodden black.Oh, I kept the first for another day!Yet knowing how way leads on to way,I doubted if I should ever come back.
I shall be telling this with a sighSomewhere ages and ages hence:Two roads diverged in a wood, and I—I took the one less traveled by,And that has made all the difference."""ciphertext = "17-73-24-55-84-101-141-44-54-49-10-123-62-131-114-67-47-46-60-83-84"
key = re.sub(r'[^a-zA-Z\s\n]', '', key) # remove everything that's not a letter, space, or newlinekey = re.sub(r'[\s\n]+', ' ', key) # replace multiple spaces and newlines with single spaceskey = key.split(' ')
ciphertext = [int(i) for i in ciphertext.split('-')] # 17 73 24 55 84 101 141 44 54 49 10 123 62 131 114 67 47 46 60 83 84ciphertext = [key[i-1][0] for i in ciphertext]print(''.join(ciphertext)) # WH2022{IHopeYouhadagreattime}
WH2022{IHopeYouhadagreattime}