Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Безопасность/уязвимости IkonBoard

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так.
 
Вот это:
 

Код:
 
$inmembername  = $name;    
 

 
Не пишите. Это не сразу заметно, но вылезает баг. Может, не у всех, но вылезет. У кого не вылез - поздравляю. У кого вылез - ждите фикса.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 01:18 25-03-2004
12341234

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
А у тебя проблем с заходом в профиль не возникло после этих фиксов?
Кстати ничего, что на ты?

Всего записей: 188 | Зарегистр. 13-01-2003 | Отправлено: 20:25 27-03-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
12341234
 
После фикса захода в закрытые форумы? Нет не возникло.
 
Кошки для тренировок тут:
http://ib.ru-board.com/cgi/ikonboard/ikonboard.cgi
Регись, пробуй.
 

Цитата:
Кстати ничего, что на ты?  

 
Ничего.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 21:18 27-03-2004
shishkov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предистория
была тут:  
http://forum.ru-board.com/topic.cgi?forum=21&bm=1&topic=2229&start=0#2
 

Цитата:
Может  
 
Код:
 
if (($inmembername eq "Guest") || ($password ne $inpassword and $action ne 'sendpassword')    ){    
$inmembername = 'Guest';    
$inpassword = '';    
%allowedentry = '';    
return;    
}    
 

 
 
linx "А у тебя так работает? У меня нет."
У меня работает, а что тут может не работать? $action - переменная _не локальная_.
 
 
linx "Только зря ты создал новую тему, тем более с таким названием. Ведь мы сейчас не проникновение говорим."
 
Сори, не нашел я где это обсуждалось, помнил что было, но не нашел.
 
 
linx "Ты понимаешь, если ты посмотришь фиксенный код, то увидишь, что при запросе забытого пароля подпрограмма getmember не запрашивается."
 
О, еще как запрашивается :  
При запросе пароля вызывается  скрипт profile.cgi и подпрограмма
sendpassword, вот ее код:
 

Код:
 
sub sendpassword {
 

&getmember("$inmembername");
 
if ($membercode eq "ad") { &blocked; }
elsif ($userregistered ne "no") { # start emailing functions
 ........
 

 
 
"Это первое. А второе, у меня, например, пароли таки высылаются
То бишь бага я не обнаружила "
 
Значт у тебя пофиксено как-то, в отличие от дефолтной борды .    
 
 
Добавлено
в IB219rus_fixed3.zip  от 18:13 19-07-2004  
 
Добавлено
Чтобы исправить, можно заменить  &getmember на &gettopicmember
не проверял, но работать должно.

Всего записей: 44 | Зарегистр. 15-06-2002 | Отправлено: 18:33 19-07-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shishkov

Цитата:
в IB219rus_fixed3.zip  от 18:13 19-07-2004  
 
Добавлено  
Чтобы исправить, можно заменить  &getmember на &gettopicmember  
не проверял, но работать должно.  

 
Так оно в дистрибутиве заменено. Качай пофиксенный вариант, там все текущие глюки пофиксены. А совсем дефолтный, в  названии которого нет слова fixed - он не тронут, все баги там сохранены. Для того, чтобы желающие могли сравнить с оригиналом с одной строны и для того, чтобы можно было откатиться к дефолту, если  в результате фиксов вылезут дополнительные баги с другой стороны.
 

 

Цитата:
в результате фиксов вылезут дополнительные баги  

 
Хорошо звучит

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 20:57 19-07-2004
shishkov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
"Так оно в дистрибутиве заменено."
 
Там ничего _не_ заменено!
 

Код:
 
 sub sendpassword {
&getmember("$inmembername");
if ($membercode eq "ad") { &blocked; }
elsif ($userregistered ne "no") { # start emailing functions
 ........  
 

getmember по прежнему не заменено.
 
Я прежде чем _начать_ писать, скачал последний дистрибутив IB219rus_fixed3.zip,      
поставил его, отправка паролей не работате, баг явный, это даже видно сходу:
Пишет:  
 

Код:
 
» Здравствуйте d: Выход | Личный ящик | Новые сообщения | Отметить все прочитанным
 
     
    Ваш профиль
 
Спасибо Guest!
Ваш пароль был отправлен на почтовых ящик, оставленный вами при регистрации.
 
 
 
Этот Guest образуется при вызове в profile.cgi подпрограммы sendpassword  
в которой вызывается пофиксеный getmember.  
 
Может у тебя какой-то другой дистрибутив?
Я по этой ссылке его качал: http://forall.ru-board.com/ibarchive/IB219rus_fixed3.zip
 
Еще раз, там _НЕ_пофиксена эта проблема.
 
Добавлено
Она еще и при регистрации в register.cgi проявляется, а это вообще ни в какие ворота не лезет, если юзера должны получать пароль по почте - им ничего не придет.

Всего записей: 44 | Зарегистр. 15-06-2002 | Отправлено: 14:49 20-07-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shishkov

Цитата:
"Так оно в дистрибутиве заменено."  
 
Там ничего _не_ заменено!  

 
Гм... Ты прав. "Ничего" - это не совсем так, но не заменено.  
 
По техническим причинам мы не можем сейчас поставить дистрибутив на наш сервер и там тестить, но в архиве я заменила, должно работать, проверьте:
 
Обзор форума IkonBoard V. 2 (карта форума)  » Файловый архив II  »
IB219rus_fixed3.zip

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 02:21 22-07-2004
shishkov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx  
 
1. Опечатка  
было  <! &getmember("$inmembername");
стало  !> &gettopicmember("$passmembername");
надо            &gettopicmember("$inmembername");  
переменной $passmembername в коде не обнаружил.
 
2. Надо еще поправить register.cgi  
было         &getmember("$inmembername");
надо         &gettopicmember(("$inmembername");  
 
 
 
Добавлено
ещё
в &title из ikon.lib  
в том месте где проверяется, показывать юзеру ссылку на админцентр или нет.
было         &getmember("$inmembername");
надо         &gettopicmember("$inmembername");  

Всего записей: 44 | Зарегистр. 15-06-2002 | Отправлено: 16:08 22-07-2004 | Исправлено: shishkov, 17:46 22-07-2004
z83



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нашёлась тут ещё одна дырка, более серьёзная.
Возможность записывать файлы. Тем самым можно, к примеру, снести профиль ненавистного вам модератора. У нас сие уже произошло
Хотелось бы у вас попробовать только вот эта ссылка чё-то не работает:
http://ib.ru-board.com/cgi/ikonboard/ikonboard.cgi

Всего записей: 89 | Зарегистр. 09-10-2002 | Отправлено: 13:21 22-08-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
z83

Цитата:
Хотелось бы у вас попробовать только вот эта ссылка чё-то не работает:  
http://ib.ru-board.com/cgi/ikonboard/ikonboard.cgi

 
Не работает, да, мы еще не все настроили после переезда на новый сервер. А каким образом можно записывать файлы?

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 14:43 22-08-2004
z83



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Отправляем POST-ом "Имя_Мембера%00" и "строчку поиска" на search.cgi
Вместо имени мембера пишем относительный путь, а в строчку поиска содержимое файла.
И таким образом можно обнулять и записывать файлы в пределах всей системы.
 
Профиксить можно так:
ищем вот это:

Код:
$ipaddress        = $ENV{'REMOTE_ADDR'};
$inmembername     = cookie("amembernamecookie");
$filename = $inmembername;

И снизу добавляем такую строку:
$filename =~ s/\.\.//g;
 
Думаю этого достаточно.
 
Добавлено
$tp = &unHTML("$tp");
Если бы не эта строчка то вообще был бы полный доступ

Всего записей: 89 | Зарегистр. 09-10-2002 | Отправлено: 19:10 22-08-2004 | Исправлено: z83, 19:11 22-08-2004
z83



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нашёл первый попавшийся форум и вот результат:
http://www.medacom.ru/cgi-bin/ib/help.cgi?helpon=Lost_Password
=)

Всего записей: 89 | Зарегистр. 09-10-2002 | Отправлено: 14:01 29-08-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть другое предложение, как фиксить эту уязвимость.
Уязвимость связана с тем, что можно задать ../ в пути файла.
 
Итак, в ikon.lib есть подпрограмма, проверяющая открываемый файл на наличие допустимых символов в его пути, называется stripMETA.
 
В ней предлагается заменить строку:
 

Код:
 
$file =~ s/\.\.//g;
 

 
На строку:
 

Код:
 
$file  =~ s!\0|\\|\.\.|/\./!!g;  

 
Таким образом, вся подпрограмма будет выглядеть так:
 

Код:
 
sub stripMETA {
my $file = shift;
$file =~ s/\&//g;
$file =~ s/\;//g;  
$file =~ s/\`//g;
$file =~ s/\'//g;
$file =~ s/"//g;
$file =~ s/\|//g;
$file =~ s/\*//g;
$file =~ s/\?//g;
$file =~ s/<//g;
$file =~ s/>//g;
$file =~ s/\^//g;
$file =~ s/\(//g;
$file =~ s/\)//g;
$file =~ s/\[//g;
$file =~ s/\]//g;
$file =~ s/\{//g;
$file =~ s/\}//g;
$file =~ s/\$//g;
$file =~ s/\n//g;
$file =~ s/\r//g;
#$file =~ s/\.\.//g;
$file  =~ s!\0|\\|\.\.|/\./!!g;  
return $file;
}
 
 

 
Далее. Делает поиск по всем скриптам на наличие функции open.  
Например, в том де search.cgi (строки 186, 187):
 

Код:
 
      $filetoopen = "$ikondir" . "data/allforums.cgi";
        open(FILE, "$filetoopen");
 

 
И перед вызовом функции open, вызываем подпрограмму stripMETA, то есть пишем так:
 

Код:
 
       my $filetoopen = "$ikondir" . "data/allforums.cgi";
       $filetoopen = &stripMETA($filetoopen);
        open(FILE, "$filetoopen");
 

 
 
 
Критика приветствуется.
 
 
 
Ой, забыла. (с) batva.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 01:25 12-09-2004
Gram



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx

Цитата:

Код:
my $filetoopen = "$ikondir" . "data/allforums.cgi";  
       $filetoopen = &stripMETA($filetoopen);  
        open(FILE, "$filetoopen");

По моему, этот пример неудачем (т.к. добавлением строчки $filetoopen = &stripMETA($filetoopen); в данном конкретном примере ничего не изменится: путь то статический). А добавлять надо только туда , где путь зависит от переменной (которую можно изменить), хотя фильтрация каждого путя тоже не помешает.
 


----------
Intellect Board | Miranda Gram Pack

Всего записей: 388 | Зарегистр. 22-01-2004 | Отправлено: 21:54 14-09-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Gram

Цитата:
По моему, этот пример неудачем (т.к. добавлением строчки $filetoopen = &stripMETA($filetoopen); в данном конкретном примере ничего не изменится: путь то статический). А добавлять надо только туда , где путь зависит от переменной (которую можно изменить), хотя фильтрация каждого путя тоже не помешает

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

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 22:33 14-09-2004
Gram



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx

Цитата:
могут переписать же и конфиг, скажем $ikondir

Точно. Я об этом не подумал.

----------
Intellect Board | Miranda Gram Pack

Всего записей: 388 | Зарегистр. 22-01-2004 | Отправлено: 00:36 15-09-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Безопасность/уязвимости IkonBoard


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru