【发布时间】:2011-08-06 03:14:42
【问题描述】:
我的问题是从我的 php 主页执行任何命令
解决了一半,我的 pythonscript 正在运行,但是 pythonscript 没有执行其模块的权限
但我开始认为问题出在 apache 而不是 php?我试图运行一个实际上是我最终要运行的pythonscript,然后它似乎运行但当脚本试图访问一个看起来像这样的txt文件时停止
[stdout] =>
[stderr] => Traceback (most recent call last):
File "pythontest.py", line 4, in ? f = open("(path)/temp.txt", "w")
IOError: [Errno 13] Permission denied: '(path)/temp.txt'
我已经尝试了所有不同类型的执行方法,我可以找到 exec、system、popen、proc_open 几乎没有运行,我可以从 system("pwd") 获取字符串但 system("ls") 返回一个数字 127或 126。我还尝试运行已编译的 c 程序(代码如下) exec 将返回一个对象“Array”,但系统只会像 ls 一样返回 127 或 126。
我还试图从“数组”对象中获取值?从 exec 但它什么也不返回,如果我 php print_R Array 页面将不会加载。
php 输出是(下面的代码)-> a: , out1: 126, t[[0]: , strlen out: 5, out: Array, t: 不管我实际提出了多少论据!
ls 的完整路径为 126,而“ls”则为数字 127
我已测试将所有文件 chmod 为完全权限,从 page.php 到测试程序,但它仍然给出相同的输出
php 安全模式已关闭
echo '<pre>';
print_r(execute('ls'))
echo '</pre>';
返回
array
(
[stdout] =>
[stderr] => sh: /var/www/html/grndb/upscgenesearch/test1: Permission denied
[return] => 126
)
为什么当 test1 程序具有完全权限时它给我 Permission denied ?
<?php
$a = system("/bin/ls",$out1);
echo "a: "; echo $a;
echo ", out1: "; echo $out1;
$t = exec('pwd/test1 aa hh 11',$out);
foreach ($t as &$value) {
echo ($value);
}
echo ", t[[0]: "; echo $t[0];
echo ", strlen out: "; echo strlen($out);
echo ", out: "; echo $out;
echo ", t: "; echo $t;
?>
C 源代码
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
printf("arg %d: %s\n", i, argv[i]);
return 0;
}
【问题讨论】:
-
什么 echo 'ls';生产? (用反引号替换')
-
如果
/bin/ls的“command not found”结果仍然存在,那么您很可能在 mod_chroot/jail 中运行您的网络服务器。 (实际上是一次有效的安全预防措施。) -
网络服务器是默认安装的,不知道会不会有问题?
-
如果有帮助的话,网络服务器是 apache/2.2.3