PHP system()函数 - 它是否使用shell来执行命令?

时间:2015-09-08 15:00:03

标签: php

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

以下PHP代码段容易受到命令注入攻击:

<?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()函数实现是否以这种方式识别分号?

2 个答案:

答案 0 :(得分:4)

It does use the shell. I didn't see any answer in the question you linked to that said it doesn't.

The documentation说:

  

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

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

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

答案 1 :(得分:2)

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

echo system("echo $0");