Hacksplaining представляет каталогизированный и наглядный онлайн-туториал по основным веб-уязвимостям. По каждой уязвимости представлено подробное описание, насколько часто встречается, как сложно ее эксплуатировать и уровень ее критичности. К каждой уязвимости приложено подробное описание, вектор эксплуатации, уязвимый код и рекомендации по устранению и защите. В качестве примера в статье приведен разбор одного из заданий по взлому виртуального онлайн-банкинга с помощью эксплуатации sql-инъекции.Рассматриваемые уязвимости:
SQL Injection
Внедрение SQL-кода — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
Cross-site Scripting (XSS)
XSS — «межсайтовый скриптинг» тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника. В контексте сайта рассматриваются три вида таких атак: хранимые, отраженные и DOM-based.
Command Execution
Атака, при которой целью является выполнение произвольных команд в операционной системе хоста через уязвимое веб-приложение.
Clickjacking
Client-side вектор атаки: пользователь, совершая клик на специально сформированной странице злоумышленника, на самом деле кликает по ссылке на совершенно другом сайте.
Cross-site Request Forgery
«Межсайтовая подделка запроса», — вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника).
Directory Traversal
Обход каталога (или обход пути) заключается в использовании недостаточной проверки безопасности предоставленных пользователем имен файлов, так что символы, представляющие переход к родительскому каталогу, передаются через API.
File Upload Vulnerabilities
К загрузкам файлов следует относиться с осторожностью — они представляют собой простой способ для злоумышленника внедрить вредоносный код в ваше приложение.
Broken Access Control
Все ресурсы на вашем сайте должны иметь реализованный контроль доступа, даже если они не предназначены для обычных пользователей. Полагаться на «security through obscurity» нельзя.
Open Redirects
Большинство веб-приложений использует функционал переадресаций. Если ваш сайт перенаправляет все URL-адреса, указанные в строке запроса — это может помочь злоумышленнику сформировать фишинговые вектора атак.
Unencrypted Communication
Недостаточное шифрование может сделать вас уязвимыми для атак типа «Man-in-the-Middle». Обязательно используйте HTTPS при передаче любого типа конфиденциальной информации.
User Enumeration
Если злоумышленник может злоупотреблять функцией проверки подлинности, чтобы проверить, существует ли имя пользователя на вашем сайте, это значительно упростит использование других уязвимостей.
Information Leakage
Выявление служебной информации помогает злоумышленнику узнать о технологиях вашего сайта, путях и т.д. и может дать возможность злоумышленнику
Password Mismanagement
Безопасная обработка паролей имеет важное значение для безопасной системы аутентификации.
Privilege Escalation
Повышение привилегий — злоумышленник использует уязвимость для представления другим пользователем (как правило с более высокими правами) или получения дополнительных разрешений.
Session Fixation
Небезопасная обработка идентификаторов сеансов может привести к захвату сессии пользователя.
Weak Session IDs
Предполагаемые идентификаторы сеанса делают ваш сайт уязвимым для захвата сеанса.
XML Bombs
XML-документы могут включать встроенные макросы. Небезопасная обработка этих макросов может сделать ваш сервер уязвимым для атак из специально сформированных XML-файлов.
XML External Entities
XML-файлы могут включать встроенные ссылки на другие документы. Небезопасная обработка внешних ссылок позволяет злоумышленнику получить доступ к файловой системе.
Разбор кейса уязвимости SQL-инъекция
На первом шаге мы видим форму авторизации онлайн-банкинга и уведомление о наличии вероятной уязвимости:
Для удобства внизу страницы расположен лог запроса:
Далее нас просят ввести произвольный легитимный логин и пароль:
Данные неверны, попробуем обойти системы авторизации:
Получаем сообщение об ошибке (и более детальную информацию в логе):
На появившейся вкладке CODE выявляем природу ошибки:
Мы видим завершение запроса, теперь попробуем использовать эту уязвимость для обхода авторизации онлайн-банкинга:
Как вы видите мы добавили условие «1=1», значит критерием проверки будет «если логин ‘user’ или 1=1», но ведь 1 всегда равно 1. Если описать более простым языком — мы пытаемся войти в систему под пользователем user, с паролем равным условию 1=1.
Условие соблюдено — 1=1, а парольное поле отбрасывается!
Таким способом мы проникли внутрь онлайн-банкинга. Далее нам предоставляется описание методов защиты от инъекций: примеры кода, описание рисков и т.д.
Дополнительно
В качестве дополнения к эксплуатации вектора SQL-инъекция рекомендую ознакомиться: со следующим материалом:
- Методы обхода защитных средств веб-приложений при эксплуатации SQL-инъекций
- Шпаргалка по sql-инъекциям
Заключение
Онлайн туториал сделан довольно подробно и добротно и рекомендован к изучению в первую очередь разработчикам в качестве наглядного пособия «как не надо писать код.» Для специалистов по информационной безопасности это неплохая шпаргалка и средство визуализации веб-уязвимостей с хорошим описанием и пошаговой демонстрацией вектора атаки.