【问题标题】:php execute sh filephp执行sh文件
【发布时间】:2012-11-24 23:07:51
【问题描述】:

我正在尝试通过带参数的 PHP 启动一个 sh 文件,但是我根本无法让它工作:

<?php
$ip = $_GET['ip'];
$port = $_GET['port'];

echo shell_exec('sh var/www/html/Grant73565/Grant.sh $ip $port')or die("bash didn't work");
echo('Sent!');
?>

通过 ssh 手动运行文件可以正常工作,例如:

./Grant.sh 127.0.0.1 80

但是在 php 中它只是回显“Bash 不起作用”。

据我所知,这与参数无关,因为它甚至不会在没有它们的情况下启动文件。

【问题讨论】:

  • 做这个。您正在打开您的服务器以进行完全的远程妥协。考虑example.com?ip=;rm -rf /。享受完全摧毁您的服务器

标签: php linux ssh arguments shell-exec


【解决方案1】:

如果要包含变量,则需要使用双引号。

echo shell_exec("sh var/www/html/Grant73565/Grant.sh $ip $port") or die("bash didn't work");

使用您当前的代码,任何人都可以更改 http 查询并在您的服务器上执行任何操作。这是一个重大的安全漏洞。

解决方案是验证输入。端口将始终是数字,所以这很简单。您可以使用正则表达式来验证 IP 地址。

【讨论】:

  • 我了解安全风险,无论如何,一切都是 IP 锁定的。以后我会努力的。我仍然得到“bash 不起作用”的代码。
  • 您确定路径正确吗?您是否尝试过打印命令并通过 shell 运行它?
  • 是的,执行 find / -name Grant.sh 返回:/var/www/html/Grant73565/Grant.sh
  • 所以.. 在 php 命令的开头包含正斜杠?否则,您将尝试执行相对于脚本路径的命令。
猜你喜欢
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2014-12-17
  • 2019-01-26
  • 2020-01-24
相关资源
最近更新 更多