С развитием веб‑технологий появлялись и продолжают появляться новые уязвимости. Однако существует большой спектр программ, которые помогают обнаруживать уязвимости в веб‑сайтах и веб‑приложениях. Среди таких программ можно выделить skipfish — инструмент с открытым исходным кодом, предназначенный для поиска уязвимостей в веб‑приложениях путем использования атаки типа перебор по словарю.
Метод перебор по словарю основывается на последовательном пересмотре всех слов (значений) определённого вида и длины из файла с целью последующего поиска правильных значений, например, это могут быть логины и пароли.
skipfish был создан в 2009 году компанией Google. Впоследствии данный инструмент вошел в список программ, которые поставляются вместе с операционной системой Kali Linux.
Среди достоинств можно выделить следующие:
бесплатный инструмент с открытым исходным кодом (open source);
высокая производительность. skipfish написан на языке программирования «C», благодаря чему снижается нагрузка на процессор и оперативную память. Позволяет выполнять 2 000 запросов в секунду;
обширный функционал, включающий в себя такие функции, как перебор по словарю, проверка на наличие SQL‑инъекций, XML инъекций и т. д.;
распознавание всех основных веб‑уязвимостей, среди которых SQL и PHP инъекции, межсайтовый скриптинг (XSS), Path Traversal и т. д. С полным списком поддерживаемых уязвимостей можно ознакомиться на официальном сайте в разделе «Most curious! What specific tests are implemented»;
поддержка автоматического сканирования с целью определения», насколько уязвимым является веб‑сайт;
генерация отчетов в формате HTML, где подробно отображаются результаты сканирования.
Установка
skipfish уже предустановлен в операционной системе Kali Linux при условии, что на этапе установке ОС был выбран пункт default recommended tools или large default selection plus additional tools в разделе Software selection. В противном случае его необходимо установить вручную выполнив команду:
sudo apt -y install skipfish
Для проверки корректной установки в терминале необходимо ввести:
skipfish
Если в выводе команды отобразилась строка «skipfish web application scanner — version 2.10b», значит, установка произведена корректно.
Установить skipfish в последних версиях таких дистрибутивов как Ubuntu, Debian, Red Hat Enterprise Linux, CentOS/Fedora, не получится в связи с тем, что пакет отсутствует в репозиториях и устарел для данных ОС (последняя версия skipfish была выпущена в 2012 году). Собрать пакет из исходного кода также не получится из‑за всевозможных ошибок возникающих при компиляции. В качестве альтернативы можно использовать такие сканеры, как Nikto, arachni, owasp‑zap.
Использование
Как было упомянуто ранее, skipfish использует словари для сканирования и поиска уязвимостей. По умолчанию утилита использует свои собственные словари, которые расположены в /usr/share/skipfish/dictionaries
.
Запускать программу необходимо от пользователя root или при помощи sudo. Минимальный синтаксис для запуска сканирования выглядит следующим образом: skipfish ‑o имя директории
, куда будет сохранен отчет сканирования URL сайта или его IP‑адрес.
Например:
skipfish -o test http://testphp.vulnweb.com/
В качестве тестового сайта будет использоваться testphp.vulnweb.com, так как на данном сайте уже присутствуют некоторые уязвимости, благодаря чему будет наглядно показан процесс сканирования.
После запуска команды отобразится приветственное описание, в котором, в частности, говорится о том, что сканирование можно прервать в любое время путем нажатия на комбинацию клавиш Ctrl + С, а также о том, что если количество запросов будет отображаться в диапазоне 100-200, то процесс сканирования займет много времени:
После того, как будет нажата любая клавиша, или по истечению 60 секунд начнется процедура сканирования:
Показать статус сканирования можно путем нажатия на клавишу Пробел. Отобразится раздел In-flight request, который в режиме реального времени показывает сканируемые URL:
Среди полезных параметров можно выделить следующие:
-A имя пользователя:пароль – если на сканируемом сайте используется аутентификация при помощи логина/пароля, следует задать их при помощи ключа -A;
-r r_limit – задает максимальное количество запросов, которое сможет отправлять skipfish. В качестве значения можно указать число от 1 до 100000000;
-W wordlist – задает путь до файла со словарем, т.е. можно использовать собственные файлы словарей, а не только стандартные;
-I string – будут сканироваться только те URL, которыезаданы в параметре -I.
Процесс сканирования может занять довольно много времени — от 30 минут до нескольких часов. Длительность сканирования зависит от структуры веб‑сайта, скорости интернет соединения, а также от типа используемого словаря. Например, использование словаря complete занимает больше времени, чем при использование minimal. В любой момент сканирование можно остановить путем нажатия на сочетание клавиш Ctrl + С. После этого в терминале отобразится надпись Scan aborted by user, bailing out!, которая проинформирует, что сканирование завершено пользователем. После этого утилита сгенерирует отчет с именем index.html, который будет сохранен в ранее указанную директорию:
Файл отчета имеет следующую структуру.
Блок Document type overview:
В данном разделе все файлы сайта разбиваются на типы — html, css, plain text, xml и т. д. При раскрытии категории отображаются все найденные URL определённого типа:
При нажатии на show trace + отобразится трассировка запроса, которая включает в себя отправленный запрос (REQUEST) и полученный ответ (RESPONSE):
В блоке Issue type overview отображаются найденные уязвимости. Справа от названия уязвимости находится число, которое сообщает о количестве найденных уязвимостей данного типа:
skipfish использует 4 уровня критичности для группировки уязвимостей:
High risk — высокий уровень критичности. Данный тип уязвимостей существенно влияет на безопасность сайта. Выделяется красным цветом. К таким уязвимостям относят SQL/PHP инъекции, OS command injection (инъекция команд операционной системы), атаки типа Format String, уязвимости HTTP PUT.
Medium risk — средний уровень критичности. На данный тип уязвимостей необходимо обратить внимание. Выделяется оранжевым цветом. К таким уязвимостям относят XSS атаки, Directory Browsing, CSS инъекции.
Low risk — низкий уровень критичности. Данный тип уязвимостей оказывает минимальное воздействие на безопасность сайта. Выделяется синим цветом. К таким уязвимостям относят SSL Common Name Mismatch Error (несоответствие значение Common Name SSL сертификата к домену), XSRF (cross‑site request forgery — «межсайтовая подделка запроса»), использование само подписных сертификатов.
informational — информационный уровень. Содержит информацию о найденных версиях компонентов сайта, которые отображаются на веб‑страницах, а также отображает битые ссылки, страницы с 404 ошибкой, отладочную информацию сервера. Обозначается зеленым цветом.
Для просмотра найденной уязвимости можно перейти по URL:
Или открыть файл с трассировкой:
Как видно выше, сканер обнаружил URL сайта, на которых возможно произвести SQL инъекцию.
Рассмотрим пример с обнаруженной XSS атакой. skipfish нашел 12 URL, на которых присутствует уязвимость XSS:
Перейдем по одной из предложенных ссылок и в поле, где пользователи сайта могут оставлять комментарии, введем следующий код:
<script>alert("Hello from skipfish!")</script>
Далее необходимо нажать на кнопку add message или клавишу Enter, и можно увидеть воспроизведённую уязвимость XSS:
Также skipfish ищет отладочную информацию и ошибки, связанные с подключением, например, к базам данных, как на скриншоте ниже:
А также такие уязвимости, как Directory listing:
Подводя итоги, можно сказать, что несмотря на простоту использования skipfish обладает обширной базой уязвимостей. Отчет, который утилита генерирует по завершению сканирования, имеет удобную структуру, а также позволяет сразу перейти к работе с найденными уязвимостями.
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.