【问题标题】:PHP system() function - does it use shell to execute command?PHP system() 函数 - 它是否使用 shell 来执行命令?
【发布时间】:2015-12-04 08:01:50
【问题描述】:

我阅读了相关的post,我得到的印象是php 中的system() 函数不使用shell。但是后来看到owasp上发布了以下示例-页面上的示例6:

以下 PHP 代码 sn-p 易受命令注入攻击:

<?php
print("Please specify the name of the file to delete");
print("<p>");
$file=$_GET['filename'];
system("rm $file");
?>

以下请求和响应是成功攻击的示例: 请求

http://127.0.0.1/delete.php?filename=bob.txt;id

回应

Please specify the name of the file to delete

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

如果没有shell,为什么系统会被分号或php中的system()函数实现以这种方式识别分号?

【问题讨论】:

    标签: php


    【解决方案1】:

    是的,这个例子会告诉你:

    echo system("echo $0");
    

    【讨论】:

      【解决方案2】:

      它确实使用了外壳。在您链接到的问题中,我没有看到任何答案。

      documentation 说:

      system() 就像函数的 C 版本一样,它执行给定的命令并输出结果。

      由于 C 函数使用 shell,PHP 函数也是如此。

      文档有点误导,因为 C 函数不返回任何命令输出,而 PHP 函数返回输出的最后一行。

      【讨论】:

      • 我很困惑,因为 php 有一个名为 shell-exec() (php.net/manual/en/function.shell-exec.php) 的函数。我想他们为什么需要其中两个?
      • 我不知道为什么 PHP 有所有这些不同的函数来执行命令。但据我所知,它们都使用 shell。
      • 它们返回输出的方式略有不同。 shell_exec 将所有输出作为字符串返回,system 仅返回最后一行,exec 返回最后一行并将所有输出行附加到按值传递的数组中。
      猜你喜欢
      • 1970-01-01
      • 2018-10-06
      • 2015-08-18
      • 2011-08-03
      • 1970-01-01
      • 2013-07-13
      • 2014-04-21
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多