Skip to main content

Band IT

Суть: Логинимся на сервер. Задача — найти пароль для следующего уровня (bandit1). В Linux всё есть файл. Пароль спрятан в файле с названием readme, который лежит в домашней директории.

    ssh bandit1@bandit.labs.overthewire.org -p 2220

Инструментарий:

    ls — (list) посмотреть список файлов в текущей папке.
    cat — (concatenate) вывести содержимое файла на экран.
    pwd — (print working directory) узнать, в какой ты сейчас папке.

Решение:

После входа на уровень 0 проверь, что там лежит:

    ls # Видим файл readme.
 
    cat readme # Читаем его содержимое:

🏁 Результат: ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If . Это флаг для следующего уровня.

Этот уровень учит работать с файлами, чьи имена содержат спецсимволы. В Linux символ - часто интерпретируется командами как начало флага (опции), а не имя файла.

Суть: Пароль лежит в файле с названием - (дефис) в домашней директории. Если ты просто напишешь cat -, система будет ждать ввода от тебя (stdin), а не читать файл.

Инструментарий:

Относительный путь:
Использование `./` указывает системе, что файл нужно искать именно в текущей папке.

Перенаправление ввода: 
Использование `<` для передачи содержимого файла в команду.

Решение: Есть два основных способа «обмануть» интерпретатор:

Указать путь явно:


    cat ./-

    Здесь ./ говорит: «ищи файл в этой директории, это не опция команды».

Использовать перенаправление:

    cat < -

DevSecOps Tip: В реальной работе ты встретишь файлы с пробелами, кавычками и прочей дичью в названиях. Всегда используй автодополнение (клавиша Tab). Если нажмешь cat и начнешь вводить имя, нажав Tab, Linux сам подставит нужные знаки экранирования.

🏁 Результат: 263JGJPfgU6LtdEvgfWU1XP5yac29mFx

Суть: Пароль лежит в файле под названием --spaces in this filename--. Если ты напишешь cat spaces in this filename, система попытается открыть файл spaces, потом файл in и так далее.

Инструментарий:

    1. Самый надежный метод через относительный путь:
Это универсальное решение для любых странных имен файлов. Указывая ./, ты принудительно говоришь системе: «это путь к файлу, а не команда».

cat "./--spaces in this filename--" # через относительный путь

cat ./--spaces\ in\ this\ filename-- # экранируя пробелы

cat -- '--spaces in this filename--' #  Через разделитель параметров --:
Во многих утилитах Linux двойной дефис -- означает «стоп, дальше опций не будет, только имена файлов».

DevSecOps Tip: На чемпионате никогда не пиши длинные имена вручную. Ошибешься в одном символе — потеряешь время. Всегда жми Tab. Если файл один, он подставится сразу. Если несколько — Tab покажет варианты.

🏁 Результат: MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

Скрытые файлы. Пароль находится в директории inhere, но когда ты туда зайдешь и введешь ls, ты ничего не увидишь.

Инструментарий:

    ls -a — флаг -a (all) позволяет увидеть скрытые файлы (те, что начинаются с точки .).
    cd — (change directory) переход в папку.

Решение:

    
Зайди в папку: cd inhere
Попробуй обычный ls (пусто).
Введи:

    ls -a

Ты увидишь файл с именем типа ...Hiding-From-You . Прочитай его:


    cat ...Hiding-From-You 

DevSecOps Tip:

В реальных системах злоумышленники и администраторы часто прячут конфиги или бэкдоры в скрытых файлах и директориях (например, .ssh, ._history, .aws/credentials). В любой непонятной папке всегда делай ls -la, чтобы видеть права доступа и скрытое содержимое.

🏁 Результат: 2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ

Этот уровень учит критически важному навыку: определению типа данных. В ИБ ты часто будешь встречать бинарные файлы, дампы и логи. Пытаться прочитать cat-ом всё подряд — плохая идея (можно сломать вывод терминала).

Суть:

В папке inhere лежит много файлов, но только один из них содержит текст, который может прочитать человек (human-readable). Все остальные — бинарный “мусор”.

Инструментарий:

    file — мощнейшая команда, которая анализирует заголовок файла и говорит, что это (текст, исполняемый файл, архив и т.д.).

    * (wildcard) — символ подстановки, заменяющий "все файлы".

Решение:

    Перейди в нужную директорию:

    cd inhere

    Проверь типы всех файлов сразу:
    

    file ./*
Ты увидишь список файлов -file00, -file01 и т.д. Большинство будет помечено как data. Тебе нужен тот, где написано ASCII text.
Прочитай его, используя уже знакомый трюк с путем:

cat ./-file07

DevSecOps Tip:

Когда анализируешь неизвестный сервер, команда file — твой первый шаг. Никогда не доверяй расширению файла (злоумышленник может назвать скрипт image.jpg). Всегда проверяй реальное содержимое.

Если файлов сотни, можно автоматизировать поиск:

file ./* | grep "text"

Конвейер (Pipe) и grep. Именно здесь начинается настоящая автоматизация.

  1. Конвейер (символ |) В Linux это способ передать вывод одной команды на вход другой. Вместо того чтобы выводить текст на экран, ты направляешь его дальше по цепочке.

  2. Команда grep grep (Global Regular Expression Print) — это мощнейший поисковик внутри текста. Он просматривает входящие данные и оставляет только те строки, в которых есть искомое слово. Разбор твоей команды: file ./* | grep “text”

    file ./*: Команда анализирует все файлы в текущей папке. Вывод выглядит примерно так:

     ./-file00: data
     ./-file01: data
     ./-file07: ASCII text
     ./-file09: data
    

    |: Берет весь этот список и, не показывая тебе, передает его следующей команде. grep “text”: Ищет во всем этом списке слово “text”. Итог: На экране останется только одна строка: ./-file07: ASCII text

С помощью конвейера ты можешь:

Найти подозрительные процессы: ps aux | grep "root"
Найти ошибки в огромном логе: cat access.log | grep "404"
Найти открытые порты: netstat -tulpn | grep "LISTEN"

🏁 Результат 4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw

Навык поиска объектов в файловой системе - нужно найти конкретный конфиг или ключ среди тысяч папок.

Суть: Пароль спрятан где-то в директории inhere. Даны три характеристики цели:

Это текстовый файл (human-readable).
Его размер ровно 1033 байта.
Он не является исполняемым (not executable).

Инструментарий:

find — швейцарский нож для поиска файлов. Она умеет фильтровать по размеру, владельцу, правам и времени изменения.

Решение:

Зайди в папку: cd inhere
Используй find со всеми условиями:

find . -type f -size 1033c ! -executable

Разбор команды:
    . — искать в текущей папке и всех подпапках.
    -type f — искать именно файл (не папку).
    -size 1033c — размер ровно 1033 байта (c — это characters/bytes).
    ! -executable — ! означает "не", то есть файл не должен быть исполняемым.
Команда выдаст путь: ./maybehere07/.file2.

Прочитай его: cat ./maybehere07/.file2

DevSecOps Tip: В реальной жизни команда find незаменима для поиска уязвимостей. Например, найти все файлы, доступные на запись всем подряд (find / -perm -0002), или найти файлы с установленным SUID-битом, который позволяет повысить привилегии.

Если ты хочешь сразу прочитать найденный файл, не копируя путь, можно использовать “магию” перенаправления:

cat $(find . -type f -size 1033c ! -executable)

Здесь $() сначала выполняет поиск, а потом подставляет 🏁 Результат в команду cat.

🏁 Результат: HWasnPhtq9AVKe0dmk45nxy20cvUa6EG

Суть: Пароль находится в файле, который:

Принадлежит пользователю bandit7.
Принадлежит группе bandit6.
Имеет размер 33 байта.

Инструментарий:

find / — поиск от корня всей файловой системы.
-user — фильтр по владельцу.
-group — фильтр по группе.
2>/dev/null — критически важный прием для скрытия ошибок доступа.

Решение: Если ты просто запустишь поиск от корня, терминал завалит тебя сообщениями “Permission denied” (отказано в доступе), так как у пользователя bandit6 нет прав заглядывать во многие системные папки. Чтобы увидеть только нужный 🏁 Результат, используй перенаправление ошибок:

find / -user bandit7 -group bandit6 -size 33c 2>/dev/null

Разбор магии 2>/dev/null:

В Linux есть три потока: 0 (ввод), 1 (стандартный вывод/успех), 2 (ошибки).
> — перенаправляет поток.
/dev/null — это "черная дыра" Linux. Все, что туда попадает, исчезает навсегда.
Этим мы говорим: "Все ошибки (поток 2) отправь в мусорку, покажи мне только то, что удалось найти".

DevSecOps Tip: На чемпионате умение фильтровать “шум” (лишние логи, ошибки доступа) экономит кучу нервов. Сочетание find и 2>/dev/null — это стандарт де-факто при аудите системы на предмет забытых ключей или конфигов. 🏁 Результат: Команда выдаст путь к файлу (скорее всего, где-то в /var/lib/dpkg/…). Прочитай его через cat и забирай пароль. Или так cat $(find / -user bandit7 -group bandit6 -size 33c 2>/dev/null)

🏁 Результат: morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

Суть: Пароль находится в файле data.txt рядом со словом millionth. Файл огромный, читать его вручную cat-ом — верный способ проиграть чемпионат по времени. Инструментарий:

grep — наш главный поисковик.

Решение: Тебе нужно приказать grep найти строку, содержащую ключевое слово:

grep “millionth” data.txt

Разбор:

grep — команда поиска.
"millionth" — что ищем.
data.txt — где ищем.

На экране появится строка вида: millionth w0tTh3Fukk… — вторая часть и есть твой пароль.

DevSecOps Tip:

В реальных задачах (например, анализ логов веб-сервера Nginx или Apache) тебе часто нужно будет искать не просто слово, а контекст.

Если хочешь увидеть 3 строки после найденного слова: grep -A 3 "слово" file
Если хочешь увидеть 3 строки до: grep -B 3 "слово" file
Это помогает понять, что именно привело к ошибке или взлому.

То же, используя конвейер: cat data.txt | grep “millionth”.

🏁 Результат: dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc

В DevSecOps это жизненно важный навык, когда нужно вычленить одну уникальную ошибку из тысяч одинаковых записей в логах или найти аномальный сетевой запрос.

Суть: В файле data.txt огромное количество строк. Пароль — это единственная строка, которая встречается в файле ровно один раз. Все остальные строки повторяются многократно.

Инструментарий:

sort — сортирует строки по алфавиту. Это обязательный шаг перед поиском дубликатов.

uniq — команда для работы с повторяющимися строками.
    Флаг -u (unique) — показывает только те строки, которые не имеют дубликатов.

Решение: Если ты просто запустишь uniq -u data.txt, это не сработает, так как uniq сравнивает только соседние строки. Поэтому сначала их нужно отсортировать:

sort data.txt | uniq -u

Разбор конвейера:

sort data.txt — выстраивает все одинаковые строки друг за другом.
| — передает этот отсортированный список дальше.
uniq -u — выкидывает всё, что повторяется, и оставляет ту самую единственную строку.

DevSecOps Tip: Команда uniq с флагом -c (count) — твой лучший друг при анализе DDoS-атак. Например: cat access.log | cut -d’ ’ -f1 | sort | uniq -c | sort -nr Эта команда покажет список IP-адресов, с которых пришло больше всего запросов, отсортированный от самых активных к менее активным.

Пример для разбора:

Представь строку из access.log:
192.168.1.1 - - [20/Feb/2026:12:00:01] "GET /login HTTP/1.1" 200...
Разбор конвейера по шагам:

    cat access.log
    Просто вываливает всё содержимое файла в конвейер.
    cut -d' ' -f1 (Вырезание данных)
        -d' ' — (delimiter) говорит: «считай пробел разделителем колонок».
        -f1 — (field 1) говорит: «возьми только первую колонку».
        Итог: Из всей строки лога остается только IP-адрес: 192.168.1.1.
    sort (Сортировка)
    Как мы уже выяснили в Bandit 8, команда uniq работает только с идущими подряд строками. Поэтому мы собираем все одинаковые IP в кучу.
    uniq -c (Подсчет)
        -c — (count) не просто удаляет дубликаты, а считает, сколько раз встретилась каждая строка.
        Вывод будет таким:

        15 192.168.1.1
        2  127.0.0.1
        140 45.67.89.12  <-- Опа, подозрительно много запросов!

    sort -nr (Финальная сортировка)
        -n — (numeric) сортировать как числа (чтобы 10 было больше 2, а не наоборот).
        -r — (reverse) в обратном порядке (самые большие числа сверху).

Зачем это тебе на чемпионате?
Если тебе дадут файл с данными о сетевом трафике или лог авторизаций, эта комбинация мгновенно покажет:

    Кто брутфорсит: IP с самым большим количеством попыток входа.
    Самые частые ошибки: Какие страницы сайта отдают 404 чаще всего.
    Аномалии: Какие юзер-агенты (браузеры) чаще всего обращаются к серверу (скрипты часто палятся на странных именах).

🏁 Результат: 4CKMh1JI91bUIZZPXDqGanal4xvAg0JM

Девятый уровень - это «реверс-инжиниринг» текстовых данных из бинарных файлов. В ИБ это постоянно нужно при анализе вредоносного ПО, когда нужно вытащить из экзешника IP-адреса управляющих серверов или скрытые сообщения.

Суть: Файл data.txt — это бинарный файл (data). Если ты сделаешь просто cat, терминал «сойдет с ума» от спецсимволов. Пароль находится где-то внутри, и он идет после нескольких символов =.

Инструментарий:

strings — команда, которая игнорирует бинарный мусор и выводит только цепочки печатных символов (минимум 4 символа подряд). Это стандарт для поиска ключей в скомпилированных программах.
grep — для фильтрации вывода.

Решение:

Нужно вытащить все строки из файла и найти среди них те, что содержат знаки равенства:

strings data.txt | grep “==”

Разбор:

strings data.txt — превращает кучу непонятных байтов в список читаемых слов и строк.
| — передает этот список в grep.
grep "==" — оставляет только те строки, где есть знаки =.

🏁 Результат: FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey Ты увидишь несколько строк, одна из которых будет выглядеть как

========== the ========== password f\Z’========== is ========== FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey

DevSecOps Tip: На чемпионате, если тебе дадут подозрительный файл без расширения, твоя последовательность действий должна быть такой:

file имя_файла — узнать, что это вообще такое.
strings имя_файла — посмотреть, нет ли там внутри паролей, путей к файлам или API-ключей.
И только потом запускать его (в песочнице!), если это исполняемый файл.

Base64 — это стандарт де-факто для передачи бинарных данных в текстовых протоколах (HTTP, SMTP, JSON). В DevSecOps ты будешь встречать его постоянно: в секретах Kubernetes, конфигах Docker и JWT-токенах.

Суть: Пароль в файле data.txt закодирован (не зашифрован, а именно закодирован) в формате Base64. Нам нужно вернуть его в читаемый вид. Инструментарий:

base64 — утилита для кодирования и декодирования.
Флаг -d (decode) — говорит утилите, что данные нужно расшифровать, а не зашифровать.

Решение: Вводи команду:

base64 -d data.txt

Или, если хочешь через конвейер (стиль профи):

cat data.txt | base64 -d

🏁 Результат: dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr

DevSecOps Tip: Как узнать Base64 в реальном бою?

Символы только: A-Z, a-z, 0-9, +, /.
В конце часто стоят знаки равенства == или = (это называется padding — выравнивание длины).
Если видишь такое в конфиге Kubernetes Secrets, сразу применяй base64 -d.

Здесь мы сталкиваемся с шифром ROT13 (Rotate by 13 places). Это частный случай шифра Цезаря.

Суть: В файле data.txt все буквы (строчные и заглавные) сдвинуты на 13 позиций по алфавиту.

A превратилась в N, B в O и так далее.
Поскольку в латинском алфавите 26 букв, повторное применение ROT13 возвращает текст в исходное состояние (
).

Инструментарий:

tr (translate) — команда для замены или удаления символов. Она идеально подходит для создания фильтров подстановки.

Решение: Нам нужно сказать системе: «Возьми стандартный алфавит и замени его на алфавит, который начинается с 14-й буквы».

cat data.txt | tr ‘A-Za-z’ ‘N-ZA-Mn-za-m’

Разбор команды tr:

'A-Za-z' — это входящий набор (весь алфавит, большие и маленькие буквы).
'N-ZA-Mn-za-m' — это набор для замены.
    N-Z — первая часть (буквы с 14-й по 26-ю).
    A-M — "хвост", который зацикливает алфавит.
Команда берет каждый символ из первого набора и меняет его на соответствующий из второго.

DevSecOps Tip: Шифр ROT13 — это не защита, это обфускация (запутывание). В реальном мире он часто используется для скрытия вредоносных ссылок в скриптах или почтовом спаме, чтобы обмануть простейшие антивирусные фильтры. Если видишь в коде непонятную абракадабру, которая выглядит как английский текст, но не читается — попробуй tr. 🏁 Результат: 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4.

Суть: Пароль спрятан в файле data.txt, который представляет собой Hex-дамп (текстовое представление двоичных данных). Этот дамп был многократно сжат разными методами (gzip, bzip2, tar). Твоя стратегия:

Превратить Hex-дамп обратно в бинарный файл.
Постоянно проверять тип файла командой file.
Распаковывать, пока не доберешься до текста.

Инструментарий:

xxd -r — (reverse) превращает шестнадцатеричный дамп обратно в бинарник.
mkdir /tmp/myname — создаем свою рабочую папку (в домашней директории bandit12 писать нельзя).
cp, mv — копирование и переименование.
gzip -d, bzip2 -d, tar -xf — инструменты распаковки.

Пошаговый алгоритм:

Подготовка:


mkdir /tmp/devsecops_lab
cp data.txt /tmp/devsecops_lab/
cd /tmp/devsecops_lab

Реверс дампа:


xxd -r data.txt > data.bin

Цикл распаковки (Матрешка):
Теперь на каждом шаге пиши file data.bin (или как ты его назвал) и смотри, что это:
    Если gzip: 
    mv data.bin data.gz && gunzip data.gz (получишь файл data).
    Если bzip2: 
    bzip2 -d data.bin (получишь data.bin.out).
    Если tar: 
    tar -xf data.bin (извлечет файл внутри).

Важный совет: После каждой распаковки файл будет менять тип. Снова делай

file [новое_имя]

и повторяй процедуру. Тебе придется сделать это раз 5-7.

DevSecOps Tip: В реальном мире вредоносное ПО часто упаковывают в несколько слоев (например, UPX -> zip -> base64), чтобы антивирусы не смогли просканировать сигнатуры внутри. Умение быстро определять тип файла по его заголовку (magic bytes) через file — база для аналитика. 🏁 Результат: FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn

В самом конце, когда file скажет ASCII text, просто сделай cat. Готов к марафону распаковки? Как закончишь, пиши — на 13 уровне мы наконец-то поработаем с SSH-ключами (Private Keys), это основа безопасности серверов.

🛡️ Концепция: Passwordless Auth В современной инфраструктуре пароли — это моветон и риск. Вместо них используются SSH-ключи.

Public Key (замок) — лежит на сервере.
Private Key (ключ) — хранится у тебя.

Твоя задача: Использовать найденный приватный ключ sshkey.private, чтобы авторизоваться как bandit14. 🛠 Инструментарий

ssh -i: Флаг для указания файла идентификации (Identity File).
chmod 600: Маст-хэв для защиты ключа.
-v: Режим дебага (когда всё идет не по плану).

🚀 Решение (The Right Way)

  1. Подготовка ключа на локальной машине Если ты скачал ключ к себе, SSH откажется с ним работать, если права слишком «разболтаны»:

chmod 600 bandit.key

Без этого ты получишь ошибку и запрос пароля.

  1. Маневр с алгоритмами (для новых систем) Современные клиенты (OpenSSH 8.8+) отключают старый алгоритм ssh-rsa по умолчанию. Если сервер Bandit его требует, используй «секретный соус»:

ssh -i ./bandit.key -o PubkeyAcceptedAlgorithms=+ssh-rsa bandit14@bandit.labs.overthewire.org -p 2220

  1. Обход сетевых затыков Если домен капризничает, стучись напрямую по IP :

ssh -i ./bandit.key bandit14@51.21.210.216 -p 2220

  1. Финальный рывок (внутри сервера) Как только залогинился под bandit14, забирай свой трофей:

cat /etc/bandit_pass/bandit14 - MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS

💡 DevSecOps Pro-Tips

Strict Modes: SSH — параноик. Если папка .ssh или сам ключ доступны кому-то еще (group write или others read), авторизация будет сброшена. Rule of thumb: chmod 700 ~/.ssh и chmod 600 ~/.ssh/*.
Fingerprint Match: При первом подключении всегда проверяй Fingerprint. В реальной жизни это защищает от MitM (Man-in-the-Middle) атак.
SSH Agent: Чтобы не вводить путь к ключу каждый раз, используй ssh-add ./bandit.key. После этого можно заходить просто через ssh bandit14@....

🏁 Результат Диагностика (The Debug Phase):

Запустили SSH с флагом -v (verbose).
Выяснили, что клиент видит ключ, но не может его использовать: identity file ./bandit.key type -1.

Исправление прав доступа (The Permission Fix):

Применили chmod 600 ./bandit.key.
Зачем: SSH игнорирует приватные ключи, если они доступны для чтения другим пользователям системы (безопасность превыше всего).

Борьба с алгоритмами (The Compatibility Layer):

Добавили флаг -o PubkeyAcceptedAlgorithms=+ssh-rsa.
Зачем: Твой современный SSH-клиент (9.6) считает старые RSA-ключи небезопасными, и их нужно разрешать принудительно.

Обход сетевых проблем (The Infrastructure Bypass):

Заменили доменное имя bandit.labs.overthewire.org на прямой IP 51.21.210.216.
Зачем: Это помогло исключить проблемы с DNS и старыми записями в твоем файле known_hosts, которые могли блокировать соединение.

Финальная авторизация (The Landing):

Успешно зашли под пользователем bandit14 без ввода пароля, используя только файл ключа.

🛡️ Концепция: Network Sockets & Services Представь, что сервер — это огромный бизнес-центр.

IP-адрес — это адрес здания.
Порты — это номера офисов внутри.
В офисе №22 (SSH) мы уже побывали. Теперь нам нужно заглянуть в офис №30000, где сидит «секретарь», выдающий пароли. Но он выдает их только тем, кто предъявит «пропуск» (текущий пароль уровня 14).

🛠 Инструментарий

cat: Читает файл (наш пропуск).
nc (Netcat): «Швейцарский нож» сетевого инженера. Позволяет устанавливать прямые TCP/UDP соединения.
localhost: Обращение к самому себе (текущему серверу).

🚀 Решение (Step-by-Step)

  1. Достаем «пропуск» Находясь под пользователем bandit14, мы имеем доступ к своему паролю. Проверим его:

cat /etc/bandit_pass/bandit14

  1. Стучимся в «офис 30000» Нам нужно отправить этот текст на порт 30000. Самый быстрый способ — через конвейер (pipe):

cat /etc/bandit_pass/bandit14 | nc localhost 30000

  1. Что происходит «под капотом»?

    cat выводит строку пароля. | (pipe) перехватывает этот вывод и передает его следующей команде. nc localhost 30000 открывает дверь в «офис 30000» и «вбрасывает» туда наш пароль. Служба на том конце проверяет пароль и тут же выплевывает в ответ пароль для bandit15.

💡 DevSecOps Pro-Tips

Проверка портов: Если ты не знаешь, какие порты открыты на сервере, профи используют nmap или ss -tlpn. Это помогает понять, какие службы запущены в системе.
Netcat vs Telnet: Раньше использовали telnet, но nc (Netcat) гораздо круче, так как умеет работать со скриптами, передавать файлы и даже создавать бэкдоры (в учебных целях!).
Localhost Security: Многие сервисы (например, базы данных Redis или Memcached) часто настроены так, чтобы принимать соединения только с localhost. Это защищает их от внешних атак из интернета, но оставляет доступными для тех, кто уже пробрался на сервер.

🏁 Результат 8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo

🛡️ Концепция: Encrypted Communication (SSL/TLS) Если на прошлом уровне мы заходили в «открытый офис», то теперь дверь бронированная. В реальном мире передавать пароли в открытом виде (через обычный nc) — это подарок для хакера, который «слушает» трафик. Поэтому на уровне 15 данные нужно передавать через SSL/TLS туннель. Это как если бы ты не просто крикнул пароль в коридоре, а положил его в сейф, который открывается только внутри нужного кабинета. 🛠 Инструментарий

openssl s_client: Утилита для работы с зашифрованными соединениями.
-connect: Флаг, указывающий цель (хост:порт).
-ign_eof: Маленькая хитрость, чтобы соединение не закрылось сразу после отправки пароля, давая серверу время ответить.

🚀 Решение (Step-by-Step)

Инициируем защищенный канал
Нам нужно подключиться к порту 30001 на localhost. Обычный Netcat тут не поможет — он не умеет «договариваться» о шифровании. Используем OpenSSL:


openssl s_client -connect localhost:30001

Проверка «рукопожатия» (Handshake)
Экран заполнится технической информацией о сертификатах. Когда увидишь, что ввод замер (соединение установлено), просто вставь пароль от bandit15.
Ленивый (Pro) вариант
Сделаем всё одной элегантной командой, как в прошлый раз:


cat /etc/bandit_pass/bandit15 | openssl s_client -connect localhost:30001 -quiet

Флаг -quiet уберет лишний лог сертификатов, оставив только суть.

💡 DevSecOps Pro-Tips

SSL vs TLS: Хотя мы используем команду openssl, протокол SSL давно устарел и считается небезопасным. Сегодня везде используется TLS (Transport Layer Security), но название «SSL» приклеилось как «Ксерокс» к копирам.
Man-in-the-Middle (MitM): Шифрование защищает от перехвата, но не гарантирует, что на том конце именно тот, за кого себя выдает. Для этого существуют сертификаты (те самые строки, что вылетают в консоль). В реальном бою всегда проверяй отпечаток (fingerprint) сертификата.

🏁 Результат kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

🛡️ Концепция: Port Scanning & Service Discovery Если раньше нам вежливо говорили, в какую «дверь» (порт) стучаться, то теперь перед нами стена из тысячи дверей (порты 31000–32000). Нам нужно провести разведку, найти ту самую дверь, которая не просто открыта, но и защищена SSL, а затем «скормить» ей текущий пароль. 🛠 Инструментарий

nmap: Мощнейший сканер сети. Позволяет узнать, какие порты открыты и что за службы на них крутятся.
SSL/TLS: Тот же метод связи, что и на прошлом уровне.
Private Key: В этот раз наградой будет не текстовая строка, а секретный RSA-ключ для SSH-входа.

🚀 Решение (Step-by-Step)

Разведка (Сканирование)
Находясь на сервере под пользователем bandit16, просканируем диапазон портов:


nmap -p 31000-32000 localhost

Ты увидишь список из нескольких открытых портов. Но какой из них наш? Уточнение (Service Detection) Добавим флаг -sV, чтобы nmap попытался определить, где висит SSL-служба:

nmap -sV -p 31000-32000 localhost

Ищи порт, напротив которого написано echo и упоминается ssl. Обычно это 31790. Взлом (Передача пароля) Подключаемся через знакомый openssl к найденному порту и отправляем пароль от 16 уровня:

cat /etc/bandit_pass/bandit16 | openssl s_client -connect localhost:31790 -quiet

Захват ключа В ответ сервер пришлет многострочный текст, начинающийся с —–BEGIN RSA PRIVATE KEY—–. Это твой «золотой билет» в Level 17.

💡 DevSecOps Pro-Tips

SSH Keys vs Passwords: Начиная с этого уровня, игра переходит от простых паролей к аутентификации по ключам. Это стандарт безопасности в реальном мире.
chmod 600: Если ты сохранишь этот ключ в файл, чтобы зайти под bandit17, система выдаст ошибку "Permissions too open". SSH требует, чтобы файл ключа был виден только владельцу. Команда chmod 600 your_key_file исправляет это.

🏁 Результат Сохрани полученный RSA-ключ в файл /tmp/bandit17.key. Он понадобится для входа: ssh -i /tmp/bandit17.key bandit17@localhost -p 2220

🛡️ Концепция: Data Integrity & Key Authentication Представь, что у тебя есть старый чертеж здания (passwords.old) и новый (passwords.new). Тебе сказали: «Твой секретный код — это единственная деталь, которую мы изменили». Искать глазами в тысяче строк — безумие. Для этого есть diff. А чтобы попасть в архив, тебе дали не пароль, а физический ключ (RSA Private Key), который нужно правильно хранить. 🛠 Инструментарий

SSH -i (Identity File): Флаг для входа по ключу вместо пароля.
chmod 600: «Бронирование» ключа (запрет доступа всем, кроме тебя).
diff: Утилита, которая сравнивает файлы построчно и находит отличия.

🚀 Решение (Step-by-Step)

Подготовка ключа (на твоем компьютере)
Поскольку ты уже вытащил ключ из 16 уровня, убедись, что он в файле bandit17.key и система его «уважает»:


chmod 600 bandit17.key

Вход в «архив» Используем ключ для прямого входа со своего ПК:

ssh -i bandit17.key bandit17@bandit.labs.overthewire.org -p 2220

Система пустит тебя без пароля, так как ключ — это и есть твое удостоверение. Поиск иголки в стоге сена В домашней директории лежат два файла. Сравниваем их:

diff passwords.old passwords.new

Чтение вывода diff выдаст что-то вроде: text

42c42
< BMIOFKM7CRSLI97voLp3TD80NAq5exxk
---
> x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO

< — это то, что было в old.
    > — это то, что появилось в new. Это и есть твой пароль.

💡 DevSecOps Pro-Tips

SSH Key Permissions: Если права на ключ будут 777 (всем всё можно), SSH выдаст ошибку Permissions are too open. Ключи — это интимная вещь в мире Linux, их нельзя показывать никому.
Diff в разработке: На этом инструменте держится весь Git. Когда ты делаешь git diff, ты используешь ту же самую логику сравнения версий кода.
Password Stores: В реальности пароли не хранят в файлах passwords.new, их хранят в зашифрованных хранилищах типа HashiCorp Vault или KeePass.

🏁 Результат x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO

🛡️ Концепция: SSH Shell Bypass (Non-interactive sessions) Ты столкнулся с «вышибалой». В файле .rc пользователя bandit18 прописана команда logout (или вывод текста и выход). Как только ты логинишься, сервер запускает твою оболочку (Shell), она читает настройки и тут же тебя выкидывает с фразой «Byebye!». Трюк в том, что SSH умеет выполнять команды вместо запуска интерактивной оболочки. Мы можем попросить сервер сделать «грязную работу» (прочитать файл) и сразу закрыть связь. 🛠 Инструментарий

ssh [user@host] [command]: Выполнение одиночной команды на удаленном узле.
-t: Принудительное выделение псевдо-терминала (иногда помогает обойти ограничения).

🚀 Решение (Step-by-Step)

Попробуй зайти «в лоб» (увидишь, как тебя выкинет):


ssh bandit18@bandit.labs.overthewire.org -p 2220

(Пароль: x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO). Увидишь “Byebye!” и дисконнект. Обход через прямую команду: Не пытайся «войти». Просто попроси SSH прочитать файл readme, который лежит в домашней папке bandit18:

ssh bandit18@bandit.labs.overthewire.org -p 2220 "cat readme"

После ввода пароля сервер выведет содержимое файла и закроет сессию. Альтернативный (хитрый) способ: Если хочешь все-таки «погулять» по серверу, попробуй запустить другую оболочку в обход .rc: но это может не сработать…

ssh bandit18@bandit.labs.overthewire.org -p 2220 /bin/sh

Или через выделение TTY:


ssh -t bandit18@bandit.labs.overthewire.org -p 2220 /bin/sh

💡 DevSecOps Pro-Tips

Startup Scripts: Администраторы часто используют .rc или /etc/profile для ограничения действий пользователя. Но если пользователю разрешен SSH, он почти всегда может выполнить команду напрямую, минуя эти скрипты.
Escaping Jails: Это один из первых способов побега из «ограниченных оболочек» (Restricted Shells). 

🏁 Результат cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8 В файле readme лежит пароль для bandit19.

🛡️ Концепция: SUID (Set User ID) & Privilege Escalation Представь, что в офисе есть сейф, который открывается только по отпечатку пальца директора. Но директор оставил на столе специальный «автомат-манипулятор», который умеет нажимать на кнопку сейфа. Если ты нажмешь на кнопку этого автомата, он выполнит действие от имени директора, даже если ты обычный стажер. В Linux это называется бит SUID. Файл с таким битом запускается с правами его владельца, а не того, кто его запустил. 🛠 Инструментарий

ls -l: Поиск файлов с буквой s в правах доступа (например, -rwsr-xr-x).
./bandit20-do: Тот самый «автомат», который выполняет команды от имени bandit20.

🚀 Решение (Step-by-Step)

Заходим на уровень 19
Используй пароль, который ты достал из readme на прошлом этапе.


ssh bandit19@bandit.labs.overthewire.org -p 2220

Осмотр достопримечательностей В домашней папке ты увидишь необычный файл:

ls -l

Файл bandit20-do подсвечен другим цветом, и в его правах есть s. Это значит, он может делать всё, что может bandit20. Использование «манипулятора» Этот файл — обертка. Он берет твою команду и исполняет её «от лица» следующего уровня. Попросим его прочитать пароль 20-го уровня:

./bandit20-do cat /etc/bandit_pass/bandit20

Используйте код с осторожностью.

💡 DevSecOps Pro-Tips

SUID Danger: Неправильно настроенные SUID-биты на системных утилитах (например, на vim, find или ) — это классический путь к Root правам. Хакеры ищут такие файлы через find / -perm -4000.
Binary Wrappers: Администраторы создают такие файлы, чтобы дать пользователям ограниченный доступ к админским задачам (например, смене пароля — утилита passwd тоже имеет SUID бит).

🏁 Результат 0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO Команда выведет пароль для bandit20.

🛡️ Концепция: Network Listeners & Background Processes Представь, что тебе нужно передать секретный конверт курьеру. Но курьер (suconnect) — параноик. Он не просто берет конверт, он требует, чтобы ты уже стоял у черного входа, держал табличку с паролем (текущий пароль 20 уровня) и ждал, пока он подойдет и проверит её. Это классическая схема Client-Server. Ты будешь сервером (слушать порт), а программа — клиентом (подключится к тебе). 🛠 Инструментарий

nc -l -p [port]: Запуск Netcat в режиме прослушивания (Listen) на указанном порту.
& (Ampersand): Запуск команды в фоновом режиме, чтобы терминал остался свободен.
jobs / fg: Управление фоновыми задачами.

🚀 Решение (Step-by-Step)

Готовим «засаду» (Server)
Нам нужно заставить nc слушать любой свободный порт (например, 1234) и «выплюнуть» туда пароль от 20 уровня. Делаем это в фоне:


echo "0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO" | nc -l -p 1234 &

Символ & крайне важен — он позволит тебе ввести следующую команду, пока nc ждет подключения. Зовем «курьера» (Client) Теперь запускаем SUID-программу suconnect и говорим ей подключиться к нашему порту:

./suconnect 1234

Что произойдет? suconnect стучится на порт 1234. Твой фоновый nc отдает ему пароль 20 уровня. suconnect проверяет его, радуется и выдает тебе пароль от 21 уровня.

💡 DevSecOps Pro-Tips

Reverse Shell: Этот же механизм используется для создания «обратной оболочки». Хакер запускает nc -l у себя, а жертва подключается к нему, отдавая управление своей консолью.
Port Collision: Если порт 1234 занят другим игроком, просто выбери любое случайное число (например, 54321).

🏁 Результат EeoULMCra2q0dSkYj561DX7s1CpBuOBt Программа напишет Read: [твой_пароль] и следом выдаст новый пароль.

🛡️ Концепция: Scheduled Tasks (Cron Jobs) В реальных системах многие задачи (бэкапы, очистка логов) выполняются автоматически по расписанию. За это отвечает демон cron. Представь, что админ оставил «робота», который каждые пару минут заходит в комнату, делает записи и уходит. Тебе нужно найти, где этот робот хранит свои инструкции и куда он записывает результаты. 🛠 Инструментарий

/etc/cron.d/: Папка, где лежат списки задач для всех пользователей.
cat: Чтение файлов конфигурации.
 [script_path]: Чтение и понимание того, что именно делает автоматика.

🚀 Решение (Step-by-Step)

Идем в «диспетчерскую»
Зайди под пользователем bandit21 и посмотри, какие задачи запланированы:


ls /etc/cron.d/

Ты увидишь файл, связанный с bandit22. Читаем инструкцию «робота» Посмотри, что написано в этом конфиге:

cat /etc/cron.d/cronjob_bandit22

Там будет путь к скрипту (например, /usr/bin/cronjob_bandit22.sh), который запускается от имени bandit22. Анализируем скрипт Прочитай сам скрипт, чтобы понять, куда он прячет пароль:

cat /usr/bin/cronjob_bandit22.sh

Обычно скрипт делает что-то вроде cat /etc/bandit_pass/bandit22 > /tmp/что-то-там. Забираем добычу Просто прочитай тот файл в /tmp/, в который скрипт перекладывает пароль.

💡 DevSecOps Pro-Tips

Cron Security: Это классический вектор атаки. Если ты можешь редактировать файл, который запускается по крону от имени root, ты захватил сервер.
Persistence: Хакеры часто добавляют свои команды в crontab, чтобы восстанавливать доступ к серверу после перезагрузки.

🏁 Результат tRae0UfB9v0UzbCdn9cY0gQnds9GF58Q Путь к паролю будет лежать внутри временного файла в /tmp/.

🛡️ Концепция: Security through Obscurity (Скрытие через запутывание) На этом уровне админ стал хитрее. Он не пишет пароль в один и тот же файл. Теперь «робот» генерирует уникальное имя файла для каждого пользователя, используя хеширование (MD5). Это как если бы ключ от твоей ячейки лежал в коробке, название которой — это зашифрованное имя владельца. 🛠 Инструментарий

echo: Вывод строки.
md5sum: Генерация уникального отпечатка (хеша) строки.
cut: Обрезка лишних символов из вывода.

🚀 План действий:

  1. Смотрим на «робота» этого уровня Проверяем, что запланировано для bandit23:

cat /etc/cron.d/cronjob_bandit23

Используйте код с осторожностью. Вывод покажет, что запускается скрипт /usr/bin/cronjob_bandit23.sh. 3. Читаем и разбираем скрипт Самый важный этап. Посмотрим, как он генерирует имя файла:

cat /usr/bin/cronjob_bandit23.sh

Используйте код с осторожностью. Внутри ты увидишь примерно такую логику:

myname=$(whoami) mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1) cat /etc/bandit_pass/bandit23 > /tmp/$mytarget

Используйте код с осторожностью. Скрипт говорит: «Я беру имя текущего пользователя, добавляю его во фразу ‘I am user…’, делаю из этого MD5-хеш и пишу пароль в файл с этим именем в /tmp’». 4. Твой «хак» (Вычисляем путь) Скрипт работает от имени bandit23, а тебе нужно узнать, какое имя файла он сгенерировал именно для него. Тебе нужно вручную повторить ту же операцию, но подставив bandit23:

echo “I am user bandit23” | md5sum | cut -d ’ ’ -f 1

Используйте код с осторожностью. 5. Забираем пароль Команда выше выдаст длинную строку (хеш), например 8ca319…. Это и есть имя файла в /tmp. Просто прочитай его:

cat /tmp/[ТО_ЧТО_ВЫДАЛА_ПРЕДЫДУЩАЯ_КОМАНДА]

Используйте код с осторожностью. 💡 Важный нюанс: В команде echo кавычки и пробелы важны. Проверь точно, как написано в скрипте (иногда там I am user bandit23, иногда без пробелов — делай один в один). Какой хеш у тебя получился после команды echo “I am user bandit23” | md5sum?

💡 DevSecOps Pro-Tips

Predictable Secrets: Использование имени пользователя для генерации путей к файлам — это плохая практика. Если алгоритм известен, хакер может предсказать путь к секрету.

🏁 Результат 0Zf11ioIjMVN551jX3CmStKLYqjk54Ga Тебе нужно будет сгенерировать хеш от строки I am user bandit23 и найти файл с таким именем в /tmp.

🛡️ Концепция: Script Injection & Automated Execution Здесь «робот» (cronjob) не просто копирует файлы. Он заходит в папку /var/spool/bandit24/foo, берет любой скрипт, который ты там оставишь, запускает его от имени bandit24 и сразу удаляет. Это твой шанс заставить систему выполнить твой код с повышенными правами. 🛠 Инструментарий

mkdir -p /tmp/my_secret: Создание своей папки, где ты сможешь прочитать результат.
chmod 777: Установка полных прав, чтобы «робот» мог запустить твой скрипт, а ты — прочитать его вывод.
cp: Копирование твоего скрипта в «пасть» роботу.

🚀 Решение (Step-by-Step)

Создаем рабочее пространство
Нам нужно место, куда «робот» запишет пароль, и мы сможем его забрать:


mkdir /tmp/hacker_space
chmod 777 /tmp/hacker_space

Пишем скрипт-шпион Создай файл (например, /tmp/hacker_space/get_pass.sh), который просто прочитает пароль и положит его в твою папку:

echo '#!/bin/' > /tmp/hacker_space/get_pass.sh
echo 'cat /etc/bandit_pass/bandit24 > /tmp/hacker_space/password' >> /tmp/hacker_space/get_pass.sh

Даем права на запуск Робот не сможет запустить твой скрипт, если у него нет прав на исполнение:

chmod 777 /tmp/hacker_space/get_pass.sh

Скармливаем скрипт роботу Копируем его в папку, которую мониторит cron:

cp /tmp/hacker_space/get_pass.sh /var/spool/bandit24/foo/

Ждем минуту Крон запускается раз в минуту. Подожди секунд 60 и проверяй свою папку:

cat /tmp/hacker_space/password

Используйте код с осторожностью.

💡 DevSecOps Pro-Tips

Insecure Cron Directories: Если папка, из которой крон запускает скрипты, доступна на запись обычным пользователям — это «дыра» размером с титаник. Никогда так не делай в проде.
Cleanup: Заметил, что скрипт удаляет файлы после запуска? Это попытка скрыть следы (но в нашем случае мы успеем забрать результат из /tmp).

🏁 Результат gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8 В файле /tmp/hacker_space/password появится заветная строка.

🛡️ Концепция: Automated Authentication Attacks Представь сейф с кодовым замком на 10 000 комбинаций (0000–9999). Но есть нюанс: чтобы просто попробовать ввести код, ты сначала должен предъявить паспорт (пароль от текущего уровня bandit24). Вводить это руками 10 000 раз — безумие. Проще написать «робота» (скрипт), который выстрелит всеми комбинациями в одну секунду. 🛠 Инструментарий

 Loops (for): Цикл для генерации последовательности чисел.
Netcat (nc): Инструмент для передачи данных на сетевой порт.
Brute Force: Метод «грубой силы» — перебор всех возможных вариантов до победного.

🚀 Решение (Step-by-Step)

Создаем «обойму» (список попыток)
Нам нужно создать файл, где каждая строка содержит: ПАРОЛЬ_24 [ПИН]. Используем цикл, чтобы не писать это вручную:


# Подставь свой пароль от bandit24 вместо "ПАРОЛЬ_24" 

```gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8```

for i in {0000..9999}; do echo "ПАРОЛЬ_24 $i"; done > /tmp/brute.txt

Проверка «патронов» Убедись, что файл выглядит правильно (пароль и пробел перед цифрами):

head -n 5 /tmp/brute.txt

Штурм порта Отправляем весь файл целиком на порт 30002. Чтобы не утонуть в тысячах надписей “Wrong!”, фильтруем вывод:

cat /tmp/brute.txt | nc localhost 30002 | grep -v "Wrong"

Результат iCi86ttT4KSNe1armKiwbQNmB3YJP3q4 Сервер «прожует» список и, найдя верную комбинацию, выдаст сообщение: Correct! The password of user bandit25 is [ХЕШ]

💡 DevSecOps Pro-Tips

Rate Limiting: В реальных системах (например, в твоем телефоне или онлайн-банке) стоит защита: после 3–5 неверных попыток вход блокируется. Это делает брутфорс невозможным.
Dictionary Attack: Если ПИН-код сложный (например, слово), хакеры используют не перебор цифр, а «словари» из миллионов популярных паролей.
Localhost Speed: Брутфорс внутри сервера (localhost) проходит мгновенно. Если бы ты делал это через интернет, задержки сети растянули бы процесс на часы.

🏁 Результат Пароль для bandit25: iCi86ttT4KSNe1armKiwbQNmB3YJP3q4

🛡️ Концепция: Restricted Shells & TTY Manipulation Представь, что тебя заперли в комнате, где можно только читать одну-единственную книгу. Как только ты дочитываешь её до конца — свет гаснет и тебя выкидывают. Это Restricted Shell (ограниченная оболочка). Но если книга большая, а твои очки (окно терминала) маленькие, тебе придется перелистывать страницы. В этот момент «чтения» ты можешь позвать на помощь редактор, который умеет открывать двери в систему. 🛠 Инструментарий

Terminal Resizing: Искусственное ограничение вывода, чтобы запустить режим more.
Vi (Visual Editor): Легендарный текстовый редактор, встроенный почти во все Unix-системы.
vi-commands: Команды для вызова системных функций прямо из текста.

🚀 Решение (Step-by-Step)

Сужаем «поле зрения»
Максимально уменьши окно своего терминала (сделай его очень узким и низким — буквально 3-5 строк в высоту). Это заставит сервер включить режим постраничного просмотра (more).
Вход в ловушку
Логинимся под bandit26:


ssh bandit26@bandit.labs.overthewire.org -p 2220

Захват управления
Если окно маленькое, ты увидишь внизу текст --More--. В этот момент нажми английскую клавишу v.
Это откроет текущий текст в редакторе vi.
Взлом изнутри Vi
Теперь нам нужно заставить vi запустить настоящую оболочку () вместо того, чтобы просто редактировать текст. Вводи команды (нажимая : перед каждой):
text

:set shell=/bin/
:shell

Финальный рывок Ты окажешься в консоли под bandit26. Но пароль для следующего уровня лежит в домашней папке в файле, который доступен только через SUID-программу bandit27-do (как мы делали раньше):

./bandit27-do cat /etc/bandit_pass/bandit27

Используйте код с осторожностью.

💡 DevSecOps Pro-Tips

The Power of Vi: Многие системные утилиты (например, crontab -e или visudo) используют vi. Если администратор дал тебе право редактировать конфиг через sudo vi, он фактически дал тебе права root, так как из vi можно выйти в оболочку через :sh.
Breaking Out: Существует целый ресурс GTFOBins, где описаны способы побега из сотен обычных программ в полноценный шелл.

🏁 Результат Команда bandit27-do выдаст пароль для 27 уровня.