我读了一个相关的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()函数实现是否以这种方式识别分号?
答案 0 :(得分:4)
It does use the shell. I didn't see any answer in the question you linked to that said it doesn't.
system()
就像函数的C版本一样,它执行给定的命令并输出结果。
由于C函数使用shell,PHP函数也是如此。
文档有点误导,因为C函数不会返回命令的任何输出,而PHP函数返回输出的最后一行。
答案 1 :(得分:2)
是的,这个例子会告诉你:
echo system("echo $0");