Легкий и автоматический поиск XSS и SQLi

Я обычно предпочитаю ручной взлом при приближении к новой цели веб-приложения. Ручное тестирование полезно для обнаружения новых и неожиданных векторов атак, но также требует много времени и усилий.

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

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

Что такое фаззинг?

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

Недопустимые данные, используемые для фаззинга приложения, могут быть созданы для определенной цели или сгенерированы случайным образом. Цель состоит в том, чтобы вызвать неожиданное поведение приложения (например, сбои и утечки памяти) и посмотреть, приводит ли оно к уязвимой для использования ошибке.

В общем, фаззинг особенно полезен для выявления таких ошибок, как утечки памяти, проблемы с потоком управления и состояния гонки.

Фаззинг веб-приложений

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

Фаззинг против статического анализа

Итак, у вас может быть вопрос: почему бы просто не провести статический анализ исходного кода? В чем преимущества фаззинга приложения по сравнению с простым погружением в код?

Я большой сторонник статического анализа кода для поиска ошибок. Вот введение, которое поможет вам приступить к проверке кода в целях безопасности:



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

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

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

Этапы фаззинга веб-приложения

Давайте рассмотрим шаги, которые вы должны предпринять при фаззинге веб-приложения!

  1. Определите точки ввода данных

Первое, что нужно сделать при фаззинге веб-приложения, - это определить способы, которыми клиент может предоставить данные приложению. Какие конечные точки принимают ввод? Какие параметры используются? Какие заголовки использует приложение?

2. Определитесь со списком полезной нагрузки

После того, как вы определили точки ввода данных, вам нужно будет определить, какие данные передавать в приложение. Для веб-приложений наиболее полезными данными фаззинга будут списки известных полезных нагрузок XSS, полезных нагрузок SQLi и т. Д. Я рекомендую скачать здесь SecLists, чтобы получить довольно полный список полезной нагрузки для фаззинга веб-приложений:



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

  • Очень длинные полезные данные,
  • полезные данные, содержащие нечетные символы различных кодировок,
  • и полезные данные, которые содержат определенные специальные символы, такие как символ новой строки, символ перевода строки и т. д.

Подавая таким образом мусорные данные приложения, вы можете обнаружить неожиданное поведение и обнаружить новые классы уязвимостей!

3. Пушистик

Теперь все, что нужно сделать, - это систематически подавать свой список полезной нагрузки нечеткого кода в точки ввода данных приложения! Есть несколько способов сделать это в зависимости от ваших потребностей и навыков программирования.

Burp Intruder

Первый способ автоматизировать фаззинг - использовать взломщика BurpSuite. Burp предоставляет графический интерфейс для настройки параметров фаззера, так что вы можете просто выбрать конечную точку, выбрать список полезных данных и начать фаззинг!

С Burp Intruder вы можете указать, куда должны помещаться полезные данные в запросе, какие параметры данных следует вставлять и сколько разных позиций вставлять полезные данные одновременно.

Вы также можете выбрать предопределенный список полезных нагрузок или сгенерировать списки полезных данных в burp.

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

OWASP ZAP Fuzzer

OWASP Zed Attack Proxy (ZAP) также имеет встроенный фаззер, который вы можете использовать. В отличие от взломщика Burp, он не ограничен по времени, и все функции бесплатны.

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

4. Следите за результатами

Последний шаг - проанализировать результаты, полученные вашим фаззером. Вы должны искать закономерности и аномалии в ответе сервера. То, что вам следует искать, будет зависеть от набора полезных данных, который вы используете. Например, при фаззинге для SQLi вы можете захотеть посмотреть на изменение длины контента или времени ответа. И при поиске обходов пути вы можете искать в ответе специальные ключевые слова. Более подробное изучение каждого типа уязвимости поможет вам определить ключевые сигнатуры каждой имеющейся уязвимости.

Ловушки фаззинга

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

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

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

Думайте о фаззинге как о металлоискателе: он просто указывает вам на подозрительные места. И, в конце концов, вам нужно более внимательно изучить, чтобы увидеть, нашли ли вы что-то ценное.

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

Я что-то пропустил? Не стесняйтесь сообщить мне об этом в Твиттере.



Спасибо за прочтение. И помните: пробовать это в системах, где у вас нет разрешения на тестирование, незаконно. Если вы обнаружили уязвимость, ответственно сообщите об этом поставщику. Помогите сделать наш Интернет более безопасным.