Hacksplaining — интерактивный курс по веб-уязвимостям

    image
     
    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-инъекция рекомендую ознакомиться: со следующим материалом:


    Заключение


    Онлайн туториал сделан довольно подробно и добротно и рекомендован к изучению в первую очередь разработчикам в качестве наглядного пособия «как не надо писать код.» Для специалистов по информационной безопасности это неплохая шпаргалка и средство визуализации веб-уязвимостей с хорошим описанием и пошаговой демонстрацией вектора атаки.

    www.hacksplaining.com
    • +30
    • 30k
    • 6
    Pentestit 58,18
    Информационная безопасность
    Поделиться публикацией
    Комментарии 6
    • 0

      Хорошо бы было в таких курсах уровни сделать. Хотя бы в SQL injection. Первый уровень — поймать на апострофе. Второй — поймать на необработанном поле нестрокового типа. Третий (или какой получится) — найти место под blind SQL injection. И так далее.

    • 0
      Хорошая статья, почитал не отрываясь. Не являюсь специалистом, но захватило именно описание типов уязвимостей. Спасибо.
      • 0
        Спасибо)) интересная информация :) Поставил бы лайк, но кармы маловато)))
        • 0
          Клиент-сайд вектор атаки — глаз кровоточит, или на английском или на русский манер сделайте пожалуйста

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

        Самое читаемое