Продолжаем разбирать тему предыдущей статьи.
Всем салют, ребята! Сегодня мы с вами продолжим разбирать тему предыдущей статьи.
Кстати, если вы пропустили 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 уязвимости.
Заключение
Надеюсь, что данное руководство будет полезным для вас. У этих знаний, которые я дал вам в двух частях этой статьи, бесконечные варианты монетизации. Отмечу, что также стоит проверять не только сам сайт, но и админки, вспомогательные сервисы на поддоменах, т.к. они также могут быть уязвимы перед подобными автоматизируемыми системами и скриптами.
Спасибо за внимание!
Comments