Міжсайтовий скриптинг (XSS)

Атаки XSS націлені на те, щоб передати приватні дані з одного сайту на інший. Ці атаки спрямовані на клієнтську (браузерну) частину сайту, на відміну від більшості інших атак, що спрямовані на серверну частину (у тому числі на БД). Особливу небезпеку такі атаки становлять тоді, коли користувач сайту є модератором або адміністратором. У такому разі дискредитація приватних даних може надати зловмиснику підвищені права доступу та можливість впливати на всю систему сайту.

Приватними даними клієнтської частини сайту є локально збережені у браузері дані: localStorage, sessionStorage, IndexedDB, cookies тощо. Як правило, у цих даних міститься інформація про параметри автентифікації (токени, ідентифікатори сесій, тощо), а також персональні дані користувача, історія його дій і таке інше.

Зміст атаки полягає у впровадженні JavaScript кодів (скриптів) у тексти, які будуть відображатись на сторінках сайту. Найбільш поширені контейнери для цього - публікації, коментарі, відгуки користувачів сайту. При відображенні цих текстів на сторінці користувача скрипти виконаються, отримають доступ до приватних даних та зможуть відправити їх на сайт зловмисника.


Приведемо приклад такої атаки. Точніше, її імітації, оскільки для справжньої атаки необхідно організувати сайт для прийому приватних даних. Далі наводиться вікно для введення певного коментаря. Окрім самого коментаря додайте до нього текст
<script>alert('XSS works')</script>
та натисність на кнопку "Send" (Для спрощення текст зі скриптом вже вписані у поле)

Leave a comment

Якщо після відправлення повідомлення ви бачити діалогове вікно з текстом "XSS works", то значить атака пройшла успішно і скрипт було виконано. При цьому в самому повідомленні, що відобразилось на сторінці, жодних ознак атаки непомітно (оскільки скриптові блоки на сайтах не мають відображення)


Тоді можна розвивати атаку, замість безпечного тексту додамо виведення відомостей про cookie. Введіть у повідомлення текст:
<script>alert(document.cookie)</script>
та натисність на кнопку "Send" (Для спрощення текст зі скриптом вже вписані у поле)

Leave a comment

Якщо після відправлення повідомлення ви бачити порожне діалогове вікно, то зайдіть на сторінку автентифікації та натисність кнопку LOGIN. У розділі "Технічні деталі" має з'явитись рядок "Остання спроба авторизації: " з поточною датою та часом. Після цього повторіть надсилання відгуку з даної сторінки. У разі успішності діалогове вікно має містити рядок на зразок PHPSESSID=mc27ob9ah24d4g6kcnbh4a4s4u. Скопіюйте це значення, у реальній атаці це має бути автоматично надіслано на інший сайт, ми цей процес імітуємо.