Introduction#
In the last level, we learned to find files that were intentionally hidden from view. Now, in Bandit Level 4 to 5, the challenge is different. The password file isn’t hidden, but it’s lost in a crowd of other files that are unreadable to humans.
This level teaches us a critical skill: how to programmatically identify the type of data a file contains, allowing us to quickly find the needle in the haystack.
The Challenge: Level 4 Goal#
The official goal on the OverTheWire website states:
The password for the next level is stored in the only human-readable file in the inhere directory.
The key phrase here is “human-readable.” We need a tool that can tell us which file is plain text and which ones are binary data.
Step-by-Step Walkthrough#
Let’s dive in and analyze these files.
Step 1: Log into bandit4#
Use the password you found in the .hidden file from the previous level to SSH into bandit4.
ssh bandit4@bandit.labs.overthewire.org -p 2220Step 2: Investigate the inhere Directory#
First, cd into the inhere directory as instructed.
cd inhereNow, list its contents.
lsYou’ll see a list of ten files, all with similar names.
-file00 -file02 -file04 -file06 -file08
-file01 -file03 -file05 -file07 -file09Step 3: The Problem of Trial and Error#
You could try to cat each file one by one, but you’ll quickly run into a problem. Most of the files contain binary data, and trying to print them to your terminal will result in a mess of garbled characters and might even cause your terminal to behave strangely.
cat ./-file00
# ^<83>^C^C^@^B^@^ ... (gibberish output)We need a smarter approach.
Step 4: The Solution - The file Command#
The perfect tool for this job is the file command. It examines a file’s contents and tells you what type of file it is. We can use a wildcard (*) to run the command on all the files in the directory at once.
file ./*This command will produce a clean, informative list.
-file00: data
-file01: data
-file02: data
-file03: data
-file04: data
-file05: data
-file06: data
-file07: ASCII text
-file08: data
-file09: dataThe output clearly shows that -file07 is “ASCII text,” which is the human-readable file we’re looking for!
Step 5: Retrieve the Password#
Now that we have identified the correct file, we can safely use cat to read its contents. Since the filename starts with a hyphen, it’s best practice to use the ./ prefix.
cat ./-file07This will print the password for bandit5.
# yours might be different
4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQwKey Concepts Learned#
- File Content Analysis: We learned that you cannot rely on filenames or extensions to know what a file contains. The
filecommand inspects the actual data to make a determination. - ASCII vs. Binary Data: This level provides a practical example of the difference between human-readable text (ASCII) and machine-readable data (binary).
- Shell Wildcards (
*): The asterisk is a powerful tool for applying a command to multiple files at once, saving significant time and effort.
Conclusion#
You’ve successfully sifted through a directory of miscellaneous data to find the one piece of useful information. The file command is an indispensable utility in cybersecurity and system administration for quickly understanding the contents of a filesystem.
Save the password and get ready for Level 5!