2012-02-16 55 views
2

我的網絡服務器被黑客入侵(儘管安全團隊告訴我沒有任何東西被入侵),而無數的文件有額外的PHP代碼生成鏈接到一些越南網站。通過SSH查找並刪除?

鑑於我的服務器上有數以萬計的文件,有沒有辦法讓我用SSH進去,並從其中找到的每個文件中刪除那行代碼?

請在您的回答中具體說明,我只使用了SSH幾次來完成一些非常基本的任務,並且不想最終刪除一堆我的文件!

回答

2

是的,幾行shell腳本就可以做到。儘管如此,我猶豫要把它交給你,就好像出了問題一樣,我會因爲搞亂你的Web服務器而受到指責。這就是說,該解決方案可以如此簡單:

for i in `find /where/ever -name '*.php'`; do 
    mv $i $i.bak 
    grep -v "http://vietnamese.web.site" $i.bak >> $i 
done 

此發現/where/ever下的所有文件*php,並刪除在他們http://vietnamese.web.site任何行。它使每個文件的*.bak副本。你跑這一點,一切似乎好後,你可以用

find . -name '*.php.bak' -exec rm \{\} \; 

下一個任務刪除的備份將是尋找新的供應商,因爲他們不僅遭到黑客入侵,但他們顯然不保留備份。祝你好運。

+0

歐內斯特, 但是也有一些影響,如果我只是用*它會檢查每個文件的PHP和HTML文件? 當然,實際的代碼是一塊PHP,因此它在解析之前不是真正的鏈接。我可以把代替URL? 我會問我的主人是否可以爲我做這件事,以確保它正確完成。如果不是,我會放棄它,我不會嘗試手動完成。 – Kray 2012-02-16 15:16:59

+0

所有這些命令都非常靈活。如果你想'find'找到所有'* .htm'和所有'* .php'文件,那麼你可以使用'find/where/ever -name'* .php'或-name' * .htm''。網址只是一個例子,可以使用任何唯一的字符串來識別您需要刪除的行。 – 2012-02-16 15:21:32

0

首先創建一個正則表達式,即壞的代碼(只有不好的代碼)相匹配,然後運行

find /path/to/webroot -name \*.php -exec echo sed -i -e 's/your-regex-here//' {} \; 

如果一切看起來正常,去掉echo

+0

正則表達式不僅僅是文件中的PHP代碼嗎? – Kray 2012-02-16 15:21:56

0

我做下面的方式。例如。刪除與特定名稱或擴展名匹配的文件。

rm -rf * cron.php。 *

室射頻* match_string *

其中match_string將是任意的字符串。確保*和字符串名稱之間不會有空格。

0
rm -f cron.php.* 

刪除所有文件,該文件夾名爲cron.php英寸[whereveryouwant]