KnightCTF 2023 - The Defuser
The Defuser: Bomb Defusal Challenge
In this challenge, the goal is to defuse a bomb within a limited timeframe. During execution, the challenge sets certain signals that will terminate the process if not defused quickly.
Execution Flow
Upon running the binary, the following sequence occurs:
1
2
3
4
5
6
7
8
9
bsdb0y@test:~/challs/knight/reverse$ ./defuser
Time is ticking...
Defuse the bomb real quick if you want to save your Imaginarica!
I bet you won't be able to save it...
Hahahahaha...
Convince me to stop the explosion:
If you fail to input the correct response within the time limit, this is what happens:
1
2
3
4
5
Hahahahaha LOSER!
The bomb has exploded.
You shouldn't have wasted your time.
Remember, every second is valuable.
Terminated
Analyzing the Binary
After inspecting both the disassembly and decompiled code, I observed the following key elements:
- Signal and alarm calls that initiate the time limit
- A critical parameter set to
0x17b447b - Specific environment variables that need to be set:
LAB_HOSTNAME=DEFUSER_PCLAB_USERNAME=FRITZ
Exploit Strategy
The key to solving this challenge lies in bypassing the signals and alarms. Using a debugger like gdb or radare2, load the binary, set the environment variables as mentioned above, and disable the alarm/signal calls.
Once you’ve done that, provide input to the program and step into the function located at address 0x2760. The function expects its first argument to be 0x17b447b. If everything is correct, the bomb will be defused, and the flag will be revealed.
GDB Example
1
[0x5610de303596]> dc
Flag
Successfully bypassing the time constraints and entering the correct input will yield the following output:
1
2
3
4
5
6
You have saved the country from destruction.
Here is your reward:
KCTF{st0p_war_spr34d_10v3_and_p34c3}
(3995) Process exited with status=0x0
By carefully analyzing the binary and skipping the signals, we were able to prevent the explosion and retrieve the flag.