ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Статьи (https://forum.antichat.xyz/forumdisplay.php?f=30)
-   -   Методы обхода XSS фильтрации (https://forum.antichat.xyz/showthread.php?t=224582)

ArT-I-ShocK 19.08.2010 03:05

[Инпут]

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

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

[1] - Спасение кавычек.

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

[3] - Добавление угловой скобки.

[4] - Использование тега .

[5] - Шифрование Base64.

[6] - Использование Flash.

[7] - Кодировка UTF-7.

[8] - Озэръ.

[1]-[Спасение кавычек]

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

Пример:

Код:

Код:

alert(String.fromCharCode(120,97,107,110,101,116,46,114,117))

, где цифры это десятичные коды(DEC) символов.

Пример:

Код:

Код:

alert(unescape(/%78%61%6b%6e%65%74%2e%72%75/.source))

, где "/%78%61%6b%6e%65%74%2e%72%75/" - это шеснадцатиричные коды (HEX) символов.

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

Пример:

Код:

Код:

alert(/message/.source)



[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:

Знак "!" перед применением удалить

Код:

Код:
Пример (javascript:alert('xaknet.ru')) в Long HTML Entities DEC:

Знак "!" перед применением удалить

Код:

Код:
Пример (javascript:alert('xaknet.ru')) в HTML Entities HEX:

Знак "!" перед применением удалить

Код:

Код:
Использование атрибутов имеет такую особенность, благодаря которой можно использовать табуляцию, которая будет разделять вектор на части, и это даст вам ещё одну возможность обойти фильтрацию по названиям функций и методов JavaScript. Схожим методом является изменение регистра букв, но существенным недостатком данного способа является отсутствие возможности изменять регистр букв в названии метода.

Пример:

Код:

Код:
- такая конструкция работает.

Пример:

Код:

Код:
- такая конструкция работать не будет из-за aLeRt(), вызвавшего ошибку.

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

Пример HTML Entities DEC:

Знак "!" перед применением удалить

Код:

Код:
Всех атрибутов в которых реализована такая возможность я не нашел, да и не искал, т.к. временами случаются приступы вселенской лени, но как мне кажется, это атрибуты, которые имеют характер указателя на объект, либо атрибуты тегов указывающих на объект (страница, рисунок, аплет, и т.д.).

[3]-[Добавление угловой скобки]

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

Пример:

Код:

Код:

alert('message')//

Пример:

Код:

Код:
[4]-[Использование тега ]

Так как тег , в большинстве случаев, находится в начале кода страницы, вы, путём добавления закрывающего можете добиться вырезания всего кода страницы между открывающим и закрывающим тегами TITLE, что может добавить шансы на срабатывание скрипта, который должен выполниться сразу после , если использовать данную конструкцию:

Код:

Код:

alert("message");

- закрывает все, что находиться между страницы и векторным (вводимым вами) , после чего выполняет alert().

[5]-[Шифрование алгоритмом base64]

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

Пример:

Код:

Код:
PHNjcmlwdD5hbGVydCgneGFrbmV0LnJ1Jyk8L3NjcmlwdD4= - это зашифрованный вектор alert(xaknet.ru).

[6]-[Использование Flash.]

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

Пример:

Код:

Код:

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.

Пример:

Код:

Код:

+ADw-SCRIPT+AD4-alert('message');+ADw-/SCRIPT+AD4-

В примере угловы кавычки представлены в кодировке UTF-7.

[8]-[Озэръ]

Тут я привёл некоторые из альтернативных вариантов проведения xss-атак:

Код:

">
- вызывается ошибка в атрибуте SRC=, из-за чего срабатывает alert().

with(document)alert(cookie) - эквивалентен alert(document.cookie).

prompt() - эквивалентен alert().

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

[Оутпут]

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

Зэ энд, товарищи! Спасибо за этеншен.

[Feldmarschall] 19.08.2010 03:41

каждое слово боян =/

satana-fu 19.08.2010 03:54

Цитата:

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

Код:
PHNjcmlwdD5hbGVydCgneGFrbmV0LnJ1Jyk8L3NjcmlwdD4= - это зашифрованный вектор alert(xaknet.ru).
Внимание: некоторые из представленных способов работоспособны не во всех браузерах.

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. Двух помидоров достаточно?

Godfather Bulan 19.08.2010 12:04

Цитата:

Сообщение от satana-fu
PS.
Двух помидоров достаточно?

Удаляйте, товарищ Берия!

ArT-I-ShocK 19.08.2010 12:44

Тему я запостил т.к. будет полезно иметь представлении вообще об методах обхода.

Тема естественно заезженная, но вроде-бы такой нету.

Чтобы не придумывать велосипед, запостил наверно и практически все методы тут.

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

Lilo 19.08.2010 12:48

Цитата:

Сообщение от ArT-I-ShocK
Тему я запостил т.к. будет полезно иметь представлении вообще об методах обхода.
Тема естественно заезженная, но вроде-бы такой нету.
Чтобы не придумывать велосипед, запостил наверно и практически все методы тут.
Статья опять же расчитана на новичка в этом деле.

ну ты не указал первоисточник.

афтар не ты ведь.

ArT-I-ShocK 19.08.2010 13:17

Цитата:

Сообщение от Lilo
ну ты не указал первоисточник.
афтар не ты ведь.

забыл, но он уже указан.

Конечно не я. Уже всё придумано

[Feldmarschall] 19.08.2010 17:56

Цитата:

Сообщение от ArT-I-ShocK
Мне хотелось бы увидеть только здравую и адекватную критику с вашей стороны...

еще и наглеет что ему хочется видеть....../../ -.-

Godfather Bulan 20.08.2010 04:29

Цитата:

Сообщение от ArT-I-ShocK
забыл, но он уже указан.
Конечно не я. Уже всё придумано

Таких тем на ачате дохера.

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

legaljo 20.08.2010 04:36

Оформление ужасное, информации по факту 0, такие методы уже не прокатят..


Время: 09:04