从上传的文件执行代码

时间:2011-04-27 00:07:38

标签: php file-upload security

我正在朋友的网站上进行安全审核。一项功能是允许用户从html上传文件。唯一的验证是将文件重命名为当前时间戳。

我想知道,有没有办法上传恶意文件,以便当用户转到该文件的网址时,它会执行代码(在服务器端)?

我尝试上传一个hello-world php脚本,但它只是显示代码而不是执行它。如果文件扩展名为.php,则会执行,但是没有文件扩展名(因为文件已重命名)。

编辑:作为安全审计的一部分,我可以访问完整的源代码。如果我可以在不使用它的情况下解决这个问题会更好,但如果需要,我可以回答有关源代码的任何问题。

5 个答案:

答案 0 :(得分:1)

据我所知,上传文件并通过访问它。除非服务器设置为执行没有扩展名的文件,否则浏览器无法在服务器端执行。 但是,如果存在其他漏洞,例如本地文件包含,您可以上传并执行php脚本。

您可以在这里阅读一些关于文件包含的内容: Wiki on RFI (almost the same)在这里 Document on LFI and how it can be used

如果您可以执行该文件取决于服务器/网站设置,那么如果您可以执行PHP脚本,则必须自行测试它。

你可以在没有扩展名的文件中做的唯一事情是,正如你提到你自己的XSS,但只有在旧浏览器中(IE8和down是易受攻击的,大多数其他浏览器都没有。)

答案 1 :(得分:1)

安全扫描程序Chorizo!可能很有用:

https://chorizo-scanner.com/

该解决方案由一家公司实施,该公司负责日间PHP咨询和编码。

这是一项付费服务​​。一次扫描是免费的。

答案 2 :(得分:0)

好吧,有一点你永远存在风险的是提供将恶意代码放到服务器上的可能性 - 他们是否能够仅通过查看特定文件的URL来执行它并不是全部你必须要考虑。

如果您的代码中存在漏洞,您在服务器上动态包含或打开本地文件,那么可以简单地包含要执行的(现在)本地恶意代码。现在授予此类攻击的人甚至会尝试在远程服务器上包含代码,但是某些设置被配置为阻止包含可以阻止这些攻击的远程文件。如果代码在物理上位于机器上并且在可执行代码中发现了弱点,那么这样的配置仍然会使您容易受到攻击。

这只是一个想法 - 我不会担心或恐慌太多,但我也不会完全排除它。

答案 3 :(得分:0)

据我所知,很多网页输出都依赖于读取实际上没有执行它们的文件。服务器需要特定权限才能执行文件。

解决方案首先要检查是否允许上传的文件类型。如果您只上传图片 - 您不需要.php脚本。但这并不能阻止我创建bad.php并将其上传为bad.jpg。

我例如(在我的ubuntu盒子上)上传了一个具有777权限的php文件,只能通过输入php hello.php来运行它。你通常不会对某人上传的文件进行include(),所以我相信大多数代码都与可读性有关。

关于文件包含的维基百科页面是一个很好的开始并包含一个PHP示例: https://en.wikipedia.org/wiki/File_inclusion_vulnerability

答案 4 :(得分:-2)

使用javascript上传文件。有很多js漏洞。

http://en.wikipedia.org/wiki/Cross-site_scripting