Современные
информационные технологии.
Информационная
безопасность.
Юдін О.К., Гусєв М.А.
Національний
Авіаційний Університет, Україна
Міжсайтовий
скриптінг XSS по протоколу HTTP.
Вступ
XSS
(англ. Сross Site Sсriрting - «міжсайтовий скриптінг») - тип вразливості
інтерактивних інформаційних систем у вебі. XSS виникає, коли в сторінки, що
генеруються сервером, з якоїсь причини потрапляють скрипти користувача.
Специфіка подібних атак полягає в тому, що замість безпосередньої атаки сервера
вони використовують вразливий сервер в якості засобу атаки на клієнта.
Зараз
XSS складають близько 15% всіх виявлених вразливостей. Довгий час програмісти
не приділяли їм належної уваги, вважаючи їх безпечними. Однак ця думка помилкова:
на сторінці або в HTTP-Cookie можуть бути досить вразливі дані (наприклад,
ідентифікатор сесії адміністратора). На популярному сайті скрипт можна навіть
влаштувати DoS-атакy.
Бувають
пасивні XSS і активні XSS.
Пасивні - це XSS,
які вимагають від жертви безпосередньої участі, до того ж є специфічні
обмеження і складності. Тому, пасивні XSS не дуже цінуються. Наприклад,
потрібно змусити її пройти по шкідливої ??посиланню, що потребують соціальної
інженерії, хитрості.
Активні - це XSS,
які, не вимагають ніяких додаткових дій з боку жертви - їй досить лише відкрити
сторінку з вашим XSS і JavaScript-код виконається автоматично. Завдяки своїй
автоматизированности - вони дуже корисні і цінні. Наприклад, активні XSS
існують в BB-тегах через недостатню фільтрації, коли ви залишаєте повідомлення
на форумі\гостьовій книзі\чаті, яке буде завжди активно при кожному оновленні.
Виявлення XXS-вразливостей
Виявлення
наявності поганої фільтрації значень від користувача зводитися до введення в
усі поля контрольного JavaScript-коду, який виводить довільне повідомлення:
<script>alert()</script>
або
"><script>alert()</script>
Якщо вийшло
повідомлення значить скрипт обробився і виконався ... А значить ми можемо
вставляти довільний JavaScript-код на сторінку, що бу-дет запускатися у всіх
користувачів які зайшли на неї.
У
даній статті я на практиці розгляну кілька прикладів використання
XSS-вразливостей. Чим і спробую Вам довести що XSS це важлива уразливість.
Дані
приклади здійсненні і за допомогою активної (збереженої) XSS, але ми будемо
використовувати пасивну XSS-атаку (крім випадку з Flash!), Для економії часу.
Так само треба сказати про те, що нам доведеться працювати з дописуванням
певного коду в сторінку. Метод document.write () нам для цього не підійде через
деяких його особливостей. Для здійснення всіх наших ідей ми будемо
користуватися тегом iframe і властивістю innerHTML. У деяких читачів вже
напевно з'явилися думки типу "Зараз почнуться болісні пояснення".
Цього не буде. Насправді працювати з тим же innerHTML дуже легко. Як їх використовувати
- буде описано нижче, відразу на прикладах.
Для
експериментів нам потрібно створити 2 хоста:
·
clientsite – сайт який буде відвідувати користувач, якого
атакують. Даний сайт буде страждати XSS-вразливістю.
·
evilhost – наш сайт де буде розташовуватися весь шкідливий код.
Зараз потрібно
написати скрипт який буде страждати XSS-вразливістю. Ми напишемо скрипт, який
буде містити код форми, і один div-елемент з id – «main_div»:
<?php
print "<form action=form.php method=POST>
<input type=text
name="first_field">
<input type=text name="second_field">
<input type=submit value="Отправить">
</form>
<div
name="main_div" id="main_div">our test form</div>
".$_GET['word']."; ?>
Назвемо його index.php і помістимо в корінь хоста clientsite (/home/clientsite/www/).
Так само створіть порожній скрипт xss_code.js і помістіть його в
корінь evilhost.
Ось
тут ми почнемо користуватись innerHTML. innerHTML - властивість DOM (Document
Object Model) елементів. Ця властивість дозволяє без проблем включити до складу
елемента будь-який код в необмеженій кількості. Нижче ми розберемо приклад
включення в документ звичайного тексту. Це завдання буде виконувати функція
InsertText (). Ось її код:
InsertText(); // Код функції
function InsertText(){
var our_text=" - innerHTML in action!";
var element=document.getElementById("main_div");
element.innerHTML+=our_text;
}
Для
перевірки працездатності коду пройдіть за посиланням:
http://clientsite/index.php?word=<script
src=http://evilhost/xss_code.js></script>
Висновки
Не
дивлячись на те, що для боротьби з даним типом вразливостей випущено безліч
програм і модулів для веб-серверів, XSS-діри все ще займають значний відсоток реалізованих
атак на сучасні сайти. Тому на плечі розробників лягати відповідальність при
створенні безпечного коду.
Література
1.
Seth F., Jeremiah G. XSS Attacks: Cross Site
Scripting Exploits and Defense. –Syngress, 2011. – 480 с.
2.
Стюарт М. Секреты хакеров. Безопасность сетей.
– СПб.: Питер, 2011. – 651
с.