Тег a — это не только ценный мех, но и инициализация window.opener. В этой статье вас ждет рассказ об одной особенности данного тега и способы решения проблемы.Часть 1
От теории к делу!
Предположим, что мы имеем страницу, в которую можем встроить гиперссылку.Напишем код, позволяющий воспроизвести нам данную уязвимость. 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;'), host=host.replace(/>/g,'&'+'gt;'), host=host.replace(/javascript:/g,''); console.log('URL: '+host); rs.end('<center><br><a href='+host+' target="_blank">click-click</a><br>Hey, '+cookie+'! </center>'); }).listen(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, для кражи кук(да и вообще чего угодно).
http://ask.fm/ForHackzone
скрипты: http://rghost.ru/private/42779683/16f0a2888f15426ab740245267ac8c40
пароль к архиву: hackzone