~$ skillshelf
← all writeups

OverTheWire Bandit

34 levels of Linux and shell fundamentals, one writeup per level.

14 writeups

  1. Bandit 0 → 1: getting a foothold

    The one where you just have to get in the door — SSH basics and reading your first file.

  2. Bandit 1 → 2: the file called -

    A filename made of one character the shell had already claimed.

  3. Bandit 2 → 3: spaces in the filename

    Whitespace is an argument separator before it's a character in a name.

  4. Bandit 3 → 4: the empty directory that isn't

    ls told me there was nothing there. ls was being polite.

  5. Bandit 4 → 5: file before cat

    Ten files, one of them readable — and a command that tells you which without printing any of them.

  6. Bandit 5 → 6: three properties, one file

    Twenty directories, one file that matches the description — and a lesson about which filter to reach for.

  7. Bandit 6 → 7: searching the whole filesystem, quietly

    The level where ls stops helping, and where 2>/dev/null finally made sense.

  8. Bandit 7 → 8: don't read the file, search it

    I cat'd a four-megabyte file into my terminal so you don't have to.

  9. Bandit 8 → 9: the line that only happens once

    A file full of passwords where the only thing marking the real one is that it isn't repeated.

  10. Bandit 9 → 10: readable text in a binary file

    Most of the file isn't text. The password is, and it's wearing a marker.

  11. Bandit 10 → 11: base64 is not a lock

    Encoded, not encrypted — and one flag undoes it.

  12. Bandit 11 → 12: rot13, and what I got wrong about it

    Every letter shifted thirteen places — plus a mistake I made reading the command.

  13. Bandit 12 → 13: the hexdump matryoshka

    Over an hour, split across a morning and an afternoon. The level that made me learn what /tmp is for.

  14. Bandit 13 → 14: the key that wouldn't open the door next to it

    An SSH key instead of a password, a localhost that refused, and an hour of finding out why scp is on the allowed list.