請問我在公司的檔案 (公司電腦是 Win7),
用 google 雲端硬碟備份後,
在家裡要從雲端硬碟下載 (家裡電腦是 Win10),
結果出現圖片 1 中的錯誤訊息,
說有 4 個檔案遭到防毒軟體拒絕,
[下方為圖片 1]
然後查一下防毒紀錄,出現圖片 2 中的紀錄。
[下方為圖片 2]
請問:
謝謝
=======================================
補充
以下是出現錯誤訊息的檔案完整程式碼
=======================================
<?php
namespace system;
// 客戶端調用範例:
// \system\Message::setSuccess();
// \system\Message::setSuccess('自訂訊息');
// \system\Message::setSuccessToUrl('show.php');
// \system\Message::setSuccessToUrl('show.php', '自訂訊息');
// \system\Message::setSuccessToUrl('show.php?x=yyy&a=bbb', '自訂訊息');
// ---
// echo \system\Message::show();
class Message {
private static $successDefaultText = '操作成功';
private static $errorDefaultText = '操作錯誤';
private static $html = '';
// 如果有接收到 queryString,就動態調用 queryString 名稱的方法
public static function show() {
if (isset($_GET['messageMethod'])) {
self::$_GET['messageMethod']($_GET['text']);
}
if (self::$html !== '') {
return self::$html;
}
else {
return;
}
}
/* ==============================================================
設定訊息
============================================================== */
public static function setSuccess($text=null) {
if ($text === null) {$text = self::$successDefaultText;}
self::set('successMessage noPrint', $text);
}
public static function setError($text=null) {
if ($text === null) {$text = self::$errorDefaultText;}
self::set('errorMessage noPrint', $text);
}
private static function set($cssClass, $text) {
self::$html = "<div class='{$cssClass}'>{$text}</div>";
}
/* ==============================================================
跳轉頁面後,設定訊息
============================================================== */
public static function setSuccessToUrl($url, $text=null) {
if ($text === null) {$text = self::$successDefaultText;}
self::setToUrl($url, 'setSuccess', $text);
}
public static function setErrorToUrl($url, $text=null) {
if ($text === null) {$text = self::$errorDefaultText;}
self::setToUrl($url, 'setError', $text);
}
// 判斷客戶端輸入的 $url 是否有帶查詢字串 (因為 $url 有可能輸入 index.php?x=yyy&a=bbb)
// 來決定要用 ? 或 & 來連接後面的查詢字串
private static function setToUrl($url, $method, $text) {
$urlQueryIsExist = strpos($url, '?');
$mark = $urlQueryIsExist ? '&' : '?';
header("location: {$url}{$mark}messageMethod={$method}&text={$text}");
}
/* ==============================================================
顯示追蹤錯誤訊息
============================================================== */
public static function showExceptionIfLocalhost(\Exception $e) {
if (IS_LOCALHOST) {
zzzhr('拋出異常的文件:', $e->getFile());
zzzhr('拋出異常的位置:', $e->getLine());
zzzhr('異常訊息:', $e->getMessage());
zzzhr('追蹤:', $e->getTrace());
}
}
}
// 程式碼到此結束,不加入 PHP 結束標籤
我是中了這個 Backdoor:PHP/Remoteshell.G 的病毒嗎?
應該沒錯
這個病毒只有存在這 4 個都叫做 Message.php 的檔案嗎?還是其他檔案其實也中毒了?
你可以找個安全的電腦(斷網
或者直接用文字編輯器打開
用文字編輯器打開
應該不至於會執行 php code
看你那些 php code 是不是有被竄改
理論上有這種情況
你應該要檢查所有在專案裡的 file
我該怎麼做,才能讓我的電腦恢復無病毒狀態呢?
他應該只是在你的專案掛後門
然後你在 run 這網站時
他可以透過這 php file
在你的 server 搞事
不過還是建議執行完整掃描
年輕時不懂事,把phpmyadmin放在公網,然後就被植入shell...
災難的開始XD
原來是這樣.
謝謝 dragonH 大大:
我想今天試試看:
我在公司把這 4 個資料夾內的錯誤訊息檔案刪掉後,
再把資料夾重新備份到雲端硬碟,
然後今天回家下載看看會不會再出現錯誤訊息。
其實我也蠻訝異 win10 內建的防毒
竟然可以掃 php script
我一直以為這類的 script
在防毒面前只是普通的文字
不過我也沒有讓我的防毒遇過這種 script 就是
難怪 windows defender 排名可以超過幾個常見的防毒
不過 Backdoor:PHP/Remoteshell.G
的資訊有點少
也不能排除有誤判的可能就是
把檔案用日期排序很快就知道哪些檔案有問題了
我做了幾次測試:
我刪除資料夾內有錯誤訊息的檔案Message.php後,
再上傳資料夾,就沒有出現錯誤了,
我猜想這表示病毒可能是在Message.php內,
為了再確認一次,
我單獨只上傳Message.php這個檔案,
沒有上傳資料夾,
結果就又出現錯誤訊息,
所以我認為病毒非常可能是在Message.php內,
與資料夾內的其他檔案無關。
我重新開一個完全空白的檔案,完全沒有程式碼,
取名為Message.php後上傳,
就沒有錯誤訊息了,
我認為病毒一定是在Message.php內。
我把原本的程式碼貼到這新的空白Message.php後上傳,
就又出現錯誤訊息,
難道這表示是我的程式碼有問題嗎?
可是之前上傳都沒事,
怎麼可能突然我得程式碼就變成病毒了。
請問我接下來要怎麼做呢?
呃
如果不方便貼 code
那就只能試著看懂它
如果是想知道哪一段有問題
就一段一段試吧
謝謝 dragonH 大大:
我有把出現錯誤訊息的檔案完整程式碼貼在上面,
都沒有被竄改的地方,
而且這個檔案幾個月都沒有動過了,
幾個月上傳下載都沒問題,
但前幾天上傳卻突然出現錯誤。
跟 dragonH 大大報告一下這幾天測試的結果,
我先把檔案內的函數一次刪除一個後建立新檔案上傳,
發現會出現錯誤的是 show() 這個函數內的這段程式碼:
if (isset($_GET['messageMethod'])) {
self::$_GET['messageMethod']($_GET['text']);
}
我今天早上把它改成下面這樣,
然後到您給我的 VirusTotal 網站內測試,
結果是沒問題囉,
終於解決了,很開心,
謝謝 dragonH 大大。
if (isset($_GET['messageMethod'])) {
$messageMethod = $_GET['messageMethod'];
$text = $_GET['text'];
self::$messageMethod($text);
}
後來又好奇測試了一下,
改成下面這樣,會出現如圖中的錯誤訊息:
if (isset($_GET['messageMethod'])) {
echo 'aaa';
}
但下面這樣將字串改成雙引號就又正常了,
還蠻奇怪的,
會不會是 windows defender 有點問題?
if (isset($_GET['messageMethod'])) {
echo "aaa";
}
如果那是公司專案,
而且裡面確實沒有問題,
那應該是防毒軟體的問題,
防毒軟體總是會刪了很多我們要的檔案...
有一種病毒他的特性是附加在檔案的最後方隱藏區域(名稱忘了,好像磁區是NTFS格式特有?)
這種病毒會透過這個特性隱藏自身的存在,特性是檔案大小會變大(也許只是放置要執行的病毒位置而增加的大小不多)
這類病毒通常會感染執行檔、批次檔,在執行的時候就會一並觸發病毒~
不過php....對網頁伺服器而言算是批次檔還是執行檔??
可以看每個檔案的擁有者有無異常,或著看網頁服務的log(像iis 或apache)