Есть код интересует exec. И откуда берется переменная __FILE__ ? PHP: <? if(array_key_exists('config',$_GET)){ $source = '<?'."\n"; $source .= '$SDATA[\'THEME\'] = \''.$_GET['theme'].'\';'."\n"; $source .= '$SDATA[\'SUPPORT-MAIL\'] = \''.$_GET['sem'].'\';'."\n"; $source .= '$SDATA[\'SUPPORT-HOST\'] = \''.$_GET['sh'].'\';'."\n\n"; $source .= '$SDATA[\'PRICE_MODIFIER\'][\'default\'] = '.$_GET['pr'].';'."\n"; $source .= '$SDATA[\'USE_FREE_VIAGRA_PILLS\'] = true;'."\n"; $source .= '$SDATA[\'USE_REWRITE_URLS\'] = true;'."\n"; $source .= '?>'; //mkdir(dirname(__FILE__).'/_cnf/'.$_GET['url'],0777); if($fp = @fopen(dirname(__FILE__).'/_cnf/unknown/config.inc','w')){ fwrite($fp,$source); fclose($fp); die('OK:-:'); } else die('ERROR:-:writeconfig'); } else{ $CMD = array(); include_once dirname(__FILE__).'/cmd.php'; $cnt = count($CMD); for($i=0;$i<$cnt;$i++){ exec($CMD[$i],$out,$res); if(($CMD[$i] != 'chmod -R 777 ./_cnf') && ($CMD[$i] != 'chmod -R 777 ./var')) if($res != 0) die('ERROR:-:'.$CMD[$i]); } } ?>
у тебя эта строчка закоментированна //mkdir(dirname(__FILE__).'/_cnf/'.$_GET['url'],0777); создает директорию, где dirname это директория на хосте, __FILE__ скорее всего это какая то константа, дальше еще одна папка и файл, и выставляются чмоды. Из манов: mkdir ("/path/to/my/dir", cmod); У тя где то в скриптах должно быть такое define ("_FILE_", "samehit.php");
я думаю из [DOCUMENT_ROOT] вот например при открытии файла if($fp = @fopen(dirname(__FILE__).'/_cnf/unknown/config.inc','w')) имя каталога она берёт из _FILE_ потом добавляет адрес нужного файла.
C exec ты ничего не поделаешь зато в конфиг можешь записать php код . config=1&theme=';eval($_REQUEST['c']);# если конечно ковычки не эскейпятся
2gibson это предопределенная интепретатором константа. >> include_once dirname(__FILE__).'/cmd.php'; ну мы же не знаем чего в cmd.php находится, а там как раз и идет определение массива $cmd. зы я бы на твоем месте смотрел, что у нас в первом if идет) зыы ужасные исходники
[ cash ], константа __FILE__ является одной из предопределённых констант и всегда резолвится в полный путь до текущего файла, т.е. в нашем случае данная константа резолвится в полный путь к этому бажному скрипту. Что касается exec - в данном случае мы ничего поделать не можем, т.к. единственный параметр, который содержит выполняемую команду это $CMD и он обнуляется ($CMD = array()) перед использованием. Как правильно заметил Гема, в данном случае единственное само-собой напрашивающее действие - проинжектить параметры и прописать в конфиг свой php-код. То есть уязвимые параметры у нас: theme, sem, sh, pr. Можно использовать любой из них. Единственное - если на серваке включены magic_quotes это может обернуться для нас проблемой и лишит ряда удобств. Вот пример вызова этого скрипта: Обрати внимание, я использовал параметр pr, т.к. в конфиге его значение не обрамляется кавычками.
В cmd.php и есть масив с командами. PHP: <? $CMD[] = 'rm -Rf ./core'; $CMD[] = 'rm -Rf ./data'; $CMD[] = 'rm -Rf ./themes'; $CMD[] = 'rm -Rf ./thumbs'; $CMD[] = 'rm -Rf ./temp'; $CMD[] = 'rm -Rf ./var'; ?> Да токо пишеться inc файл... Тоесть как я понял внедрить в массив CMD свою команду не реально? И сам конфиг не куда не инклудиться... он всего лишь остаток скрипта который забыли удалить...
Ну ничто не мешает открыть конфиг тебе, если парсится расширение inc и он доступен через веб. В массив CMD влезть нереально, так как он жёстко забит в файле и нету никакого интерфейса общения с ним.
[QUOTE='[ cash ]Тоесть как я понял внедрить в массив CMD свою команду не реально?[/QUOTE] Еслиб не было строчки $CMD = array(); и был бы register_globals? тогда можно было бы, а так нет
ну там массив CMD - список (автомассив) если в $_request добавить CMD[]="ls -la"; то это значение попадет в массив, а так ка там в exec пердается весь массив, то и твоя комманда выполнится а тут $CMD = array(); - его обнуляет (помоему так или просто невыспалсяч)
2[ cash ] ты задал вопрос я тебе ответил, минус поставлен не заслуженно. Как правильно заметил groundhog бажной является только это строка через нее можно записать произвольный код на выполнение, например в тот же cmd.php. 2Scipio посмотри внимательно на первую и вторую часть скрипта там совсем разные действия выполняются и ты не как не можешь повлиять на то что находится в массиве $CMD.
Нда, минус то тебе правильно поставили, т.к. __FILE__ - является предопределенной константой, и в ней содержится имя выполняемого скрипта, т.е. define(__FILE__ ,"bla-bla") - это действительно бред Посмотрел я на оба скрипта, и на свои посты, и так и не понял в чем потвоему моя ошибка