Зачем учить язык программирования безопаснику, если есть готовые утилиты? Чтобы не зави...
Зачем учить язык программирования безопаснику, если есть готовые утилиты? Чтобы не зависеть от чужих кнопок и понимать систему на уровне сырых байтов. 💻 Сегодня устроил себе практический спринт: поднял тестовый стенд на Parrot Security OS и собрал цепочку из четырех собственных скриптов на чистом Ruby. Делюсь тем, как классическая цепочка атак (от разведки до эксфильтрации данных) выглядит изнутри терминала. 👇 Шаг 1. Разведка и фаззинг (fuzzer.rb) 🔍 Любой аудит начинается с карты местности. Вместо запуска комбайнов набросал легковесный скрипт на Ruby, который простукивает популярные скрытые эндпоинты, а весь сетевой трафик аккуратно заворачивает в локальный Burp Suite для анализа ответов. Результат первых секунд: - 200 OK на директории /ftp (открытый листинг) - 200 OK на внутренних метриках /metrics - 500 Internal Server Error на эндпоинте аутентификации /rest/user/login Ошибка 500 на обычном запросе - всегда повод присмотреться: сервер споткнулся о входящие данные. Шаг 2. Обход авторизации через SQLi (sqli_auth_bypass.rb) 💉 Идем в эндпоинт входа. Пишем второй скрипт, отправляющий в JSON-теле пейлоад проверки инъекции в поле email: ' OR 1=1--. Бэкенд некорректно экранировал ввод, вернув первую запись из базы данных. Результат - статус 200 OK, сырой хэш пароля администратора и подписанный JWT-токен с ролью "admin". Доступ к системе получен без знания пароля Шаг 3. Эксплуатация привилегий (dump_users.rb) 🔑 До авторизации обращение к защищенному маршруту /api/Users выдавало строгий 401 Unauthorized. Автоматизируем процесс: скрипт забирает выбитый на предыдущем шаге админский Bearer-токен, подставляет его в заголовок Authorization и запрашивает защищенные данные. Итог - аккуратно сдампленная таблица из 24 учетных записей инфраструктуры (от саппорта до CISO). Шаг 4. Обход фильтрации и выгрузка конфига (ftp_loot.rb) 📂 Возвращаемся к открытой директории /ftp. Напрямую скачать файлы бэкапов сервер не дает - срабатывает проверка белого списка расширений (разрешены только .md и .pdf). Пишем скрипт с обходом логики проверки: используем технику с обнулением байта и двойным кодированием (%2500.md). Валидатор на сервере видит допустимое окончание строки, а файловая система отсекает хвост по нулевому байту. Результат - закрытый файл package.json.bak с полным списком внутренних зависимостей и версий библиотек успешно скачан на локальную машину. Главный вывод дня 🧠 Безопасность ломается не на сложных алгоритмах, а на базовых ошибках валидации и связке мелких недочетов: 1. Оставили открытый листинг каталога. 2. Не подготовили параметризованные запросы в базе. 3. Положились на проверку расширений файлов на клиенте/роутере. Каждая уязвимость по отдельности кажется локальной, но собранные в цепочку скриптом - дают полный контроль над данными.