【问题标题】:Bash script being executed in a php script在 php 脚本中执行的 Bash 脚本
【发布时间】:2015-08-07 20:09:25
【问题描述】:

我知道还有其他关于此的帖子,但我已经尝试了所有标记为解决方案的解决方案和修复,但没有一个对我有用。

正如标题所说,我试图让一个 php 脚本在加载到 web 服务器 (apache) 时执行一个 bash 脚本。

正如我在另一篇文章中看到的那样,我正在使用包装器,所以这里是 wrapper.c:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
    setuid (0);
    system ("/bin/sh /var/www/html/scrip/debugport/testversion.sh");
    return 0;
}

这是 testversion.sh 脚本:

#!/bin/bash
screen -S skywars -X stuff "stop
"
cd /tmp
pid=$(fuser -n tcp 12321 | awk '{print $1}')
kill -9 $pid

这是我正在使用的 php 代码:

<?php
    $message=shell_exec("./var/www/html/scrip/php_root");
    print_r($message);
?>  

当我执行 ./php_root(这是编译后的 wrapper.c)时,一切正常,但是当我尝试从 Web 服务器加载它时,脚本根本不起作用。

这可能与权限有关,但我使用的每个权限都与本文的解决方案完全相同:Execute root commands via PHP

包装器应该让脚本以root身份执行,无论是什么用户执行它,但它不起作用。

谢谢大家。

【问题讨论】:

  • 您是否安装了 PHP CLI?
  • 据我所知,不,我没有。

标签: php bash shell


【解决方案1】:

尝试检查对脚本的访问。可能是网络服务器的用户无法运行您的 bash 脚本。

【解决方案2】:

我最近发布了一个项目,它允许 PHP 获取并与真正的 Bash shell 交互(如果需要,作为用户:apache/www-data 或 root)。在这里获取:https://github.com/merlinthemagic/MTS

下载后您只需使用以下代码:

//Setting the second argument in getShell():
//true will return a shell with root
//false will return a shell with the php execution user
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/full/path/to/script.sh');

不需要包装器。

【讨论】:

    最近更新 更多