Bandit Level 4 to 5: Finding Human-Readable Text in a Data Maze
Using the 'file' command to distinguish ASCII text from binary data and locate the password file.
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 [email protected] -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!