top of page

Руководство по поиску уязвимостей на сайте | Часть 2

Продолжаем разбирать тему предыдущей статьи.

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

Кстати, если вы пропустили 1 часть, то настоятельно советую с ней ознакомиться, а уже потом возвращаться к чтению данной статьи: Руководство по поиску уязвимостей на сайте | Часть 1

Ну, а теперь продолжаем!

 

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

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


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


Параметры:

  • http-brute.hostname - имя хоста

  • http-form-brute.path - адрес страницы с формой или адрес с API

  • http-brute.method - тип метода, по умолчанию POST

  • http-form-brute.uservar - устанавливает имя переменной, которая отвечает за username. Если не установлено, то скрипт возьмет имя поля из формы

  • http-form-brute.passvar - устанавливает имя переменной, которая отвечает за пароль. Если не установлено, то скрипт возьмет имя поля из формы

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

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

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

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

 

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

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


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


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


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

 

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

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


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


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


Установка sqlmap

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


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

Для использования необходим Рython версии 2.7 и старше.


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

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

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


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


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


Пример запуска:


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

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


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


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


После продолжения анализа нас в первую очередь интересует строчка в конце:

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]. 

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


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


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


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


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


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

После авторизации обычно необходимо передать нужные С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.


Можно задавать 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 для автоматических тестов.

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

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

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


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

  • Внедрять свои скрипты в веб-страницу

  • Отправлять на свой сервер пользовательские данные - банковские карты, идентификаторы сессий, пароли и тд.

  • Совершать действия от имени пользователя - рассылать спам, совершать денежные переводы

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


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

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


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


Установка

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


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


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


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


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


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


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


Кроме того, в 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 отвечает за количество страниц обхода.


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


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


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

 

Заключение

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


Спасибо за внимание!


749 просмотров0 комментариев

Недавние посты

Смотреть все

Comentarios


bottom of page