Контакти

Xss атака навчання. XSS уразливість - що це? Приклади XSS уразливостей. Дані із заповнюваних форм

Міжсайтовий скриптинг (XSS) - це вразливість, яка полягає у впровадженні коду, що виконується на стороні клієнта (JavaScript) в веб-сторінку, яку переглядають інші користувачі.

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

Можна накидати свій найпростіший скрипт (Немає нічого простішого, ніж писати погані скрипти на PHP - цим дуже багато займаються). Але вже більш ніж достатньо готових варіантів. Наприклад, я пропоную почати знайомство з Dojo і OWASP Mutillidae II. Там є схожий приклад. В автономній середовищі Dojo перейдіть в браузері за посиланням: http: //localhost/mutillidae/index.php? Page \u003d add-to-your-blog.php

Якщо хтось із користувачів ввів:

Те веб-сторінка відобразить:

Привіт! Подобається твій сайт.

А якщо користувач введе так:

Привіт! Подобається твій сайт.

Те відобразитися це так:

Браузери зберігають безлічі кукіз великої кількості сайтів. Кожен сайт може отримати кукіз тільки збережені їм самим. Наприклад, сайт example.com зберіг в вашому браузері деякі кукіз. Ви заши на сайт another.com, цей сайт (клієнтські та серверні скрипти) не можуть отримати доступ до кукіз, які зберіг сайт example.com.

Якщо сайт example.com вразливий до XSS, то це означає, що ми можемо тим чи іншим способом впровадити в нього код JavaScript, і цей код буде виконуватися від імені сайту example.com! Тобто цей код отримає, наприклад, доступ до кукіз сайту example.com.

Думаю, всі пам'ятають, що виповнюється JavaScript в браузерах користувачів, тобто при наявності XSS, впроваджений шкідливий код отримує доступ до даних користувача, який відкрив сторінку веб-сайту.

Впроваджений код вміє все те, що вміє JavaScript, а саме:

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

найпростіший приклад з кукіз:

Насправді, alert використовується тільки для виявлення XSS. Реальна шкідлива корисне навантаження здійснює приховані дії. Вона приховано зв'язується з віддаленим сервером зловмисника і передає на нього вкрадені дані.

види XSS

Найголовніше, що потрібно розуміти про види XSS то, що вони бувають:

  • Збережені (Постійні)
  • Відбиті (Непостійні)

Приклад постійних:

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

Приклад непостійних:

  • На сайті присутній пошук, який разом з результатами пошуку показує щось на зразок «Ви шукали: [рядок пошуку]», при цьому дані не фільтруються належним чином. Оскільки така сторінка відображається тільки для того, у кого є посилання на неї, то поки зловмисник не відправить посилання іншим користувачам сайту, атака не спрацює. Замість відправки посилання жертві, можна використовувати розміщення зловмисного скрипта на нейтральному сайті, який відвідує жертва.

Ще виділяють (деякі в якості різновиду непостійних XSS уразливостей, дехто каже, що цей вид може бути і різновидом постійної XSS):

  • DOM-моделі

Особливості XSS заснованих на DOM

Якщо сказати зовсім просто, то це шкідлива програма «звичайних» непостійних XSS ми можемо побачити, якщо відкриємо HTML код. Наприклад, посилання сформована подібним чином:

Http://example.com/search.php?q\u003d "/\u003e

А при відкритті вихідного HTML коду ми бачимо щось на зразок такого: