Skip to main content

Command Palette

Search for a command to run...

Ninja Skills: My First Real Linux CTF

Updated
4 min read

I did the Ninja Skills room right after finishing the Linux Fundamentals modules on TryHackMe, parts one, two, and three. It felt like the natural next step. I had just settled on cybersecurity as the direction I actually wanted to go, and I wanted something that would put the fundamentals to use instead of leaving them sitting as theory.

Ninja Skills is marked as easy. I went in expecting that label to mean something close to a breeze. It did not, not entirely, and honestly that turned out to be the fun part. A few of the tasks touched on ideas I hadn't run into yet, which meant I had to actually think rather than just recall something I'd already seen in a module.

The first task asked me to find which files were owned by a specific group, best group. I knew, or thought I knew, exactly the command I needed. Something built around find, searching from root, matching a list of filenames, and filtering out permission errors so the output stayed readable. I typed it out, ran it, and got nothing useful back. Tried again. Same result. I went back over the command three or four times, convinced the logic itself was wrong, getting more frustrated with every attempt that failed for no reason I could see.

It turned out the logic was fine the whole time. I had simply left out a space between the closing parenthesis of my name conditions and the start of the redirect that filters errors to dev null. Bash reads that as one broken token instead of two separate pieces, and quietly refuses to do what you meant. One missing space, several minutes of frustration, and a small but useful lesson early on: when a command looks right and still fails, check the syntax at the character level before you start doubting the approach itself.

The next two tasks were a different kind of difficult. I had no real starting point for either one.

One task asked me to find a file containing a specific IP address. I knew grep was the tool for the job, since that part was obvious from the fundamentals modules. What I didn't know was the actual pattern to search for, since IP addresses have a fairly specific shape if you're trying to match them properly rather than just guessing at plain text. The other task asked me to find a file matching a particular hash, which meant I needed a way to calculate hashes for files on the system and compare them, something I hadn't done hands on before that point.

For both of these I did what I think more people starting out should feel comfortable doing. I went and read up on the actual concepts first, what an IP pattern looks like when you're trying to match it with grep, how hash comparison actually works at the command line, rather than jumping straight to asking an AI tool for the finished command. Once I understood the shape of the problem, I used AI to help me refine the exact syntax once I already knew what I was building toward. That distinction mattered to me. I wanted to understand why a command worked, not just have one handed to me.

Once those two clicked, something shifted. The remaining three tasks went noticeably faster. Not because they were easier in isolation, but because by that point I had a working mental model of how to approach an unfamiliar Linux problem. Look at what's actually being asked, identify which tool fits, check the syntax carefully, and don't assume failure means the whole approach is wrong before checking the small stuff first.

Ninja Skills didn't teach me anything especially advanced. What it gave me instead was a small, repeatable process for getting unstuck, which has turned out to matter a lot more than any single command I memorized that day.