2010-01-08 31 views
0

你好,我有几个关于PHP exec()和passthru()的问题。在PHP和passthru执行功能?

1)
我从来没有使用EXEC()在PHP,但我已经看到了它有时与ImageMagick的使用。我现在很好奇,在一个Web应用程序中,exec有什么优势,还有什么其他常见用途?

2)
大约6年前,当我第一次开始使用PHP玩弄我真的不知道什么,只是很基本的东西,我有得到了妥协,有人设置有,这是自己的PHP文件中的网站使用passthru()函数在我的站点传递一串流量来下载免费的音乐或视频,并且我从主机上获得了4,000美元的带宽费用! 6年后,我对如何使用PHP了解得更多,但我仍然不知道这是怎么发生在我身上的。如何能够通过错误的代码将文件添加到我的服务器?

回答

4

1] EXEC()的时候,你真的很有用。例如ffmpeg是通过exec调用运行的常用工具(用于各种媒体转换)。 B)运行另一个进程 - 你可以阻止或不阻止 - 这是非常强大的。有时候,你可能需要一个pcnt_fork,或者类似的,以及正确的CL args来实现非阻塞。另一个例子是当我必须处理XSLT 2.0时 - 我必须执行exec()我正在运行的一个小型java服务来处理转换。非常便利。 PHP不支持XSLT 2.0转换。

2]该死的,这是一个耻辱。 好吧,很多方法。这是一个名为“远程文件包含病毒”的漏洞家族,它基本上允许攻击者包含任意源并在服务器上执行它。 看看:http://lwn.net/Articles/203904/

另外,如上所述,说你做这样的事情(大大简化):

exec("someUnixUtility -f $_GET['arg1']"); 

那么,想象的攻击者,url.come ARG1 =“等等; RM你的代码基本上归结为:

exec("someUnixUtility -f blah; rm -rf /"); 

哪个在unix中,你分开命令w/the;所以是的 - 这可能会造成很大的损失。

同一个文件上传,想象你带的最后四个字符(.EXT),找到该扩展。 那么,这样的“exploit.php.gif”是什么东西,然后你剥离扩展名,所以你有exploit.php,你将它移动到/ users/imgs /文件夹。那么,所有攻击者现在要做的就是浏览users/imgs/exploit.php文件,他们可以运行任何他们想要的代码。你在那时已经拥有了。

+0

谢谢,很好的例子 – JasonDavis 2010-01-09 00:09:58

+0

是的,肯定的事情! – 2010-01-09 15:02:58

0

exec()允许您使用服务器上的编译代码,该编译代码的运行速度将高于解释的php。

因此,如果您有大量需要快速完成的处理,exec()可能会有用。

1
  1. 使用exec或者当您想运行不同的程序时。

  2. documentation for passthru说:

警告

当允许用户提供的数据将被传递给该函数,使用escapeshellarg()escapeshellcmd(),以确保用户不能欺骗系统进入执行任意命令。

有人可能在脚本中发现了一个安全漏洞,允许他们运行任意命令。下次使用给定的功能来消毒您的输入。请记住,客户端发送的任何内容都不可信,因此有可能是

A)希望运行PHP不具有相应命令对服务器上的程序/实用工具:

+0

我知道现在的安全性,但这种情况发生时我真的不但即使如此,我没有使用中继,上传或我的服务器上,他们提出的文件中做了一个文件中的其他用户,它采用中继。我仍然不明白如何创建一个新文件,并将该文件中的任何内容放在另一台服务器上,即使用户不是secury用户提交的数据 – JasonDavis 2010-01-08 22:19:49

+1

也许他们上传了一个'.php'文件到您的服务器。这可能是,如果你有一个上传文件的设施,并没有检查MIME类型,或者如果你的服务器(不应用程序)的安全设置不正确(如:777文件夹) – nickf 2010-01-08 22:22:51

+0

我确实有上传部分,由于 – JasonDavis 2010-01-09 00:07:39