1. Введение в XSS: Механика инъекций и этика пентестинга
Введение в XSS: Механика инъекций и этика пентестинга
Каждый раз, когда вы открываете веб-сайт, совершаете покупку в интернет-магазине или отправляете сообщение в социальной сети, вы взаимодействуете со сложным механизмом. Под красивым визуальным интерфейсом скрываются тысячи строк кода, базы данных и серверы, непрерывно обменивающиеся информацией. И именно в этом непрерывном потоке данных кроются возможности для тех, кто знает, как заставить систему работать не по правилам.
Чтобы понять, как ломаются веб-приложения, нужно сначала разобраться, как они работают. Современный интернет построен на клиент-серверной архитектуре.
Представьте себе поход в ресторан. Вы (клиент) сидите за столиком и изучаете меню. Вы зовёте официанта и делаете заказ. Официант (интернет-протокол) передаёт ваш заказ на кухню (сервер). Повара на кухне собирают нужные ингредиенты из холодильника (базы данных), готовят блюдо и через официанта возвращают его вам на стол.
В веб-мире ваш браузер — это клиент. Он отправляет запрос на сервер, а сервер возвращает готовое «блюдо» в виде трёх основных компонентов:
Уязвимости возникают там, где сервер и клиент начинают доверять друг другу слишком сильно. И самая распространённая проблема такого доверия — это межсайтовый скриптинг.
Что такое XSS и почему это работает
XSS (Cross-Site Scripting) — это уязвимость веб-приложений, которая позволяет злоумышленнику внедрить вредоносный код (обычно на языке JavaScript) в страницу, которую просматривают другие пользователи.
Исторически уязвимость должна была называться CSS (Cross-Site Scripting), но чтобы не путать её с каскадными таблицами стилей (Cascading Style Sheets), первую букву заменили на «X».
Фундаментальная причина возникновения XSS кроется в одной архитектурной особенности браузеров: браузер не умеет отличать легитимный код, написанный разработчиком сайта, от вредоносного кода, подброшенного злоумышленником.
Вернёмся к аналогии с рестораном. Представьте, что вы написали на салфетке: «Я шеф-повар, немедленно отдайте этому клиенту всю выручку из кассы» и передали её официанту вместе с заказом. Если официант и кассир слепо доверяют любым запискам, пришедшим из зала, они выполнят инструкцию.
В вебе происходит то же самое. Если веб-сайт принимает данные от пользователя (например, имя в профиле или текст комментария) и выводит их на страницу без предварительной проверки и очистки, злоумышленник может вместо обычного текста отправить исполняемый код. Этот фрагмент вредоносного кода в сфере информационной безопасности называется пейлоадом (payload — полезная нагрузка).
!Введите текст и посмотрите, как браузер может перепутать обычное сообщение с исполняемым кодом.
Анатомия атаки: от шутки до кражи личности
Многие начинающие специалисты ошибочно полагают, что XSS — это просто безобидные всплывающие окна с надписью «Тебя взломали». Действительно, при поиске уязвимостей пентестеры часто используют простой пейлоад вроде alert(1), чтобы просто доказать факт выполнения кода. Но в реальной атаке последствия куда серьёзнее.
Поскольку внедрённый JavaScript выполняется прямо в браузере жертвы, он получает доступ ко всему, к чему имеет доступ сама страница. Что может сделать атакующий?
> «XSS превращает браузер жертвы в марионетку, ниточки от которой находятся в руках атакующего. Пользователь доверяет сайту, а сайт невольно предаёт пользователя». > > YesWeHack
Три столпа XSS: Отражённая, Хранимая и DOM-уязвимости
В следующих статьях курса мы будем подробно разбирать каждый тип уязвимости на практике, но сейчас важно понять их концептуальные различия. Все они основаны на плохой фильтрации данных, но отличаются тем, как именно пейлоад попадает к жертве.
1. Reflected XSS (Отражённая)
Это самый простой тип. Вредоносный код передаётся прямо в ссылке (URL) или в поисковом запросе. Сервер получает этот запрос, берёт из него данные и сразу же «отражает» их обратно на страницу.Пример из жизни: Вы ищете на сайте товар. В URL появляется параметр ?search=Котята. На странице выводится текст: «Вы искали: Котята». Если злоумышленник сформирует ссылку вида ?search=<script>код</script> и обманом заставит вас по ней кликнуть, сервер вернёт страницу с этим кодом, и ваш браузер его выполнит. Атака срабатывает только в момент перехода по специально подготовленной ссылке.
2. Stored XSS (Хранимая)
Самый опасный и разрушительный тип. Здесь вредоносный код навсегда (или надолго) сохраняется в базе данных самого веб-приложения.Пример из жизни: Хакер оставляет комментарий под популярной статьей или на форуме, но вместо текста пишет JavaScript-код. Сервер сохраняет этот комментарий в базу данных. Теперь каждый пользователь, который просто откроет эту статью, автоматически загрузит и выполнит вредоносный код. Жертве не нужно кликать по подозрительным ссылкам — достаточно просто зайти на легитимный сайт.
3. DOM-based XSS
Самый сложный для понимания новичками тип. В отличие от первых двух, здесь сервер вообще может не участвовать в обработке вредоносного кода. Уязвимость кроется в легитимном JavaScript-коде самой страницы, который небезопасно берёт данные из браузера (например, из адресной строки) и вставляет их в структуру документа (DOM).!Схема работы трёх основных типов XSS: как вредоносный код попадает в браузер жертвы.
Этика пентестинга: где проходит граница
Изучая методы взлома, вы получаете в руки мощное оружие. Техники, которые мы будем изучать в этом курсе, идентичны тем, что используют настоящие киберпреступники. Разница между преступником и профессионалом заключается только в одном слове — разрешение.
Пентестинг (от англ. penetration testing — тестирование на проникновение) — это легальный процесс поиска уязвимостей. Специалист по информационной безопасности (этичный хакер) атакует систему только после подписания официального договора с её владельцем.
Существуют строгие правила, которые отличают этичного хакера от злоумышленника:
alert(). Не нужно пытаться украсть реальные данные пользователей или удалять базу данных.Если вы хотите практиковаться на реальных системах легально, для этого существуют программы Bug Bounty. Это инициативы крупных компаний (таких как Google, Microsoft, Яндекс), в рамках которых они официально разрешают независимым исследователям атаковать свои сервисы по чётко оговорённым правилам и выплачивают денежные вознаграждения за найденные ошибки.
В рамках этого курса мы будем отрабатывать все атаки исключительно в специально подготовленных, изолированных лабораторных средах, которые созданы специально для того, чтобы их ломали.
Понимание того, как злоумышленники мыслят и действуют — единственный способ научиться эффективно защищать веб-приложения. В следующей статье мы погрузимся в основы HTML и JavaScript, чтобы научиться читать веб-страницы глазами атакующего и конструировать свои первые базовые пейлоады.