Разработка эксплойтов: создание собственного фаззера с помощью BASH

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
153
Депозит
-8.95$
Добро пожаловать обратно, мои начинающие кибервоины!



На цифровом поле битвы за кибербезопасность фаззинг веб-приложений является важнейшим методом выявления уязвимостей и разработки эксплойтов. Это практическое руководство вооружает начинающих кибербойцов знаниями, позволяющими использовать скрипты BASH как мощное оружие для создания собственных инструментов фаззинга.



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



Концепция фаззинга возникла в 1988 году, когда профессор Бартон Миллер из Висконсинского университета в Мадисоне наблюдал сбои в работе систем во время грозы. Это наблюдение привело к разработке первых инструментов фаззинга. С тех пор фаззинг превратился в сложную и важнейшую технологию современной кибербезопасности.



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



6a4a49_0ebfbd36e78240cc9519a768c47b0d86~mv2.png

Типы фаззинга​



Фаззинг можно разделить на несколько типов в зависимости от используемых знаний и подхода:



  1. Черный ящик:
    • Нет знаний о внутреннем устройстве приложения.
    • Входные данные генерируются без учета структуры или логики приложения.
    • Может обнаружить неожиданные уязвимости, но может быть менее эффективным.
  2. Белый ящик:
    • Использует знания о внутреннем устройстве программы для управления генерацией входных данных.
    • Может включать анализ исходного кода, графики потоков управления и символическое выполнение.
    • Обеспечивает более высокий охват кода, но требует больше ресурсов и опыта.
  3. Серый ящик:
    • Гибридный подход, использующий некоторые, но не полные, знания системы.
    • Часто подразумевает оснащение целевой программы инструментами для сбора информации во время выполнения.
    • Баланс эффективности и глубины тестирования.
  4. На основе поколений:
    • Создает тестовые случаи с нуля на основе входных спецификаций.
    • Эффективен для сложных форматов ввода, но требует глубокого понимания структуры ввода.
  5. На основе мутаций:
    • Начинает с допустимых входных данных и применяет различные преобразования.
    • Практичный и позволяет быстро генерировать большое количество тестовых случаев.
  6. Эволюционный:
    • Использует концепции генетических алгоритмов для усовершенствования тестовых случаев с течением времени.
    • Может быть особенно эффективен для поиска глубоких, труднодоступных насекомых.


Веб-фаззинг с использованием BASH обладает рядом неоспоримых преимуществ. Одно из главных преимуществ — простота: скрипты BASH относительно легко писать и понимать, что делает их доступными для начинающих кибервоинов разного уровня подготовки.



Ещё одним важным преимуществом использования BASH для веб-фаззинга является его безупречная интеграция с системой. Скрипты BASH легко взаимодействуют с другими инструментами командной строки и системными утилитами.



Однако важно учитывать ограничения использования BASH для веб-фаззинга:



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


Но в целом создание веб-фаззера с помощью BASH идеально подходит для освоения навыков киберопераций.



Начните писать код​



Теперь, когда мы разобрались с теоретическими основами и преимуществами и недостатками фаззинга на основе BASH, давайте приступим к созданию собственного фаззера для веб-приложений. Начнём с шебанга, чтобы обозначить наш скрипт как исполняемый файл BASH, а затем краткого инструктажа по выполнению задачи. Затем мы создадим интерактивное приглашение для получения целевого домена.



6a4a49_4f04402b410941fdbb888218bf6b899e~mv2.png

Я использовал команду 'read -p' для отображения приглашения и сбора входных данных. Я также добавил строку, чтобы визуально отделить этот блок программы.



Сердце нашего фаззера — генератор полезной нагрузки. Он создаёт различные тестовые случаи для проверки приложения. Начнём с него: создадим специальную функцию для этой цели и напишем базовые полезные нагрузки для различных типов уязвимостей (SQL-инъекции, XSS, инъекции команд и т. д.).



6a4a49_67d70f8a2cf54f7694ecd01b941c95e6~mv2.png

Затем создайте функцию «mutate_payload», которая принимает полезную нагрузку в качестве аргумента и выводит случайную версию её мутированных версий. Мутации включают добавление символов (', <script>, /, n) и кодирование полезной нагрузки по алгоритму ROT13.



6a4a49_aad56c586bfe4c4b83b5de5895b256e8~mv2.png

${#mutations[@]} – выдает длину массива «mutations».



RANDOM % ${#mutations[@]} — вычисляет случайный индекс в диапазоне индексов массива «mutations». Оператор % (модуль деления по модулю) гарантирует, что сгенерированное случайное число находится в допустимых пределах (от 0 до длины массива «mutations» — 1).



Для генерации мутированных полезных нагрузок нам необходимо, чтобы каждая полезная нагрузка из «base_payloads» передавалась в «mutate_payload».



6a4a49_f538f1eeef9d4b28b30417dd941aae36~mv2.png

«${base_payloads[@]}» — используется для доступа ко всем элементам массива одновременно.



После генерации базовых и мутированных полезных нагрузок их можно объединить в массив полезных нагрузок. Чтобы проверить, всё ли работает правильно, я также добавлю ещё один цикл для отображения всех полезных нагрузок.



6a4a49_e956a526c9de44e3b9c4daf713d61e45~mv2.png
6a4a49_1d7ba62c1015454399e2de6857e0f15d~mv2.png

Обработка запросов​



После создания полезной нагрузки мы можем приступить к написанию функции отправки запросов.



6a4a49_4be251c159094177b29304ae4ce3bd37~mv2.png

Вот что он делает:



  1. Для этого нужны четыре вещи: куда мы обращаемся (URL), что мы отправляем (полезная нагрузка), как мы это отправляем (метод) и любые специальные инструкции (заголовки).
  2. В зависимости от метода (GET, POST, PUT, DELETE) для отправки нашего запроса используется разная команда curl.


-s – тихий режим.

-w «%{http_code}» — мы просим curl отправить нам код статуса HTTP.



Здесь «case» и «esac» используются для создания оператора многоканального ветвления, аналогичного оператору switch в Python или других языках программирования. «Esac» — это просто «case», написанное наоборот, и используется для завершения оператора case.



6a4a49_9ab63841bd664f3ea94394c37469698b~mv2.png

3. Он получает ответ с веб-сайта и пытается отделить код статуса от фактического сообщения.

если [[ ${#response} -ge 3 ]]; then – это условие проверяет, составляет ли длина ответа 3 или более символов.



http_code – присваивает переменной последние 3 символа (предположительно, код статуса HTTP, например 200, 404 и т. д.).



body=${response:0:${#response}-3} – присваивает переменной подстроку (все, кроме последних 3 символов ответа).



4. Если ответ слишком короткий, он устанавливает код по умолчанию и предупреждает нас.



5. Наконец, он передает все, что узнал, другой функции, чтобы выяснить, что все это значит.



Анализ ответа​



Анализатор ответов проверяет ответ сервера на предмет потенциальных уязвимостей.



Сначала проанализируем коды состояния:



6a4a49_a2771bfe24f34b68a6518d43d4b14471~mv2.png

Он сканирует ответ на наличие таких слов, как «ошибка» или «исключение». Если он их находит, он предупреждает нас и показывает фрагмент. Затем он ищет конкретные признаки уязвимостей:



6a4a49_e76e2437f7de467d944cbb0657cc3e7c~mv2.png

Далее мы создадим функцию, которая будет вызывать все необходимые предыдущие функции. Суть в том, что сначала мы генерируем полезные данные, а затем делаем запрос для каждого метода и для каждой полезной нагрузки.



6a4a49_ad9775c6fbf04cd3b0dca2ff045d42b2~mv2.png

После этого я добавлю входные данные для получения необходимых методов и запишу их в массив. Также добавлю общий заголовок.



Краткое содержание​



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



В этом руководстве мы познакомим вас с фаззингом веб-приложений с использованием Bash, разработанным специально для начинающих кибервоинов. В нём рассматриваются основы фаззинга, объясняются преимущества Bash как хорошего инструмента для обучения, а также пошаговое руководство по созданию простого фаззинга.
 
Назад
Сверху Снизу