Как найти слабый сайт

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-атак.

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

Заключение

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

Как багхантеры ищут уязвимости: лайфхаки и неочевидные нюансы

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

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

Изображение сгенерировано нейросетью Midjourney
Изображение сгенерировано нейросетью Midjourney

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

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

Пример моих выплат с платформы Standoff 365 Bug Bounty (standoff365.com/#bug-bounty)

Пример моих выплат с платформы Standoff 365 Bug Bounty (standoff365.com/#bug-bounty)

Дисклеймер

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


Статья будет интересна прежде всего багхантерам-новичкам. Начнем с XSS-уязвимостей: стандартные инструменты (взять хотя бы консоль браузера) помогут найти брешь немного нестандартным способом. С хранимыми XSS, когда полезная нагрузка выглядит не сложнее, чем '"><img src=x onerror=alert();>,все предельно понятно. В месте, где нет фильтрации, достаточно вставить этот JavaScript-код — и XSS сработает. Однако бывает так, что в результате действий пользователя полезная нагрузка может оказаться в теге <script>, заранее расположенном на странице. Такие XSS видно не сразу, поэтому приходится использовать payload типа '-alert()-' либо "-alert()-" (или другие, нужно смотреть по ситуации). Я детектирую подобные XSS-уязвимости с помощью стандартного веб-инспектора Safari, что сильно упрощает поиск.

Ошибки в консоли помогают обнаруживать уязвимости

Ошибки в консоли помогают обнаруживать уязвимости

Если вы вставили полезную нагрузку и веб-инспектор показывает ошибку JavaScript, значит, есть огромная вероятность найти XSS-уязвимость. Все просто: '"><img src=x onerror=alert();>, добавленный в существующий тег <script>, нарушает синтаксис языка своими кавычками, и JavaScript выдает ошибку.

Что касается SSRF-уязвимостей, которые позволяют отправлять запросы от имени сервера, то для их проверки я люблю использовать payload https://0/, который эквивалентен https://localhost или https://127.0.0.1. Максимально просто, но про этот способ исследователи безопасности почему-то всегда забывают. Еще больше таких же интересных полезных нагрузок можно найти здесь.

Самый нестандартный метод поиска логических уязвимостей предложил исследователь под ником @OldPassword. Ранее с этой техникой я не сталкивался, поэтому решил рассказать о ней в статье. Может быть, помните, как в одной популярной отечественной социальной сети была обнаружена уязвимость, позволяющая отмечать себя на фотографиях любых пользователей. До сих пор неизвестно, как она попала в сеть, но люди массово стали отмечаться на фотографиях знаменитостей. Брешь оперативно закрыли, и о проблеме быстро забыли. Пообщавшись с исследователем, который обнаружил эту уязвимость, я узнал, как именно он нашел небезопасную прямую ссылку на объект — IDOR. Багхантер не применял никаких инструментов вроде Burp Suite Professional, а воспользовался методом копирования кнопки. Он буквально скопировал кнопку «Отметить на фотографии» под той фотографией в соцсети, где такая кнопка была, и добавил ее под фотографию знаменитости, где, согласно логике работы приложения, ее быть не должно. Так у багхантера появилась возможность отмечать себя на фото: при нажатии кнопки вызывалась форма — все как положено.

Вот как выглядел код:

<a id="pv_tag_link" onclick="stManager.add(['phototag.js', 'phototag.css', 'tagger.css', 'tagger.js'], function() { Phototag.startTag(); })">Отметить человека</a>

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

Есть много способов обнаружения уязвимостей типа race condition (ошибка проектирования приложения, при которой его работа зависит от того, в каком порядке выполняются части кода). Как правило, их проверяют на одном из действий, например в функции вывода денежных средств. При запуске Intruder вместо одной выплаты оформляется две. Сейчас уже почти нет сервисов и приложений, где бы этот метод был рабочим. Результативен (пока!) похожий сценарий: имея положительный баланс веб-кошелька, можно одновременно совершить покупку и вывести средства. Race condition в этом случае может сработать несмотря на то, что в некоторых местах сайта уязвимость может быть исправлена ранее. Вы удивитесь, но обычный curl — излюбленный инструмент злоумышленников для проведения атак race condition, так как он самый быстрый и гибкий. Правильно заметил Исаак Дойчер, гениальность — в простоте.

curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_7}' & curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_8}' & curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_9}' & curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_10}'

Без практики — никуда!

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

Главная страница сайта

Главная страница сайта

Приоткрою завесу тайны и расскажу лишь про те уязвимости, которые можно найти на сайте прямо сейчас (в дальнейшем буду добавлять новые). Сайт представляет собой простейший блог на PHP, посвященный космосу. Веб-страницы верстались с помощью Bootstrap. На сайте есть вход через Telegram, личный кабинет пользователя и фотогалерея. Несмотря на более чем скромную функциональность, там уже заложено десять уязвимостей.

XSS в редиректе

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

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

Странная ссылка

Странная ссылка

Такие уязвимости периодически встречаются в скоупах программ bug bounty, поэтому их стоит приносить и репортить. Давайте разберемся, почему она работает.

Исходный код скрипта, отвечающего за редирект

Исходный код скрипта, отвечающего за редирект

На скриншоте видно, что редирект осуществляется с помощью JavaScript. При этом нет валидации параметра $_GET['url']. Полезная нагрузка вида javascript:alert();// не работает в хедере Location, поэтому в будущем я рекомендую использовать его. В нашем случае код написан именно так, как делать не надо. Таким образом, имеет смысл всегда листать страницу до конца, потому что проблема может скрываться в самом последнем предложении.

Утечка Telegram ID

Эта уязвимость опасна тем, что позволяет злоумышленникам проводить дальнейшие атаки на пользователей системы. Зная ID Telegram-аккаунта, они могут получить более подробную информацию о пользователях. В идеале, конечно, такие данные следует скрывать. На главной странице сайта находится блок, в котором показываются последние зарегистрированные пользователи.

Последние зарегистрированные на сайте пользователи

Последние зарегистрированные на сайте пользователи

Если внимательно изучить код этого блока (выделен на скриншоте синим), можно заметить в нем атрибут userid, из-за которого происходит утечка ID пользователей, вошедших на сайт через Telegram. На момент публикации статьи я исправил эту уязвимость, чтобы ID не утекали.

Причина утечки данных

Причина утечки данных

IDOR на удаление фотографий

Вот где пригодится userid (ниже представлен запрос на удаление фотографий): GET- параметр userid может быть произвольным, а значит, пользователь может удалять чужие фотографии из галереи.

Удаление фотографий пользователя 316559347

Удаление фотографий пользователя 316559347
Удаление фотографий пользователя 563527258
Удаление фотографий пользователя 563527258

SSRF-уязвимости

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

Личный кабинет пользователя

Личный кабинет пользователя

В самой функциональности есть SSRF-уязвимость. Она эксплуатируется максимально просто, хотя и в два этапа. Я это сделал для того, чтобы исследователи могли поэкспериментировать с ней и приобрести необходимый опыт. На практике встретить уязвимость, позволяющую читать локальные файлы, достаточно сложно. Обычно SSRF дает доступ к внутренним узлам, а схема file:/// остается недоступной.

Запрос на загрузку фотографии

Запрос на загрузку фотографии

После этого в галерее появляется непрогрузившаяся фотография, которая выглядит так:

И содержимое фотографии, то есть содержимое файла /etc/hosts:

Фотография, открытая через блокнот

Фотография, открытая через блокнот

Логические уязвимости

Может быть ситуация, когда вход на сайт осуществляется с помощью Telegram-аккаунта, у которого нет логина. Тогда пользователь сам должен ввести короткое имя своего аккаунта. И в этом случае возникает ошибка (exception), указывающая, что username не может быть равен null.

Ошибки, возникающие в процессе работы приложения

Ошибки, возникающие в процессе работы приложения

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

Утечка исходного кода в фотографии

Утечка исходного кода в фотографии

DoS-уязвимости

Если с помощью Intruder рассылать запросы слишком быстро, можно проверить веб-сайт, например фотогалерею, на устойчивость к DoS-атаке. Intruder — это один из инструментов Burp Suite Professional, с помощью которого пользователи могут быстро отправлять запросы, делать перебор различных параметров в запросе. Галерея будет грузиться бесконечно долго и, возможно, не загрузится вовсе. За обнаружение уязвимостей этого класса чаще всего платят минимальное вознаграждение. Но, думаю, если речь будет идти о целом разделе сайта, можно рассчитывать на достойную награду. Например, один из багхантеров получил за найденную DoS-уязвимость 1000 $.

Демонстрация атаки на галерею

Демонстрация атаки на галерею
Демонстрация атаки
Демонстрация атаки

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

Результат атаки

Результат атаки

Охота за багами начинается… сейчас

Чтобы стать крутым багхантером, жизненно важен опыт. Цель моей работы состояла в том, чтобы помочь максимально просто и быстро получить опыт по поиску багов. На практике я рассмотрел самые популярные уязвимости. Тестовый стенд уже доступен. Более того, я дополнил его уязвимостями, не описанными в статье. Если хотите попрактиковаться, предлагаю начать прямо сейчас! Найденные уязвимости можете смело репортить в комментариях 🙂


Автор: yurasikkkkk

Советуем подписаться на его канал, посвященный багхантингу.

В статье рассказывается:

  1. Что такое уязвимость сайта
  2. 10 наиболее уязвимых мест веб-сайта
  3. Профилактика уязвимости сайта с помощью аудита
  4. Лучшие сканеры уязвимостей сайта онлайн
  5. ТОП-10 бесплатных сканеров уязвимостей сайтов
  6. Что делать, если злоумышленники уже воспользовались уязвимостью вашего сайта

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

Что такое уязвимость сайта

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

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

Что такое уязвимость сайта

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

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

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

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

Результаты специального исследования на тему самых уязвимых сайтов, проведенного компанией Positive Tehnologics, показали, что атаке со стороны хакеров наиболее подвержены те ресурсы, которые написаны на PHP и имеют собственный движок. Самими безопасными оказались сайты, где использованы технологии Java/ASP.NET и коммерческие CMS.

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

10 наиболее уязвимых мест веб-сайта

Перечислим основные уязвимости сайтов, на которые стоит обратить внимание.

Инъекции/Injection

Инъекции/Injection

Инъекции — это слабые места, которые возникают из-за передачи пользователем непроверенных данных интерпретатору для выполнения. То есть любой интернет-пользователь может произвольно ввести код в интерпретаторе. Самыми распространенными видами инъекций считаются SQL, OS, XXE и LDAP.

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

Проблемы с аутентификацией и проверкой сессий

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

XSS

XSS

Инъекции и проблемы с аутентификацией и проверкой сессий наиболее опасны для сайта и его сервера. XSS для сервера не представляет серьезную угрозу. Но при этом XSS опасна для посетителя сайта. XSS работает в его браузере и позволяет украсть его информацию.

XSS, или Cross-Site Scripting, работает в JavaScript по такому же принципу, как и в инъекциях. Мошенник передает в одном из полей специальную строчку с JS-кодом. Браузер думает, что этот код отправил сайт, и выполняет его. При этом код может быть любым. Чтобы защититься от подобных атак, все специальные символы нужно экранировать при помощи функции html special chars или аналогичных ей.

Проблемы с контролем доступа

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

Яркий пример — файлы в корне веб-сайта. Допустим, файл wp-config.php с паролями доступа к базе данных закрыт благодаря своему расширению php. Но его редактирование в Vim и неправильное сохранение ведет к созданию резервной копии с расширением .swp, которую уже можно спокойно открывать в браузере.

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

Неправильная конфигурация

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

Незащищенная конфиденциальная информация

Незащищенная конфиденциальная информация

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

Слабое противостояние атакам

Большая часть приложений и API не могут выявлять, предотвращать и реагировать как на ручные, так и на автоматизированные атаки. У них нет для этого базового функционала. Чтобы надежно защищать ресурс от атак, недостаточно просто проверять соответствие логина и пароля.

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

Уязвимости CSRF

При атаке CSRF или Cross-Site Request Forgery хакер может отправить с браузера пользователя тот или иной HTTP-запрос, в том числе cookie, файлы сеанса и любые другие данные, которые автоматически включаются в слабозащищенное веб-приложение.

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

Применение компонентов с уязвимостями

Применение компонентов с уязвимостями

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

Незащищенные API

Современные приложения состоят сейчас в основном из клиентских приложений и богатых API интерфейсов, доступных через JavaScript в браузере или из мобильных приложений. Они могут работать по протоколам SOAP/XML, REST/JSON, RPC, GWT и т. д. Эти API часто не защищены и также разработаны со множеством ошибок, ведущих к уязвимости.

Профилактика уязвимости сайта с помощью аудита

Профилактика уязвимости сайта с помощью аудита

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

Как найти уязвимость на сайте? Комплексная проверка безопасности включает в себя следующие действия:

  • Атаку методом подбора паролей.

  • Внедрение XML-сущностей.

  • Поиск элементов с известными уязвимостями.

  • Проверку на удаленное выполнение произвольного кода.

  • Выявление уязвимых мест в компонентах сервера и веб-окружении сайта.

  • Проверку на наличие инъекций кода.

  • Попытки обойти систему аутентификации.

  • Выявление CSRF-/XSS-уязвимости сайта.

  • Попытки перехватить привилегированные аккаунты или их сессии.

  • Проверку вероятности файловых инъекций Remote File Inclusion / Local File Inclusion.

  • Проверку на открытые редиректы и перенаправления на другие веб-ресурсы.

  • Сканирование директорий при помощи перебора и взлома через индекс Google.

  • Проверку всех форм на сайте: регистрации, входа, поиска и других.

  • Проверку возможности открыто получать конфиденциальные данные.

  • Проверку на атаки класса Race Condition — ошибки при проектировании многопоточных систем и приложений.

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

Выделяют 3 вида сканеров:

  • Сетевые. Проводят дистанционную проверку через подключение к сетевым ресурсам. Этот тип сканеров самый востребованный.

  • Пассивные. Информацию они получают из сетевого трафика, но при этом, в отличие от сетевых, снижают влияние сканера на уязвимые места.

  • Локальные. Устанавливаются прямо на проверяемый узел и позволяют получить максимально достоверные данные. Поиск уязвимостей на сайте предполагает сравнение атрибутов файлов.

Лучшие сканеры уязвимостей сайта онлайн

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

Далее мы рассмотрим 7 самых распространенных и опробованных на практике сканеров. Каждый их них был опробован на независимых точках двух платформ (.NET и php): premium.pgabank.com и php.testsparker.com.

OWASP ZAP

OWASP ZAP

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

Ключевые возможности OWASP ZAP:

  • Man-in-the-middle Proxy.

  • Traditional and AJAX spiders.

  • Automated scanner.

  • Passive scanner.

  • Forced browsing.

  • Fuzzer.

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

Маркетплейс позволяет чуть расширить функционал инструмента.

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

При тестировании инструмент выявил на сайте php.testsparker.com Blind SQL Injection. На этом уязвимые места закончились. На premium.bgabank.com тестирование уязвимостей сайта дало более интересные результаты: инструмент нашел возможность Server Side Include (SSI) и Reflected Cross Site Scripting.

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

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

W9scan

W9scan

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

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

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

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

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

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

Wapiti

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.

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

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

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

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

Arachni

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.

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

  • Allowed HTTP methods.

  • Backup files.

  • Backup directories.

  • Common administration interfaces.

  • Common directories.

  • Common files.

Впечатляет, не так ли? Но это не все. «Паутина» включает в себя еще множество плагинов: Passive Proxy, Dictionary attacker for HTTP Auth, Cookie collector, WAF Detector и другие.

Инструмент обладает лаконичным и приятным интерфейсом.

Результаты сканирования на сайтах при тестировании. 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.

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

Надо заметить, что Arachni формирует очень привлекательные визуально отчеты в форматах HTML, XML, text, JSON, Marshal, YAML, AFR.

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

Tenable.io

Tenable.io

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

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

Помимо проверки приложений, инструмент также сканирует сеть, выявляя, есть ли в ней известные уязвимости и хосты. Можно подключить агентов для анализа внутренней сети. Отчеты создаются в форматах *.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.

Далее — premium.bgabank.com. Уязвимости с приоритетом high:

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

  • вышедшая из поддержки версия PHP;

  • уязвимости Apache;

  • уязвимости Bootstrap;

  • уязвимости JQuery.

Инструмент Tenable.io отлично себя зарекомендовал, выявив много уязвимостей. Благодаря удобному графическому интерфейсу и представлению данных работать с ним легко. Еще одно преимущество состоит в том, что в Tenable.io присутствуют дополнительные профили сканирования. Отличительная черта инструмента — облачная структура. Программа для поиска уязвимостей на сайте не пользуется локальными вычислительными ресурсами рабочего компьютера. При этом проверять веб-приложения в локальной сети она не может.

Кейс: VT-metall

Узнай как мы снизили стоимость привлечения заявки в 13 раз для металлообрабатывающей компании в Москве

Узнать как

Burp Suite Pro

Burp Suite Pro

Burp Suite — это комплексный инструмент для проверки приложений. Состоит из различных утилит, предназначенных для улучшения и ускорения поиска уязвимостей в приложении.

Burp Suite включает в себя следующие утилиты:

  • Прокси-сервер, перехватывающий трафик, который проходит по протоколу HTTP(S), в режиме man-in-the-middle. Утилита находится между браузером и целевым приложением, помогает перехватить, изучить и изменить трафик, идущий в двух направлениях.

  • Spider. Веб-паук, автоматически собирающий данные о содержании и функциях приложения (сайта).

  • Scanner (только в Burp Suite Pro). Инструмент, который автоматически ищет уязвимости в веб-приложениях.

  • Гибкая утилита, предназначенная для различных автоматизированных атак. К примеру, она может перебирать идентификаторы, собирать важную информацию и т. д.

  • Сервис, позволяющий вручную менять и повторно направлять отдельные HTTP-запросы, а также анализировать ответы приложения.

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

  • Утилита, позволяющая автоматически или вручную кодировать и декодировать данные в приложении.

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

  • Инструмент, добавляющий расширения в Burp Suite.

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

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

Issue Definition

Все уязвимости разделены на 3 группы: high, medium, low. Кроме того, есть группа information, включающая в себя алгоритмы сбора разных полезных данных о проверяемом сайте. Запустив сканирование, в окне Scan queue вы сможете увидеть поэтапный процесс анализа. Есть различия по цвету.

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

Options

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

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

На сайте 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

Acunetix

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

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

Во вкладке Scans вы можете следить за процессом проверки и другими диагностическими данными.

Scans

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

При тестировании на php.testsparker.com программа неплохо себя показала, а вот с premium.bgabank.com ожиданий не оправдала.

Acunetix обладает обширными возможностями и полезен тем, кто нуждается в stand-alone решении. Имеет простой и понятный интерфейс. Инфографика и отчетность выглядят весьма приемлемо. При анализе не исключены ошибки.

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

Один из важнейших параметров в сфере IT — безопасность. Известно ли вам, что уязвимости есть у 95 % тестируемых приложений?

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

На диаграмме от Cenzic отражены выявленные уязвимости разных видов

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

  • Scan My Server;

  • SUCURI;

  • Qualys SSL Labs, Qualys FreeScan;

  • Quttera;

  • Detectify;

  • SiteGuarding;

  • Web Inspector;

  • Asafa Web;

  • Netsparker Cloud;

  • UpGuard Web Scan;

  • Tinfoil Security.

  1. Scan My Server

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

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

  2. SUCURI

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

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

  3. Qualys SSL Labs, Qualys FreeScan

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

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

  4. Quttera

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

  5. Detectify

    Программа для поиска уязвимостей на сайте, основанная на SaaS. С помощью сканера можно автоматически выполнять свыше 100 тестов безопасности, включая тестирование OWASP Top 10, проверять, нет ли на сайте опасного ПО и т. д.

    Detectify предлагает бесплатный тестовый период на 21 день.

  6. SiteGuarding

    С помощью SiteGuarding можно проверять наличие на домене вредоносного ПО, SPAM-инъекций, определять, нет ли сайта в черных списках, и получать другую информацию.

    Программа совместима с WordPress, Joomla, Drupal, Magento, osCommerce, Bulletin и другими движками.

    SiteGuarding также подходит для удаления вредоносного ПО с сайта.

  7. Web Inspector

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

  8. Asafa Web

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

  9. Netsparker Cloud

    Netsparker Cloud проверяет веб-приложения на безопасность и может выявить свыше 25 опасных уязвимостей. Для веб-ресурсов с открытым исходным кодом программа бесплатна. Кроме того, вы можете воспользоваться ее пробной версией.

  10. UpGuard Web Scan

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

  11. Tinfoil Security

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

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

    Один из основных факторов безопасности любого ресурса — непрерывный мониторинг. Поэтому сервис сообщает о сбое или попытке взлома.

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

Что делать, если злоумышленники уже воспользовались уязвимостью вашего сайта

Что делать, если злоумышленники уже воспользовались уязвимостью вашего сайта

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

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

  • Оперативно загружайте новую версию CMS.

  • Пользуйтесь плагинами для защиты сайта (для WordPress подойдет Wordfence или Sucuri) и непременно обновляйте их версии.

  • Ставьте сложный пароль и постоянно меняйте его.

  • Обязательно меняйте пароль, если сообщили его третьему лицу (программисту, SEO-оптимизатору и т. д.).

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

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

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

  • Поставьте на компьютер антивирус и постоянно проверяйте его на вирусы.

Скачайте полезный документ по теме:

Чек-лист: Как добиваться своих целей в переговорах с клиентами

Если ваш ресурс подвергся атаке, восстановления (бэкапа) будет недостаточно. Как действовать? В такой ситуации необходимо:

  • сразу же выявить, какие файлы были изменены (заменены), например index.php, шаблон, изображение и т. д.;

  • сделать скриншоты последствий;

  • сообщить о случившемуся хостинг-провайдеру (и согласовать с ним все действия);

  • запротоколировать файлы сайта в отдельном каталоге вместе с доступом, временем и модификацией;

  • восстановить (бэкап), воспользовавшись резервной копией сайта или при помощи хостера;

  • скачать логи ошибок (доступа) к сайту или попросить их у хостера (после чего скопировать в отдельный каталог);

  • проанализировать время изменения сайтов и соотнести их с указанным временем в логах (это поможет установить характер уязвимости и IP-адрес хакера);

  • обновить скрипты и, если это невозможно, перестать использовать все уязвимые модули;

  • поменять пароли доступа (ВСЕ!).

Дмитрий Свистунов

Статья опубликована: 19.11.2019

Облако тегов

Понравилась статья? Поделитесь:

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

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

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

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

  • 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

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

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

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

Ahrefs

Сервис для анализа сайтов Ahrefs

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

Другая особенность сервиса – отдельное расширение для Google Chrome и Mozilla Firefox. С его помощью можно буквально в пару кликов узнать такие показатели, как:

  • рейтинг домена;
  • рейтинг страницы;
  • ранк Ahrefs;
  • бэклинки;
  • домены-доноры;
  • оценочный трафик;
  • количество ключевых фраз.

Стоимость: есть бесплатная 7-дневная пробная версия, базовый тариф доступен за $99/месяц

Официальная страница: Ahrefs

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Mention

Сервис для анализа сайтов Mention

Mention – онлайн-сервис, пользующийся популярностью у сотен тысяч различных компаний, в число которых входят ASOS, Microsoft и Spotify. Он анализирует бренды на 42 языках с помощью всевозможных ресурсов: социальных сетей, новостных порталов, форумов и многих других интернет-площадок. Благодаря этому можно узнать, где и как часто упоминается сайт, какие у него отзывы и прочее. Регистрация на сервисе довольно простая: можно создать учетную запись в несколько кликов либо авторизоваться через популярные международные социальные сети.

Стоимость: есть 14-дневная демоверсия, начальный тариф от 29€/месяц

Официальная страница: Mention

SimilarWeb

Сервис для анализа сайтов SimilarWeb

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

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

Стоимость: есть 7-дневная бесплатная версия, стоимость премиум-версии обсуждается с менеджером индивидуально

Официальная страница: Similar Web

Brand24

Сервис для анализа сайтов Brand24

Brand24 – англоязычный сервис, пользующийся популярностью у 30 000 различных организаций по всему миру: он сотрудничает с такими брендами, как Panasonic, IKEA, H&M, Raiffeisen Bank. Он предоставляет данные из более чем 20 социальных сетей, новостных порталов, блогов и других интернет-площадок. С его помощью можно найти упоминания о конкурентах в указанных источниках и определить отношение клиентов к компании.

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

Стоимость: есть бесплатная 14-дневная пробная версия, премиум-подписка начинается от $49/месяц

Официальная страница: Brand24

MegaIndex

Сервис для анализа сайтов MegaIndex

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

Стоимость: есть бесплатная версия, расширенный функционал можно получить в платных тарифах, стоимость которых начинается от 1490 ₽ в месяц

Официальная страница: MegaIndex

Hootsuite

Сервис для анализа сайтов Hootsuite

Hootsuite предназначен для отслеживания упоминаний сайта в социальных сетях Twitter, Facebook, LinkedIn, Foursquare и Google+. Сервис пользуется популярностью среди 10 млн пользователей из разных стран, в числе которых есть известные компании – NYC и Hershel.

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

Стоимость: есть бесплатный 30-дневный пробный период, платные тарифы начинаются от $9.90

Официальная страница: Hootsuite

Alexa

Сервис для анализа сайтов Alex

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

Стоимость: есть бесплатный 14-дневный пробный период, платные тарифы начинаются от $149/месяц

Официальная страница: Alexa

PlagiarismCheck

Сервис для анализа сайтов PlagirismCheck

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

Стоимость: от $1.69

Официальная страница: PlagirismCheck

Social Searcher

Сервис для анализа сайтов Social Searcher

Данный инструмент позволяет выполнить поиск данных в Twitter, Google+, Facebook, LinkedIn и других источниках в режиме реального времени. После регистрации в личном кабинете можно отслеживать упоминания брендов, людей и вообще любых фраз. Также он предоставляет аналитику в виде графиков и диаграмм: по эмоциональным оценкам аудитории, по количеству постов, подписчиков, просмотров, по видам контента (видео, изображения), ключевым словам.

Стоимость: есть бесплатная версия с ограничениями, полный функционал можно получить от 3.49€

Официальная страница: Social Searcher

Serpstat

Сервис для анализа сайтов Serpstat

Serpstat – это настоящая SEO-платформа с огромным функционалом. Она позволяет выполнять поиск конкурентов, анализировать рекламу сайта, ключевые слова и мониторить позиции. Все сайты из России и стран СНГ анализируются с помощью популярных поисковых систем Google и Яндекс.

Стоимость: от $69/месяц

Официальная страница: Serpstat

Google Alerts

Сервис для анализа сайтов Google Alerts

Официальный сервис от Google, позволяющий отслеживать упоминания компании через ключевые запросы. Работает это следующим образом: вы авторизуетесь под личным аккаунтом и подписываетесь на оповещения. Когда появится новая информация по вашему запросу, на почту придет уведомление. Также можно просматривать ранее упомянутые новости в режиме реального времени, включающие в себя введенное ключевое слово.

Стоимость: бесплатно

Официальная страница: Google Alerts

SEMrush

Сервис для анализа сайтов SEMrush

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

Стоимость: есть демоверсия, тарифные планы начинаются от $119.95/месяц

Официальная страница: SEMrush

WooRank

Сервис для анализа сайтов WooRank

WooRank – сервис, с помощью которого можно найти слабые места своего сайта. Его используют такие популярные компании, как Amazon, Deloitte и FIAT. Из отчета можно посмотреть на рекомендации по технической части сайта, его контенту, а также узнать о том, на что стоит обратить пристальное внимание. Также можно проводить сравнение сайтов, отслеживать KPI, ключевые слова и обратные ссылки. Все отчеты поступают на электронную почту.

Стоимость: есть 14-дневная бесплатная версия, тарифы начинаются от $79.99

Официальная страница: WooRank

Majestic Site Explorer

 Сервис для анализа сайтов Majestic Site Explorer

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

Стоимость: есть бесплатная версия, в которой доступно всего 15 проверок в день, расширить функционал можно с помощью платных тарифов от £39.99/месяц

Официальная страница: Majestic Site Explorer

Copyscape

Сервис для анализа сайтов Copyscape

Еще один сервис, позволяющий отследить копирование контента на сайте конкурента. Он расскажет, кто ворует ваш контент, оригинален ли сайт, чтобы использовать текстовые материалы без вреда для репутации и продвижения в поисковых системах. За все это платить не нужно – такой функционал доступен бесплатно. При приобретении премиум-тарифа откроется возможность более детально анализировать сайт и использовать дополнительные инструменты: пакетный поиск, API, частный индекс и т.д.

Стоимость: бесплатно, расширенный функционал доступен от $5 (сначала надо купить внутреннюю валюту сервиса)

Официальная страница: Copyscape

Fanpage Karma

Сервис для анализа сайтов Fanpage Karma

Fanpage Karma позволяет отслеживать, есть ли ссылки на ваш сайт в популярных социальных сетях Facebook, Twitter, Google+, YouTube, Instagram и Pinterest. С помощью данного сервиса можно также анализировать профили участников, составлять, планировать и публиковать посты в социальных сетях.

Стоимость: бесплатно либо от 49€

Официальная страница: Fanpage Karma

Builtwith

Сервис для анализа сайтов Builtwith

Buitwith позволяет отслеживать интеграции сайта конкурента. Например, можно узнать, подключен ли ресурс к пикселю Facebook, Google, Yandex, счетчикам сквозной аналитики, виджетам, гугл-картам, техническим сервисам и многому другому. Дополнительно к этому можно провести аудит кибербезопасности, анализ рынка, получить список ключевых слов и многое другое.

Стоимость: от $295/месяц

Официальная страница: Buitwith

LinkPad

Сервис для анализа сайтов LinkPad

LinkPad – это один из самых популярных сервисов линкбилдинга в рунете, имеющий более 150 тысяч активных пользователей и 900 млн сайтов в базе. Есть как бесплатная, так и платная версия. В первой можно находить внешние ссылки, показывать процент nofollow и безанкорных ссылок. Все данные предоставляются в виде графиков и диаграмм.

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

Стоимость: бесплатно или от 1450₽/месяц

Официальная страница: LinkPad

Arsenkin

Сервис для анализа сайтов Arsenkin

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

Результатом анализа будет:

  • Выгрузка топ-10 сайтов. Дает возможность выгрузить первую страницу Яндекса по заданным запросам.
  • Парсинг тегов H1-H6. Позволяет быстро собрать теги по конкурентам из выдачи Яндекса, а также выгрузить метатеги title и description.
  • SEO-анализ текста. Определяет заспамленность контента и подсвечивает ключевые запросы.

Дополнительно можно воспользоваться визуальным HTML-редактором, лемматизатором, сборником букмарклетов и многим другим.

Стоимость: бесплатно, премиум от 549₽/месяц

Официальная страница: Arsenkin

PR-CY

 Сервис для анализа сайтов PR-CY

PR-CY – это сервис для комплексного анализа сайтов. Он совсем простой и быстрый, многие функции доступны в бесплатной версии. Незарегистрированным пользователям предоставляется лишь несколько проверок в день.

Основные инструменты:

  • проверка оптимизации сайта;
  • анализ ссылок;
  • анализ контента;
  • проверка позиций;
  • проверка посещаемости;
  • проверка заголовков и других данных для копирайтеров;
  • калькулятор цифровых данных.

Со всем списком предоставляемых услуг вы можете ознакомиться на странице «SEO-инструменты».

Стоимость: бесплатно, премиум от 999₽/месяц

Официальная страница: PR-CY

Выводы

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

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