2016-10-04 76 views
1

幾天前,我在我的服務器上發現了許多帶有惡意代碼的受感染文件(幾個wordpress,prestashop和一些php應用程序)。 我可以使用簡單的命令,但是缺乏知識SSH的方式獲取到尋找自己的解決方案...刪除惡意代碼

要搜索的感染我用find命令是這樣的:

find . -name "*.php" -type f -perm 600 -print0 | xargs -0 grep -iHlnrE 'filesman|eval.*base64_decode|PCT4BA6ODSE|globals|b374k' 2> /dev/null 

大多數感染文件在第一行被修改(但它們並不完全相同)。如縮短線路:

<?php $jefknybs = 'e]53Ld]53]Kc]55Ld]55#*<%bG9}:}.}-}!#*<%nfd> (...) $jefknybs=$ypoqiutce-1; ?><?php 
  1. 我以爲我可以結合查找和sed搜索受感染的文件並刪除惡意代碼,或更換整個1號線到<?php
  2. 第二個想法是找到並保存受感染的文件名到list.txt,然後可能使用一些循環來刪除惡意代碼?

你能幫忙嗎?

+1

如果您的服務器被感染,唯一的安全方法是安裝新的一個系統劃痕。如果它被感染過一次,只是刪除惡意代碼並不能解決任何問題,如果您不能更好地保護它,它將再次受到感染。 – Jakuje

+0

我會盡快重新安裝它們。但我敢肯定,刪除惡意代碼是獲得所有網站的最快方法...... – Rob

回答

0
  1. 當我遇到像你這樣的情況,在承載我用PHP Shell Detector我的一個客戶,並修改它刪除或更改每個文件在半手動模式。有一些「錯誤的檢測」,但它幫助了大部分文件。

關於的Prestashop

  • 主要問題,因爲我看到它 - PHP文件具有寫權限(如大多數hostings的),但他們並不真正需要它,例如Prestashop只需要一些文件/文件夾的這些權限http://doc.prestashop.com/display/PS16/Installing+PrestaShop

  • 如果您在/ override文件夾之外沒有核心更改,則可以輕鬆替換所有php文件。模塊相同。

  • 我不記得Prestahop php文件有多個<?php ... ?>標籤的情況下,所以你可以刪除第一個條目,如果有多個。請注意 - 不是第一行,因爲在您的示例中?><?php之間沒有換行符。

  • 另一種想法是,如果更多的郵件代碼是「onliners」,則可以在<?php ?>內計算換行符並刪除感染塊。

  • 另外不要忘記檢查/替換.htaccess和.js文件和/下載/上傳文件夾,一些Presta版本有問題。

  • 希望它有幫助。

    P.S.當然要先備份。

    UPD

    刪除惡意代碼,你可以使用此行

    find . -name '*.php' | while read line; do if [[ $(grep -o '<?php' $line | wc -l) > 1 ]]; then sed -i 's/<?php.*?>//' $line; fi; done 
    

    澄清:

    • 找到while ... done
    • php延伸和循環通過他們的所有文件檢查文件中是否有m比一個PHP開放標籤,然後文件被感染,我們刪除第一次出現的PHP代碼(從開放到關閉標籤)與sed
    +0

    謝謝Sergii all您的提示非常有用,特別是PHP Shell Detector。但是,我正在尋找一種方法來結合FIND和SED,如果這樣的事情可以完成。出於以下幾個原因,SSH對我來說是完美的解決方案(暫時但完美)。 – Rob

    +0

    這是一個非常漂亮的代碼。我想知道是否可以在你的代碼中結合FIND和GREP?我的意思是隻在建立的PHP文件PHP上感染運行WHILE循環。同時,我使用FIND將結果保存到一個文件infected.txt,然後像這樣運行循環:'for $(cat infected.txt)中的文件;做sed -i'1s /.*/換行/'* .php done' 我想你的解決方案可以更好,只要我們可以像這樣結合FIND:'find。 -name「* .php」-type f -print0 | xargs -0 grep -iHlnrE'filesman | eval ........'2>/dev/null'對不起,但那超出了我的能力...... – Rob