2

我的一位客户找我检查并修复被黑的网站。网站是由另一个开发人员开发的,非常缺乏经验的开发人员甚至没有考虑到基本的安全性。

那么问题是不知何故PHP文件被写入图像文件夹。黑客还写了一个 index.html 来显示网站被黑了。当我检查图像文件夹有 777 权限。所以我得出粗略的结论,这是因为文件夹权限。托管支持人员说,一些 PHP 文件的脚本编写不佳,允许任何扩展文件上传到服务器,然后黑客执行文件以获得访问权限或做任何他们想做的事情。

我有几个问题:

  • 是否只有通过上传功能才能上传其他PHP文件?由于文件夹权限为 777,是否无法通过其他方式从远程写入文件?
  • Sit 有一些 fckeditors 编辑器和几个上传功能。我检查了它们,有足够的验证,所以当尝试上传图像或 PDF 以外的扩展时,它们只会返回 false 。
  • 将文件夹权限设置为较低级别是否可以解决问题?

我要求支持人员更改文件夹权限,这将解决问题,但他说有一些 PHP 文件通过该文件编写了其他 PHP 文件,他希望修复该问题,否则网站无法上线。他说,即使文件夹权限被更改,黑客也可以再次将其更改为 777 并执行他想要的任何操作,因为那个写得不好的 PHP 文件。

我应该如何查找是否存在这样的 PHP 文件?任何帮助或指示将不胜感激。

4

5 回答 5

2

777 意味着系统上的任何用户(无论如何都对所有父目录具有执行访问权限)可以向该目录添加任何内容。但是,Web 用户不是系统用户,并且大多数 Web 服务器(包括 Apache)不会让随机客户端直接在其中写入文件。你必须明确告诉服务器允许这样做,我相当肯定这不是发生的事情。

但是,如果您允许任何文件上传,则上传文件夹至少需要 Web 服务器的用户(或网站的用户,如果您使用类似 suPHP 的话)是可写的。如果 Web 服务器可以写入该目录,那么任何 PHP 代码都可以写入该目录。您不能将权限设置得足够高以允许上传也不能将权限设置得足够低以阻止 PHP 代码运行,除非使目录只写(这使得它对 fckeditor 等非常无用)。

几乎可以肯定,由于站点本身存在漏洞,因此发生了妥协。可能是文件上传脚本没有正确检查写入的位置,或者脚本盲目地接受要包含的内容的名称。由于 PHP 代码通常以 Web 服务器的用户身份运行,因此它对 Web 服务器具有写访问权限的所有内容具有写访问权限。(也有可能有人通过 FTP 进入,在这种情况下,您最好更改密码。但网络服务器出错的可能性充其量是微乎其微的。)

至于此时该做什么,最好的选择是擦除站点并从备份中恢复——正如多次提到的那样,一旦攻击者获得了在您的服务器上运行的任意代码,就不会有很多你可以再信任了。如果你不能这样做,至少找到任何具有最近修改时间的文件并删除它们。(漏洞利用几乎从来没有经历过那么大的麻烦来掩盖他们的踪迹。)

无论哪种方式,然后设置任何非上传,非临时,非会话目录的权限 - 以及所有现有脚本 - 以禁止写入,期间......特别是Web服务器。如果站点的代码以拥有文件的同一用户身份运行,您将希望将 555 用于目录,将 444 用于文件;否则,您可能可以使用 755/644。(Web 服务器只有在配置严重错误的情况下才能编写这些内容,而无能的托管公司很快就会倒闭

不过,坦率地说,“支持人员”的想法是正确的——我当然不会让一个站点在我的服务器上运行,因为我知道它将执行来自陌生人的任意代码。(即使它不能向本地文件系统写入任何内容,它仍然可以用来对其他服务器发起攻击。)目前最好的选择是暂时删除所有上传文件的能力。很明显,有人不知道如何安全地处理文件上传,现在有人知道你很脆弱,你很可能会一直被黑客入侵,直到你找到漏洞并堵住它。

至于要寻找什么......不幸的是,它是半模糊的,因为我们正在谈论单语句级别之上的概念。查找以任何方式从 $_GET、$_POST 或 $_COOKIE 派生的文件名中写入、或写入include的任何 PHP 脚本。require

于 2013-02-28T14:59:35.767 回答
1
于 2013-02-28T18:28:10.197 回答
1

除非您使用 CGI,否则更改文件夹权限不会解决问题,因为 PHP 可能需要能够写入上传文件夹,而您的 Web 服务器可能需要能够从中读取。检查任何上传文件的扩展名!

(所以不,0777 权限并不意味着任何人都可以上传任何内容。)

于 2013-02-28T14:53:07.510 回答
1

您已经确定了 2 个问题:权限和缺少扩展检查但是您是否有任何证据表明这些是系统受到威胁的手段?你没有提供任何东西来支持这个断言。

将权限更改为更具限制性的内容不会对上传恶意 PHP 脚本的用户提供任何保护。

检查文件的扩展名可能会使将 PHP 代码注入站点变得更加困难,它不会阻止它

从备份恢复可能会删除被破坏的内容,但不会修复代码中的漏洞。

你没有你的客户(他们可能为此付钱给你)需要解决这个问题的技能。与在这里阅读一些答案相比,获得这些技能的旅程要长得多(尽管这是一个开始)。

于 2013-02-28T15:35:53.270 回答
1

正如神秘所提到的,一旦黑客可以在您的服务器上运行代码,那么您必须假设所有文件都具有潜在危险。您不应该尝试自己解决此问题 - 从备份(从客户端或原始开发人员)恢复是解决此问题的唯一安全方法。

准备好备份文件后,删除您网站上的所有内容并上传备份 - 如果它是共享主机,您也应该联系他们,以防其他文件遭到破坏[虽然很少发生]。

于 2013-02-28T15:01:51.023 回答