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. Именно здесь начинается настоящая автоматизация.
Конвейер (символ |) В Linux это способ передать вывод одной команды на вход другой. Вместо того чтобы выводить текст на экран, ты направляешь его дальше по цепочке.
Команда 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)
- Подготовка ключа на локальной машине Если ты скачал ключ к себе, SSH откажется с ним работать, если права слишком «разболтаны»:
chmod 600 bandit.key
Без этого ты получишь ошибку и запрос пароля.
- Маневр с алгоритмами (для новых систем) Современные клиенты (OpenSSH 8.8+) отключают старый алгоритм ssh-rsa по умолчанию. Если сервер Bandit его требует, используй «секретный соус»:
ssh -i ./bandit.key -o PubkeyAcceptedAlgorithms=+ssh-rsa bandit14@bandit.labs.overthewire.org -p 2220
- Обход сетевых затыков Если домен капризничает, стучись напрямую по IP :
ssh -i ./bandit.key bandit14@51.21.210.216 -p 2220
- Финальный рывок (внутри сервера) Как только залогинился под 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)
- Достаем «пропуск» Находясь под пользователем bandit14, мы имеем доступ к своему паролю. Проверим его:
cat /etc/bandit_pass/bandit14
- Стучимся в «офис 30000» Нам нужно отправить этот текст на порт 30000. Самый быстрый способ — через конвейер (pipe):
cat /etc/bandit_pass/bandit14 | nc localhost 30000
Что происходит «под капотом»?
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: Обрезка лишних символов из вывода.
🚀 План действий:
- Смотрим на «робота» этого уровня Проверяем, что запланировано для 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 уровня.
