Проверка сайта на уязвимости своими силами с использованием Wapiti

    image
    В прошлой статье мы рассказали о Nemesida WAF Free — бесплатном инструменте для защиты сайтов и API от хакерских атак, а в этой решили сделать обзор популярного сканера уязвимостей Wapiti.


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


    Nikto, W3af (написан на Python 2.7, поддержка которого закончилась) или Arachni (с февраля более не поддерживается) — наиболее популярные решения, представленные в бесплатном сегменте. Разумеется, есть и другие, например, Wapiti, на котором мы решили остановимся.


    Wapiti работает со следующими типами уязвимостей:


    • раскрытие файла (локальные и удаленные, fopen, readfile);
    • инъекции (PHP / JSP / ASP / SQL-инъекции и XPath-инъекции);
    • XSS (межсайтовый скриптинг) (отраженная и постоянная);
    • обнаружение и выполнение команд (eval (), system (), passtru () );
    • CRLF-инъекции (разделение ответов HTTP, фиксация сеанса);
    • XXE (XML внешняя сущность) внедрение;
    • SSRF (подделка запроса на стороне сервера);
    • использование известных потенциально опасных файлов (благодаря базе данных Nikto);
    • слабые конфигурации .htaccess, которые можно обойти;
    • наличие файлов резервных копий, раскрывающих конфиденциальную информацию (раскрытие исходного кода);
    • Shellshock;
    • открытые перенаправления;
    • нестандартные методы HTTP, которые могут быть разрешены (PUT).

    Возможности:


    • поддержка прокси HTTP, HTTPS и SOCKS5;
    • аутентификация с помощью нескольких методов: Basic, Digest, Kerberos или NTLM;
    • возможность ограничить область сканирования (домен, папка, страница, URL-адрес);
    • автоматическое удаление одного из параметров в URL;
    • множественные меры предосторожности против бесконечных циклов сканирования (пример: ifor, ограничение значений для параметра);
    • возможность установки приоритета для изучения URL-адресов (даже если не находятся в области сканирования);
    • возможность исключить некоторые URL-адреса из сканирования и атак (например: URL logout);
    • импорт файлов cookie (получение их с помощью инструмента wapiti-getcookie);
    • возможность активировать / деактивировать проверку сертификатов SSL;
    • возможность извлечь URL из JavaScript (очень простой JS-интерпретатор);
    • взаимодействие с HTML5;
    • несколько вариантов управления поведением и ограничениями crawler’a;
    • установка максимального времени для процесса сканирования;
    • добавление некоторых настраиваемых HTTP-заголовков или настройка пользовательского User-Agent.

    Дополнительные возможности:


    • создание отчетов об уязвимостях в различных форматах (HTML, XML, JSON, TXT);
    • приостановка и возобновление сканирования или атаки (механизм сеанса с использованием баз данных SQLite3);
    • подсветка в терминале для выделения уязвимости;
    • разные уровни логирования;
    • быстрый и простой способ активации / деактивации модулей атаки.

    Установка


    Актуальную версию Wapiti можно установить 2 способами:


    • cкачать исходник с официального сайта и запустить скрипт установки, предварительно установив Python3;
    • c помощью команды pip3 install wapiti3.

    После этого Wapiti будет готов к работе.


    Работа с инструментом


    Для демонстрации работы Wapiti мы будем использовать специально подготовленный стенд sites.vulns.pentestit.ru (внутренний ресурс), содержащий различные уязвимости (Injection, XSS, LFI/RFI) и прочие недостатки веб-приложений.


    Информация предоставлена исключительно в ознакомительных целях. Не нарушайте законодательство!


    Базовая команда для запуска сканера:


    # wapiti -u <target> <options>

    При этом имеется довольно подробная справка с огромным количеством опций запуска, например:


    --scope — область применения
    Если вместе с URL для сканирования указать параметр scope, то можно регулировать область сканирования сайта, указав как отдельную страницу, так и все страницы, которые получится найти на сайте.


    -s и -x — параметры добавления или удаления конкретных URL-адресов. Данные параметры полезны, когда необходимо добавить или удалить конкретный URL-адрес в процесса сканирования.


    --skip — указанный параметр с этим ключом будет сканироваться, но не будет атаковаться. Полезно, если есть какие-то опасные параметры, которые лучше исключить при сканировании.


    --verify-ssl — включение или отключение проверки сертификата.
    Сканер Wapiti модульный. Однако, для запуска конкретных модулей, из числа тех, которые автоматически подключаются во время работы сканера, нужно использовать ключ -m и перечислять нужные через запятую. Если ключ не использовать, то будут по умолчанию работать все модули. В самом простом варианте выглядеть это будет следующим образом:


    # wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxe

    Данный пример использования означает, что мы будем использовать только модули SQL, XSS и XXE при сканировании цели. Помимо этого, можно фильтровать работу модулей в зависимости от нужного метода. Например -m “xss: get, blindsql: post, xxe: post”. В таком случае модуль xss будет применяться к запросам, передаваемым методом GET, а модуль blibdsql — к POST-запросам и т.д. Кстати, если какой-то модуль, который был включен в список, не потребовался во время сканирования или работает очень долго, то нажав комбинацию Ctrl+C можно пропустить использование текущего модуля, выбрав соответствующий пункт в интерактивном меню.


    Wapiti поддерживает передачу запросов через прокси-сервер с помощью ключа -p и аутентификацию на целевом сайте через параметр -a. Также можно указать тип аутентификации: Basiс, Digest, Kerberos и NTLM. Для последних двух может потребоваться установка дополнительных модулей. Кроме того, можно вставлять в запросы любые заголовки (в том числе произвольный User-Agent) и многое другое.


    Для использования аутентификации можно использовать инструмент wapiti-getcookie. C его помощью мы формируем cookie, которые Wapiti будет использовать при сканировании. Формирование cookie выполняется с помощью команды:


    # wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.json

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


    image


    На выходе получаем файл в формате JSON. Другой вариант — добавить всю необходимую информацию через параметр -d:


    # wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"

    Результат будет аналогичный:


    image


    При рассмотрении основного функционала сканера, конечным запросом для проведения тестирования веб-приложения в нашем случае стал:


    # wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://myproxy:3128

    где среди прочих параметров:


    -f и -o — формат и путь для сохранения отчета;


    -m — подключение всех модулей — не рекомендуется, т.к. будет сказываться на времени тестирования и размере отчета;


    --color — подсвечивать найденные уязвимости в зависимости от их критичности по версии самого Wapiti;


    -c — использование файла с cookie, сгенерированного с помощью wapiti-getcookie;


    --scope — выбор цели для атаки. Выбрав вариант folder будет сканироваться и атаковаться каждый URL, начиная с базового. Базовый URL должен иметь косую черту (без имени файла);


    --flush-session — позволяет проводить повторное сканирование, при котором не будут учитываться предыдущие результаты;


    -A — собственный User-Agent;


    -p — адрес прокси-сервера, если необходим.


    Немного об отчете


    Результат сканирования представлен в виде подробного отчета по всем найденным уязвимостями в формате HTML-страницы, в понятном и удобном для восприятия виде. В отчете будут указаны категории и число найденных уязвимостей, их описание, запросы, команды для curl и советы о том, как их закрыть. Для удобства навигации в названия категорий будет добавляться ссылка, кликнув по которой можно перейти к ней:


    image


    Существенный минус отчета — отсутствие как таковой карты веб-приложения, без которой не будет понятно, все ли адреса и параметры были проанализированы. Также есть вероятность ложных срабатываний. В нашем случае в отчете фигурируют «файлы бэкапов» и «потенциально опасные файлы». Их количество не соответствует действительности, так как подобных файлов на сервере не было:


    image


    Возможно, некорректно работающие модули исправят со временем. Также недостатком отчета можно назвать отсутствие окраски найденных уязвимостей (в зависимости от их критичности), или хотя бы их разделения по категориям. Единственное, как мы можем косвенно понять о критичности найденной уязвимости — это применять параметр --color при сканировании и тогда найденные уязвимости будут окрашиваться различными цветами:


    image


    Но в самом отчете подобная окраска не предусмотрена.


    Уязвимости


    SQLi


    Cканер частично справился с поиском SQLi. При поиске SQL-уязвимостей на страницах, где не требуется аутентификация, никаких проблем не возникает:


    image


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


    XSS


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


    image


    LFI/RFI


    Сканер нашел все заложенные уязвимости:


    image


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


    Оставайтесь здоровыми и защищенными!

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      0
      Ни единой ссылки в статье. А ведь насколько по другому воспринимался бы этот параграф, если бы был написан следующим образом:

      Nikto, W3af (написан на Python 2.7, поддержка которого закончилась) или Arachni (с февраля более не поддерживается) — наиболее популярные решения, представленные в бесплатном сегменте. Разумеется, есть и другие, например, Wapiti, на котором мы решили остановиться


      Не надо заставлять читателя гуглить без необходимости

      Ed: Пардон, одна-единственная ссылка на офсайт в середине статьи обнаружилась. Но дотуда ещё надо было дочитать
        0
        продублировали ссылку на Wapiti в шапке

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое