Skip to main content

Passphrase - Cyberapocalypse 2021 CTF

· 2 min read

This is a writeup for the Passphrase challenge, part of the Hack the box's Cyberapocalypse CTF 2021, category Reverse.

Prompt​

You found one of their space suits forgotten in a room. You wear it, but before you go away, a guard stops you and asks some questions.

Recon​

We get a binary executable passphrase. Running file on it, we see that it's not stripped, so we might get some symbols and good things out of it.

file passphrase
passphrase: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=60f6b6064d2e34a2b6a24dda9feb943b0b8c360f, not stripped

Running strings on it we don't see much, but we notice that we will probably have to deal with strcmp, which is good.

Solution​

So, let's just run the executable using ltrace, and see where that leads us.

ltrace ./passphrase
[omitted for brevity]
usleep(30000) = <void>
strlen("\nTell me the secret passphrase: "...) = 32
sleep(1) = 0
fgets(

So far, so good - it asks us for input using fgets. Let's supply it something random.

fgets(asd
"asd\n", 40, 0x7fbc87c48a00) = 0x7ffe594faca0
strlen("asd\n") = 4
strcmp("3xtr4t3rR3stR14L5_VS_hum4n5", "asd") = -46
printf("\033[31m") = 5
strlen("\nIntruder alert! \360\237\232\250\n") = 22
putchar(10, 0x7ffe594f85e0, 0x558a2ee00c17, 23
) = 10
usleep(30000) = <void>
[omitted for brevity]

Well, this was easy! It directly tells us that it compares the input string to 3xtr4t3rR3stR14L5_VS_hum4n5.To make sure, we run the binary again, and supply it that passphrase.

./passphrase 

Halt! ⛔
You do not look familiar..
Tell me the secret passphrase: 3xtr4t3rR3stR14L5_VS_hum4n5
✔

Sorry for suspecting you, please transfer this important message to the chief: CHTB{3xtr4t3rR3stR14L5_VS_hum4n5}

Easy, we got our flag, and it's

CHTB{3xtr4t3rR3stR14L5_VS_hum4n5}