Как провести атаку с помощью html тега \»а\»


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

Тег a — это не только ценный мех, но и инициализация window.opener. 

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

//Код №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, для кражи кук(да и вообще чего угодно).

Добавить комментарий