Может ли кто-нибудь сказать мне, почему/как этот вектор XSS работает в браузере?

Я подвергся ряду XSS-атак на свой сайт. Следующий фрагмент HTML представляет собой вектор XSS, внедренный злоумышленником:

<a href="mailto:">
<a href=\"http://www.google.com onmouseover=alert(/hacked/); \" target=\"_blank\">
<img src="http://www.google.com onmouseover=alert(/hacked/);" alt="" /> </a></a>

Похоже, скрипт не должен выполняться, но с помощью инструмента разработки IE9 я смог увидеть, что браузер переводит HTML в следующее:

<a href="mailto:"/>
<a onmouseover="alert(/hacked/);" href="\"http://www.google.com" target="\"_blank\"" \?="">
</a/>

После некоторого тестирования выясняется, что \" делает атрибут "onmouseover" "живым", но я не знаю почему. Кто-нибудь знает, почему этот вектор успешен?


person opps    schedule 15.09.2011    source источник
comment
Кажется, \ комментирует , оставляя цитату частью (недопустимого) URL-адреса. Вы можете иметь значения атрибутов без кавычек в HTML. ‹img src=xyz onerror=alert(1) › также допустимо. Но это интересно. Я не знал, что\так работает.   -  person Erlend    schedule 16.09.2011
comment
Кажется, что любой символ перед , превращает его в часть значения атрибута.   -  person Erlend    schedule 16.09.2011


Ответы (1)


Итак, резюмируя комментарии: вставка символа перед кавычкой превращает кавычку в часть значения атрибута вместо того, чтобы отмечать начало и конец значения. Это работает так же хорошо:

href=a"http://www.google.com onmouseover=alert(/hacked/); \"

HTML допускает атрибуты без кавычек, поэтому он становится двумя атрибутами с заданными значениями.

person Erlend    schedule 16.09.2011