Зачем учить язык программирования безопаснику, если есть готовые утилиты? Чтобы не зависеть от чужих кнопок и понимать систему на уровне сырых байтов. 💻
Сегодня устроил себе практический спринт: поднял тестовый стенд на 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. Положились на проверку расширений файлов на клиенте/роутере.
Каждая уязвимость по отдельности кажется локальной, но собранные в цепочку скриптом - дают полный контроль над данными.
Views: 17