Добро пожаловать обратно, мои начинающие кибервоины!
На цифровом поле битвы за кибербезопасность фаззинг веб-приложений является важнейшим методом выявления уязвимостей и разработки эксплойтов. Это практическое руководство вооружает начинающих кибербойцов знаниями, позволяющими использовать скрипты BASH как мощное оружие для создания собственных инструментов фаззинга.
Фаззинг — это метод динамического анализа, используемый при тестировании программного обеспечения и оценке безопасности. Он заключается в предоставлении недействительных, неожиданных или случайных данных в качестве входных данных веб-приложению для выявления уязвимостей, ошибок или непредвиденного поведения.
Концепция фаззинга возникла в 1988 году, когда профессор Бартон Миллер из Висконсинского университета в Мадисоне наблюдал сбои в работе систем во время грозы. Это наблюдение привело к разработке первых инструментов фаззинга. С тех пор фаззинг превратился в сложную и важнейшую технологию современной кибербезопасности.
По сути, фаззинг исследует огромное входное пространство программы. Однако для сложных приложений это пространство астрономически велико, что делает исчерпывающее тестирование невыполнимой задачей. Это ограничение связано с проблемой остановки в информатике, доказывая, что мы никогда не можем гарантировать обнаружение всех ошибок только с помощью фаззинга. В результате наши операции фаззинга основаны на вероятностных методах, стремясь генерировать входные данные с высокой вероятностью возникновения ошибок или уязвимостей в разумные сроки.
Фаззинг можно разделить на несколько типов в зависимости от используемых знаний и подхода:
Веб-фаззинг с использованием BASH обладает рядом неоспоримых преимуществ. Одно из главных преимуществ — простота: скрипты BASH относительно легко писать и понимать, что делает их доступными для начинающих кибервоинов разного уровня подготовки.
Ещё одним важным преимуществом использования BASH для веб-фаззинга является его безупречная интеграция с системой. Скрипты BASH легко взаимодействуют с другими инструментами командной строки и системными утилитами.
Однако важно учитывать ограничения использования BASH для веб-фаззинга:
Но в целом создание веб-фаззера с помощью BASH идеально подходит для освоения навыков киберопераций.
Теперь, когда мы разобрались с теоретическими основами и преимуществами и недостатками фаззинга на основе BASH, давайте приступим к созданию собственного фаззера для веб-приложений. Начнём с шебанга, чтобы обозначить наш скрипт как исполняемый файл BASH, а затем краткого инструктажа по выполнению задачи. Затем мы создадим интерактивное приглашение для получения целевого домена.
Я использовал команду 'read -p' для отображения приглашения и сбора входных данных. Я также добавил строку, чтобы визуально отделить этот блок программы.
Сердце нашего фаззера — генератор полезной нагрузки. Он создаёт различные тестовые случаи для проверки приложения. Начнём с него: создадим специальную функцию для этой цели и напишем базовые полезные нагрузки для различных типов уязвимостей (SQL-инъекции, XSS, инъекции команд и т. д.).
Затем создайте функцию «mutate_payload», которая принимает полезную нагрузку в качестве аргумента и выводит случайную версию её мутированных версий. Мутации включают добавление символов (', <script>, /, n) и кодирование полезной нагрузки по алгоритму ROT13.
${#mutations[@]} – выдает длину массива «mutations».
RANDOM % ${#mutations[@]} — вычисляет случайный индекс в диапазоне индексов массива «mutations». Оператор % (модуль деления по модулю) гарантирует, что сгенерированное случайное число находится в допустимых пределах (от 0 до длины массива «mutations» — 1).
Для генерации мутированных полезных нагрузок нам необходимо, чтобы каждая полезная нагрузка из «base_payloads» передавалась в «mutate_payload».
«${base_payloads[@]}» — используется для доступа ко всем элементам массива одновременно.
После генерации базовых и мутированных полезных нагрузок их можно объединить в массив полезных нагрузок. Чтобы проверить, всё ли работает правильно, я также добавлю ещё один цикл для отображения всех полезных нагрузок.
После создания полезной нагрузки мы можем приступить к написанию функции отправки запросов.
Вот что он делает:
-s – тихий режим.
-w «%{http_code}» — мы просим curl отправить нам код статуса HTTP.
Здесь «case» и «esac» используются для создания оператора многоканального ветвления, аналогичного оператору switch в Python или других языках программирования. «Esac» — это просто «case», написанное наоборот, и используется для завершения оператора case.
3. Он получает ответ с веб-сайта и пытается отделить код статуса от фактического сообщения.
если [[ ${#response} -ge 3 ]]; then – это условие проверяет, составляет ли длина ответа 3 или более символов.
http_code – присваивает переменной последние 3 символа (предположительно, код статуса HTTP, например 200, 404 и т. д.).
body=${response:0:${#response}-3} – присваивает переменной подстроку (все, кроме последних 3 символов ответа).
4. Если ответ слишком короткий, он устанавливает код по умолчанию и предупреждает нас.
5. Наконец, он передает все, что узнал, другой функции, чтобы выяснить, что все это значит.
Анализатор ответов проверяет ответ сервера на предмет потенциальных уязвимостей.
Сначала проанализируем коды состояния:
Он сканирует ответ на наличие таких слов, как «ошибка» или «исключение». Если он их находит, он предупреждает нас и показывает фрагмент. Затем он ищет конкретные признаки уязвимостей:
Далее мы создадим функцию, которая будет вызывать все необходимые предыдущие функции. Суть в том, что сначала мы генерируем полезные данные, а затем делаем запрос для каждого метода и для каждой полезной нагрузки.
После этого я добавлю входные данные для получения необходимых методов и запишу их в массив. Также добавлю общий заголовок.
Фаззинг часто является первым шагом в разработке эксплойта. Фаззинг позволяет определить, где и как происходит сбой в работе приложения. «Сбой» часто является местом, где можно эксплойтить уязвимость.
В этом руководстве мы познакомим вас с фаззингом веб-приложений с использованием Bash, разработанным специально для начинающих кибервоинов. В нём рассматриваются основы фаззинга, объясняются преимущества Bash как хорошего инструмента для обучения, а также пошаговое руководство по созданию простого фаззинга.
На цифровом поле битвы за кибербезопасность фаззинг веб-приложений является важнейшим методом выявления уязвимостей и разработки эксплойтов. Это практическое руководство вооружает начинающих кибербойцов знаниями, позволяющими использовать скрипты BASH как мощное оружие для создания собственных инструментов фаззинга.
Фаззинг — это метод динамического анализа, используемый при тестировании программного обеспечения и оценке безопасности. Он заключается в предоставлении недействительных, неожиданных или случайных данных в качестве входных данных веб-приложению для выявления уязвимостей, ошибок или непредвиденного поведения.
Концепция фаззинга возникла в 1988 году, когда профессор Бартон Миллер из Висконсинского университета в Мадисоне наблюдал сбои в работе систем во время грозы. Это наблюдение привело к разработке первых инструментов фаззинга. С тех пор фаззинг превратился в сложную и важнейшую технологию современной кибербезопасности.
По сути, фаззинг исследует огромное входное пространство программы. Однако для сложных приложений это пространство астрономически велико, что делает исчерпывающее тестирование невыполнимой задачей. Это ограничение связано с проблемой остановки в информатике, доказывая, что мы никогда не можем гарантировать обнаружение всех ошибок только с помощью фаззинга. В результате наши операции фаззинга основаны на вероятностных методах, стремясь генерировать входные данные с высокой вероятностью возникновения ошибок или уязвимостей в разумные сроки.
Типы фаззинга
Фаззинг можно разделить на несколько типов в зависимости от используемых знаний и подхода:
- Черный ящик:
- Нет знаний о внутреннем устройстве приложения.
- Входные данные генерируются без учета структуры или логики приложения.
- Может обнаружить неожиданные уязвимости, но может быть менее эффективным.
- Белый ящик:
- Использует знания о внутреннем устройстве программы для управления генерацией входных данных.
- Может включать анализ исходного кода, графики потоков управления и символическое выполнение.
- Обеспечивает более высокий охват кода, но требует больше ресурсов и опыта.
- Серый ящик:
- Гибридный подход, использующий некоторые, но не полные, знания системы.
- Часто подразумевает оснащение целевой программы инструментами для сбора информации во время выполнения.
- Баланс эффективности и глубины тестирования.
- На основе поколений:
- Создает тестовые случаи с нуля на основе входных спецификаций.
- Эффективен для сложных форматов ввода, но требует глубокого понимания структуры ввода.
- На основе мутаций:
- Начинает с допустимых входных данных и применяет различные преобразования.
- Практичный и позволяет быстро генерировать большое количество тестовых случаев.
- Эволюционный:
- Использует концепции генетических алгоритмов для усовершенствования тестовых случаев с течением времени.
- Может быть особенно эффективен для поиска глубоких, труднодоступных насекомых.
Веб-фаззинг с использованием BASH обладает рядом неоспоримых преимуществ. Одно из главных преимуществ — простота: скрипты BASH относительно легко писать и понимать, что делает их доступными для начинающих кибервоинов разного уровня подготовки.
Ещё одним важным преимуществом использования BASH для веб-фаззинга является его безупречная интеграция с системой. Скрипты BASH легко взаимодействуют с другими инструментами командной строки и системными утилитами.
Однако важно учитывать ограничения использования BASH для веб-фаззинга:
- На крупномасштабных проектах это может происходить медленно.
- Внедрение передовых методов фаззинга может оказаться непростой задачей.
Но в целом создание веб-фаззера с помощью BASH идеально подходит для освоения навыков киберопераций.
Начните писать код
Теперь, когда мы разобрались с теоретическими основами и преимуществами и недостатками фаззинга на основе BASH, давайте приступим к созданию собственного фаззера для веб-приложений. Начнём с шебанга, чтобы обозначить наш скрипт как исполняемый файл BASH, а затем краткого инструктажа по выполнению задачи. Затем мы создадим интерактивное приглашение для получения целевого домена.
Я использовал команду 'read -p' для отображения приглашения и сбора входных данных. Я также добавил строку, чтобы визуально отделить этот блок программы.
Сердце нашего фаззера — генератор полезной нагрузки. Он создаёт различные тестовые случаи для проверки приложения. Начнём с него: создадим специальную функцию для этой цели и напишем базовые полезные нагрузки для различных типов уязвимостей (SQL-инъекции, XSS, инъекции команд и т. д.).
Затем создайте функцию «mutate_payload», которая принимает полезную нагрузку в качестве аргумента и выводит случайную версию её мутированных версий. Мутации включают добавление символов (', <script>, /, n) и кодирование полезной нагрузки по алгоритму ROT13.
${#mutations[@]} – выдает длину массива «mutations».
RANDOM % ${#mutations[@]} — вычисляет случайный индекс в диапазоне индексов массива «mutations». Оператор % (модуль деления по модулю) гарантирует, что сгенерированное случайное число находится в допустимых пределах (от 0 до длины массива «mutations» — 1).
Для генерации мутированных полезных нагрузок нам необходимо, чтобы каждая полезная нагрузка из «base_payloads» передавалась в «mutate_payload».
«${base_payloads[@]}» — используется для доступа ко всем элементам массива одновременно.
После генерации базовых и мутированных полезных нагрузок их можно объединить в массив полезных нагрузок. Чтобы проверить, всё ли работает правильно, я также добавлю ещё один цикл для отображения всех полезных нагрузок.
Обработка запросов
После создания полезной нагрузки мы можем приступить к написанию функции отправки запросов.
Вот что он делает:
- Для этого нужны четыре вещи: куда мы обращаемся (URL), что мы отправляем (полезная нагрузка), как мы это отправляем (метод) и любые специальные инструкции (заголовки).
- В зависимости от метода (GET, POST, PUT, DELETE) для отправки нашего запроса используется разная команда curl.
-s – тихий режим.
-w «%{http_code}» — мы просим curl отправить нам код статуса HTTP.
Здесь «case» и «esac» используются для создания оператора многоканального ветвления, аналогичного оператору switch в Python или других языках программирования. «Esac» — это просто «case», написанное наоборот, и используется для завершения оператора case.
3. Он получает ответ с веб-сайта и пытается отделить код статуса от фактического сообщения.
если [[ ${#response} -ge 3 ]]; then – это условие проверяет, составляет ли длина ответа 3 или более символов.
http_code – присваивает переменной последние 3 символа (предположительно, код статуса HTTP, например 200, 404 и т. д.).
body=${response:0:${#response}-3} – присваивает переменной подстроку (все, кроме последних 3 символов ответа).
4. Если ответ слишком короткий, он устанавливает код по умолчанию и предупреждает нас.
5. Наконец, он передает все, что узнал, другой функции, чтобы выяснить, что все это значит.
Анализ ответа
Анализатор ответов проверяет ответ сервера на предмет потенциальных уязвимостей.
Сначала проанализируем коды состояния:
Он сканирует ответ на наличие таких слов, как «ошибка» или «исключение». Если он их находит, он предупреждает нас и показывает фрагмент. Затем он ищет конкретные признаки уязвимостей:
Далее мы создадим функцию, которая будет вызывать все необходимые предыдущие функции. Суть в том, что сначала мы генерируем полезные данные, а затем делаем запрос для каждого метода и для каждой полезной нагрузки.
После этого я добавлю входные данные для получения необходимых методов и запишу их в массив. Также добавлю общий заголовок.
Краткое содержание
Фаззинг часто является первым шагом в разработке эксплойта. Фаззинг позволяет определить, где и как происходит сбой в работе приложения. «Сбой» часто является местом, где можно эксплойтить уязвимость.
В этом руководстве мы познакомим вас с фаззингом веб-приложений с использованием Bash, разработанным специально для начинающих кибервоинов. В нём рассматриваются основы фаззинга, объясняются преимущества Bash как хорошего инструмента для обучения, а также пошаговое руководство по созданию простого фаззинга.