Как создать XSS-уязвимость на своем сайте (пошаговое руководство)

Значит, решил я написать игру, позволяющую обучиться искусству взлома сайтов. Чтобы свой скилл поднять да другим польза была. А по незнанию своему решил одним из первых уровней сделать возможность проведения на сайте XSS-атаки.

Кто не знает, что это, в двух словах объясню. XSS-атака (или межсайтовый скриптинг) - это атака, направленная на выполнение произвольного сценария в браузере жертвы. Обычно, используется для того, чтобы увести куки. А куки нужны для того, чтобы не авторизовываться каждый раз на каком-либо сайте.


Дисклеймер

Автор настоятельно не рекомендует использовать описанные ниже действия, а также не несет никакой ответственности за возможный ущерб


Боюсь, дальнейшее повествование будет интересно никому людям, далеким от веба. Но я все-таки попробую.

Создаем страницу, размещаем на ней форму с текстовым полем.

Как создать XSS-уязвимость на своем сайте (пошаговое руководство) Взлом, Xss атака, Кулхацкер, Вредные советы, Длиннопост

При отправке формы на сервер обязательно никак не обрабатываем введенные пользователем данные (иначе не будет магии). Нужно сохранить данные в базе данных (а как иначе можно передать другим ссылку на страницу и своровать куку?), а также вывести их на сайт (чтобы скрипт мог запуститься). Проверим, всё ли у нас получилось, введя простейший JavaScript-код:

Как создать XSS-уязвимость на своем сайте (пошаговое руководство) Взлом, Xss атака, Кулхацкер, Вредные советы, Длиннопост

Ура! Хотя нет, постойте: если использовать одинарные кавычки, в базе данных ничего не сохраняется! А вдруг хакер забудет заэкранировать их? Нельзя этого допустить! Добавим к запросу функцию, экранирующую специальные символы addslashes().

Как создать XSS-уязвимость на своем сайте (пошаговое руководство) Взлом, Xss атака, Кулхацкер, Вредные советы, Длиннопост

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

Ничего не происходит. Почему это? Давайте откроем консоль (F12 обычно).

Как создать XSS-уязвимость на своем сайте (пошаговое руководство) Взлом, Xss атака, Кулхацкер, Вредные советы, Длиннопост

Хм, браузер запретил исполнять скрипт и просит указать какие-то заголовки. Еще чего! Я лучше сохраню введенный пользователем текст в базу данных, перезагружу страницу и буду выводить текст не из POST-массива, а из базы данных, тогда браузер ругаться не будет.

Как создать XSS-уязвимость на своем сайте (пошаговое руководство) Взлом, Xss атака, Кулхацкер, Вредные советы, Длиннопост

Ура, мы это сделали! Еще никогда провести XSS-атаку не было так просто!

Правила сообщества

Обязательно к прочтению для авторов:

1. Если вы добавляете пост, утверждающий об утечке данных или наличии дыр в системе, предоставьте ссылку на источники или технически подкованное расследование. Посты из разряда "Какой-то банк слил данные, потому что мне звонили мошенники" будут выноситься в общую ленту.
2. Все вопросы "Как обезопасить сервер\приложение\устройство" - в лигу "Компьютер это просто".

Обязательно к прочтению для всех:

Добавление ссылки разрешено если она не содержит описание коммерческих (платных) продуктов и/или идентификаторов для отслеживания перехода и для доступа не нужен пароль или оплата в т.ч. интернет-ресурсы, каналы (от 3-х тематических видео), блоги, группы, сообщества, СМИ и т.д.


Запрещены политические holy wars.

По решению модератора или администратора сообщества пользователь будет забанен за:

1. Флуд и оскорбление пользователя, в т.ч. провокация спора, флуда, холивара (высказывание без аргументации о конкретной применимости конкретного решения в конкретной ситуации), требование уже данного ответа, распространение сведений порочащих честь и репутацию, принижающих квалификацию оппонента, переходы на личности.

2. Публикацию поста/комментария не соответствующего тематике сообщества, в том числе обсуждение администраторов и модераторов сообщества, для этого есть специальное сообщество.

3. За обвинение в киберпреступной деятельности.

4. За нарушение прочих Правил Пикабу.