Відбитий XSS
Уся атака вміщується в посилання, яке вам надіслали.
Що таке Відбитий XSS?
Відбитий міжсайтовий скриптинг ховається в URL. На сервері нічого не розміщують: одне спеціально створене посилання виконує скрипт зловмисника на вашому власному сайті, в активній сесії жертви. Ви замінете пошуковий вираз магазину пейлоадом img onerror і побачите, як заголовок результатів його виконує. Потім відкриєте обробник пошуку, знайдете місце, де запит дописують у HTML-відповідь, екрануєте його на межі рендерингу й повторите той самий пейлоад, який тепер відображається як неактивний текст. Список заборонених, що шукає теги script , цього ніколи не помітить.
Що ви дізнаєтесь у Відбитий XSS
- Відрізняйте відбитий XSS від збереженого: URL — це канал доставки, і кожна жертва має відкрити спеціально створене посилання зловмисника
- Знаходьте точку відбиття на шляху від URL до HTML-відповіді, читаючи код обробника
- Застосовуйте екранування HTML на межі рендерингу як основний захист, а не списки заборонених у WAF чи санітизацію вводу
- Розумійте, чому пейлоад img onerror виконується навіть без тега script і чому списки заборонених, націлені на теги script, не спрацьовують
- Усвідомлюйте, що розгорнуте виправлення знешкоджує виконання, але не доставку: фішингове посилання нікуди не зникає
Відбитий XSS — Кроки навчання
-
Знайдіть пошук у магазині
Сьогодні Боб націлився на Vellora — онлайн-маркетплейс із великою базою клієнтів, які ввійшли в обліковий запис. Він відкриває публічний пошук магазину, щоб побачити, як він працює. Поле пошуку, яке виводить ваш запит назад на сторінку, — це перше, що перевіряє зловмисник.
-
Виконайте звичайний пошук
Спершу подивіться, як ця функція працює для справжнього покупця. Виконайте звичайний пошук товару. Магазин повертає відповідні товари, а пошуковий вираз, який ввів Боб, повторюється в заголовку результатів.
-
Запит відбивається на сторінці
Той самий вираз, який шукав Боб, одразу повертається в заголовку результатів, а в адресному рядку він тепер міститься як параметр q . Таке відбиття небезпечне, лише якщо сторінка не екранує значення, перш ніж вивести його. Дізнатися це можна тільки одним способом: підсунути їй символ, який браузер сприймає як розмітку.
-
Перевірте, чи є екранування
Боб перевіряє відбиття класичним тестом: тегом зображення з хибною адресою src і обробником onerror , який викликає нешкідливий alert(1) . Якщо сторінка екранує запит, він з'явиться в заголовку як звичайний текст. Якщо ні, браузер створить справжній тег і з'явиться спливне вікно alert.
-
Вразливість можна використати
Спливне вікно alert з'явилося. Сторінка не екранує запит, тож виконує будь-яку розмітку, яку несе URL. Той нешкідливий alert(1) був лише підтвердженням. Справжній пейлоад не показує діалогового вікна, а виконується непомітно: якщо скрипт може прочитати сесійний cookie, пейлоад його краде.
-
Зробіть пейлоад бойовим і надішліть фішинговий лист
Боб замінює alert на скрипт, який краде cookie й надсилає сесію на сервер Боба. Він вбудовує цей скрипт у посилання пошуку Vellora , щоб скрипт виконувався на довіреному домені магазину, і маскує посилання під приємну винагороду. Потім Боб надсилає це посилання справжній працівниці, чию сесію варто викрасти, — Алісі. Люди довіряють посиланням на магазин власної компанії.
-
Несподівана винагорода
У вашу поштову скриньку надходить лист про винагороду. Він схожий на лист від Vellora, а посилання веде в магазин, яким ви користуєтеся щодня. Нічого явно підозрілого немає.
-
Отримайте винагороду
Посилання відкриває власний магазин Vellora, тож здається безпечним. Перейдіть за посиланням, щоб отримати винагороду.
-
Що насправді виконало посилання
Це звичайна сторінка пошуку Vellora, але замість заголовка результатів видно зображення, що не завантажилося. Проте параметр q у посиланні містив скрипт. Він виконався, щойно сторінка відобразилася, прочитав ваш сесійний cookie й непомітно надіслав його зловмиснику. Спливного вікна не було. Єдиний слід — зображення, що не завантажилося. Усе вдалося тільки тому, що в сесійного cookie Vellora немає атрибута HttpOnly ; якби він був, скрипт усе одно міг би діяти від вашого імені на сторінці, але не міг би прочитати cookie.
-
Вашу сесію перехоплено
Через кілька хвилин центр моніторингу безпеки (SOC) піднімає тривогу. Посилання, яке ви відкрили, обернуло вашу ж вітрину проти вас, і тепер вашу сесію використовує хтось інший. Сторінка, на якій перехопили сесію, досі відкрита поруч зі сповіщенням. Ви відповідаєте за цей код. Прочитайте сповіщення, а потім виправте першопричину.
Охоплення стандартів безпеки
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-79 Improper Neutralization of Input During Web Page Generation
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security