Авторы: Google (Michael Zalewski, Niels Heinen, Sebastian Roschke, etc.)
Лицензия: Apache 2.0 (бесплатно)
Страница проекта: code.google.com/p/skipfish/
Последняя версия: 2.10b (Dec 4, 2012) / входит в сборку Kali Linux, отдельно ставить не надо.
Аналоги: Nikto, Websecurify, Netsparker, w3af, Arachni
Согласно описанию разработчика, утилита предназначена для проведения разведки на предмет защищённости тестируемого веб-приложения. Она создаёт интерактивную карту сайта с помощью рекурсивного- и основанного на словарях анализе, после чего сканер применяет к полученным элементам различные проверки защищённости (обещают, что non-disruptive, но в любом случае тестирование лучше проводить не на продакшне). По окончанию работ формируется отчёт для анализа результатов человеком.
Какие именно проверки делает утилита? XSSi, SQLi, XMLi/XPATHi, CSSi, corrupt MIME, SSL attacks, shellcode/file injections, sensible data/files revealing. Полный список проверок перечислен здесь: https://code.google.com/archive/p/skipfish/wikis/SkipfishDoc.wiki
Для быстрого запуска достаточно использовать команду:
$ ./skipfish -o output_dir http://targettestsite.com
здесь ключ -o и параметр за ним (/logs) означает куда складывать логи работы, далее URL цели.
Давайте натравим нашу рыбку на веб-овечку (тренажёр WebGoat, который хостится на той же машине, где и skipfish):
$ ./skipfish -o /logs http://localhost:8080/WebGoat/start.mvc
Результат работы (ура, что-то нашлось!):
Откроем файл отчёта (выглядит симпатично и наглядно; несмотря на то, что похоже сканер не прошёл дальше окна логина, он нашёл несколько подозрений на уязвимости на сайте):
Как мы заметили выше, некоторые сайты могут требовать аутентификацию. Skipfish умеет работать как с простой аутентификацией, так и использовать HTTP cookies.
Для простых HTTP credentials попробуйте команду вида:
$ ./skipfish -A user:pass ...other parameters...
Если этот вариант не прокатит, попробуйте HTTP cookies. Залогиньтесь на сайт в браузере, а потом перехватите идентификатор сессии сниффером, например WebScarab/TamperData, либо посмотрите в настройках браузера. Далее используйте полученный идентификатор чтобы скормить его Skipfish’у:
$ ./skipfish -C name=val ...other parameters...
Есть ещё третий способ аутентификации (каноничный, если хотите) — через соответствующую форму. В этом случае Skipfish’у нужно указать адрес формы, логин, пароль, и адрес который должен открыться в случае успешного входа:
$ ./skipfish --auth-form http://example.org/login \ --auth-user myuser \ --auth-pass mypass \ --auth-verify-url http://example.org/profile \ [...other options...]
С WebGoat проходит аутентификация по HTTP cookies, например:
skipfish -C JSESSIONID=5C975D43 -o /logs http://localhost:8080/WebGoat/start.mvc
В этот раз сканер находит гораздо больше подозрительных мест в веб-приложении!
Как Skipfish определяет что сканировать и почему та или иная область уязвима? Он использует словари (dictionaries) и сигнатуры (signatures) соответственно. На Kali Linux они, а также шаблон отчёта (assets), лежат в папке /usr/share/skipfish, при необходимости их можно отредактировать в текстовом редакторе:
Вы можете управлять глубиной и качеством сканирования, используя дополнительные параметры фильтрации при запуске Skipfish и выбирая нужные словари, в том числе создавать свои, обучая Skipfish на тестируемых сайтах.
Официальная документация всё равно будет более полной, чем мой обзор, поэтому советую также прочитать и её https://code.google.com/archive/p/skipfish/wikis/SkipfishDoc.wiki