WHMCS使用Smarty作为它的模板系统,虽然它是一个很好的模板系统,它有一个缺陷,{php}
标签。这些标签允许smarty直接在模板中解释PHP代码,或者在这种情况下通过故障单系统在创建新故障单时解释。这个hack一直发生在WHMCS系统上,您可以尝试通过配置中的块文本选项阻止WHMCS中的代码。但大部分时间这都不起作用。
WHMCS接受票证并且黑客在票证消息中添加了以下内容:
{php}eval(base64_decode(encoded message));{\php}
聪明地看到{php}
部分并立即让PHP运行该命令。所以它首先解码在base64中编码的PHP。这将带来一些黑客试图运行的PHP函数/脚本。
然后eval接管并实际评估PHP代码并在服务器端运行它。
许多黑客以这种方式运行,他们运行他们知道将在WHMCS中工作的代码,然后获取数据库信息并将其回显到文件。然后他们只需通过浏览器URL获取此文件并获取他们想要的信息。
这只适用于一些WHMCS安装,虽然WHMCS说最新版本不允许这样,并且在Smarty中禁用了{php},有时黑客确实找到了解决这个问题的方法{{1}他们的代码。
答案 0 :(得分:2)
There's a flag in the Smarty config to enable/disable this,默认情况下应为 off 。
如果WHMCS要求使用{php}
标签,那么它们[尽可能礼貌地]使用令人难以置信的f * cking延迟,并且应该退出制作账单或任何其他软件的业务。< / p>
编辑:是的,right here in their docs。 “嘿看!我们为你开启了这个超级巨型安全漏洞!”
您可能希望浏览模板文件以查找这些{php}
标记的任何用法,因为它会通过在安全性中插入这个漏洞来指示您将丢失的任何功能。
答案 1 :(得分:1)
这实际上是使用mod_security修复的一个非常简单的hack。首先找到你的mod_security配置文件所在的位置,这一切都取决于你的mod_security和OS的安装,但通常称为modsec.conf
或modsec2.conf
,有时候是security.conf
,但很少。
您可以在大多数Linux系统上使用locate
命令(如果已安装)找到它。
sudo updatedb
locate modsec.conf
or
locate modsec2.conf
如果您没有locate
,您需要转到/
目录并运行find
,这需要一些时间,但有时会将面板安装在奇怪的地方不只是在/etc
。
cd /
find . -type f -iname 'modsec*.conf'
无论哪种方式都可以找到配置文件。找到后,使用您喜欢的编辑器编辑文件,然后转到最底层并添加以下内容:
SecRuleEngine On
SecRule ARGS {php} "severity:4,log,deny"
SecRule ARGS eval "severity:4,log,deny"
SecRule ARGS base64_decode "severity:4,log,deny"
基本上你告诉它过滤GET
和POST
中的参数。就是这样,现在重启apache:
CentOS:
service httpd restart
Ubuntu:
service apache2 restart
现在您可能会认为这会阻止您在脚本中使用这些命令,而根本不会。这只会阻止通过GET
或POST
发送这些字词。如果有人尝试他们会收到Not Acceptable
错误,而且根本不起作用。
这样您就不必阻止来自防火墙或WHMCS以及潜在客户的一堆IP。